test_duration.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import datetime
  2. import unittest
  3. from django.utils.dateparse import parse_duration
  4. from django.utils.duration import duration_iso_string, duration_string
  5. class TestDurationString(unittest.TestCase):
  6. def test_simple(self):
  7. duration = datetime.timedelta(hours=1, minutes=3, seconds=5)
  8. self.assertEqual(duration_string(duration), '01:03:05')
  9. def test_days(self):
  10. duration = datetime.timedelta(days=1, hours=1, minutes=3, seconds=5)
  11. self.assertEqual(duration_string(duration), '1 01:03:05')
  12. def test_microseconds(self):
  13. duration = datetime.timedelta(hours=1, minutes=3, seconds=5, microseconds=12345)
  14. self.assertEqual(duration_string(duration), '01:03:05.012345')
  15. def test_negative(self):
  16. duration = datetime.timedelta(days=-1, hours=1, minutes=3, seconds=5)
  17. self.assertEqual(duration_string(duration), '-1 01:03:05')
  18. class TestParseDurationRoundtrip(unittest.TestCase):
  19. def test_simple(self):
  20. duration = datetime.timedelta(hours=1, minutes=3, seconds=5)
  21. self.assertEqual(parse_duration(duration_string(duration)), duration)
  22. def test_days(self):
  23. duration = datetime.timedelta(days=1, hours=1, minutes=3, seconds=5)
  24. self.assertEqual(parse_duration(duration_string(duration)), duration)
  25. def test_microseconds(self):
  26. duration = datetime.timedelta(hours=1, minutes=3, seconds=5, microseconds=12345)
  27. self.assertEqual(parse_duration(duration_string(duration)), duration)
  28. def test_negative(self):
  29. duration = datetime.timedelta(days=-1, hours=1, minutes=3, seconds=5)
  30. self.assertEqual(parse_duration(duration_string(duration)), duration)
  31. class TestISODurationString(unittest.TestCase):
  32. def test_simple(self):
  33. duration = datetime.timedelta(hours=1, minutes=3, seconds=5)
  34. self.assertEqual(duration_iso_string(duration), 'P0DT01H03M05S')
  35. def test_days(self):
  36. duration = datetime.timedelta(days=1, hours=1, minutes=3, seconds=5)
  37. self.assertEqual(duration_iso_string(duration), 'P1DT01H03M05S')
  38. def test_microseconds(self):
  39. duration = datetime.timedelta(hours=1, minutes=3, seconds=5, microseconds=12345)
  40. self.assertEqual(duration_iso_string(duration), 'P0DT01H03M05.012345S')
  41. def test_negative(self):
  42. duration = -1 * datetime.timedelta(days=1, hours=1, minutes=3, seconds=5)
  43. self.assertEqual(duration_iso_string(duration), '-P1DT01H03M05S')
  44. class TestParseISODurationRoundtrip(unittest.TestCase):
  45. def test_simple(self):
  46. duration = datetime.timedelta(hours=1, minutes=3, seconds=5)
  47. self.assertEqual(parse_duration(duration_iso_string(duration)), duration)
  48. def test_days(self):
  49. duration = datetime.timedelta(days=1, hours=1, minutes=3, seconds=5)
  50. self.assertEqual(parse_duration(duration_iso_string(duration)), duration)
  51. def test_microseconds(self):
  52. duration = datetime.timedelta(hours=1, minutes=3, seconds=5, microseconds=12345)
  53. self.assertEqual(parse_duration(duration_iso_string(duration)), duration)
  54. def test_negative(self):
  55. duration = datetime.timedelta(days=-1, hours=1, minutes=3, seconds=5)
  56. self.assertEqual(parse_duration(duration_iso_string(duration)).total_seconds(), duration.total_seconds())