summaryrefslogtreecommitdiff
path: root/tests/utils_tests/test_dateparse.py
diff options
context:
space:
mode:
authorMarc Tamlyn <marc.tamlyn@gmail.com>2014-07-24 13:57:24 +0100
committerMarc Tamlyn <marc.tamlyn@gmail.com>2014-12-20 18:28:29 +0000
commit57554442fe3e209c135e15dda4ea45123e579e58 (patch)
tree0ef2cb0e3048d13b82e4c7e81192df6124556a44 /tests/utils_tests/test_dateparse.py
parenta3d96bee36040975ded8e3bf02e33e48d06f1f16 (diff)
Fixed #2443 -- Added DurationField.
A field for storing periods of time - modeled in Python by timedelta. It is stored in the native interval data type on PostgreSQL and as a bigint of microseconds on other backends. Also includes significant changes to the internals of time related maths in expressions, including the removal of DateModifierNode. Thanks to Tim and Josh in particular for reviews.
Diffstat (limited to 'tests/utils_tests/test_dateparse.py')
-rw-r--r--tests/utils_tests/test_dateparse.py44
1 files changed, 42 insertions, 2 deletions
diff --git a/tests/utils_tests/test_dateparse.py b/tests/utils_tests/test_dateparse.py
index cdf91c039e..a224e3b174 100644
--- a/tests/utils_tests/test_dateparse.py
+++ b/tests/utils_tests/test_dateparse.py
@@ -1,9 +1,9 @@
from __future__ import unicode_literals
-from datetime import date, time, datetime
+from datetime import date, time, datetime, timedelta
import unittest
-from django.utils.dateparse import parse_date, parse_time, parse_datetime
+from django.utils.dateparse import parse_date, parse_time, parse_datetime, parse_duration
from django.utils.timezone import get_fixed_timezone
@@ -46,3 +46,43 @@ class DateParseTests(unittest.TestCase):
# Invalid inputs
self.assertEqual(parse_datetime('20120423091500'), None)
self.assertRaises(ValueError, parse_datetime, '2012-04-56T09:15:90')
+
+
+class DurationParseTests(unittest.TestCase):
+ def test_seconds(self):
+ self.assertEqual(parse_duration('30'), timedelta(seconds=30))
+
+ def test_minutes_seconds(self):
+ self.assertEqual(parse_duration('15:30'), timedelta(minutes=15, seconds=30))
+ self.assertEqual(parse_duration('5:30'), timedelta(minutes=5, seconds=30))
+
+ def test_hours_minutes_seconds(self):
+ self.assertEqual(parse_duration('10:15:30'), timedelta(hours=10, minutes=15, seconds=30))
+ self.assertEqual(parse_duration('1:15:30'), timedelta(hours=1, minutes=15, seconds=30))
+ self.assertEqual(parse_duration('100:200:300'), timedelta(hours=100, minutes=200, seconds=300))
+
+ def test_days(self):
+ self.assertEqual(parse_duration('4 15:30'), timedelta(days=4, minutes=15, seconds=30))
+ self.assertEqual(parse_duration('4 10:15:30'), timedelta(days=4, hours=10, minutes=15, seconds=30))
+
+ def test_fractions_of_seconds(self):
+ self.assertEqual(parse_duration('15:30.1'), timedelta(minutes=15, seconds=30, milliseconds=100))
+ self.assertEqual(parse_duration('15:30.01'), timedelta(minutes=15, seconds=30, milliseconds=10))
+ self.assertEqual(parse_duration('15:30.001'), timedelta(minutes=15, seconds=30, milliseconds=1))
+ self.assertEqual(parse_duration('15:30.0001'), timedelta(minutes=15, seconds=30, microseconds=100))
+ self.assertEqual(parse_duration('15:30.00001'), timedelta(minutes=15, seconds=30, microseconds=10))
+ self.assertEqual(parse_duration('15:30.000001'), timedelta(minutes=15, seconds=30, microseconds=1))
+
+ def test_negative(self):
+ self.assertEqual(parse_duration('-4 15:30'), timedelta(days=-4, minutes=15, seconds=30))
+
+ def test_iso_8601(self):
+ self.assertEqual(parse_duration('P4Y'), None)
+ self.assertEqual(parse_duration('P4M'), None)
+ self.assertEqual(parse_duration('P4W'), None)
+ self.assertEqual(parse_duration('P4D'), timedelta(days=4))
+ self.assertEqual(parse_duration('P0.5D'), timedelta(hours=12))
+ self.assertEqual(parse_duration('PT5H'), timedelta(hours=5))
+ self.assertEqual(parse_duration('PT5M'), timedelta(minutes=5))
+ self.assertEqual(parse_duration('PT5S'), timedelta(seconds=5))
+ self.assertEqual(parse_duration('PT0.000005S'), timedelta(microseconds=5))