1. import datetime
    
  2. 
    
  3. from django.core.exceptions import ValidationError
    
  4. from django.forms import TimeField
    
  5. from django.test import SimpleTestCase
    
  6. 
    
  7. from . import FormFieldAssertionsMixin
    
  8. 
    
  9. 
    
  10. class TimeFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
    
  11.     def test_timefield_1(self):
    
  12.         f = TimeField()
    
  13.         self.assertEqual(datetime.time(14, 25), f.clean(datetime.time(14, 25)))
    
  14.         self.assertEqual(datetime.time(14, 25, 59), f.clean(datetime.time(14, 25, 59)))
    
  15.         self.assertEqual(datetime.time(14, 25), f.clean("14:25"))
    
  16.         self.assertEqual(datetime.time(14, 25, 59), f.clean("14:25:59"))
    
  17.         with self.assertRaisesMessage(ValidationError, "'Enter a valid time.'"):
    
  18.             f.clean("hello")
    
  19.         with self.assertRaisesMessage(ValidationError, "'Enter a valid time.'"):
    
  20.             f.clean("1:24 p.m.")
    
  21. 
    
  22.     def test_timefield_2(self):
    
  23.         f = TimeField(input_formats=["%I:%M %p"])
    
  24.         self.assertEqual(datetime.time(14, 25), f.clean(datetime.time(14, 25)))
    
  25.         self.assertEqual(datetime.time(14, 25, 59), f.clean(datetime.time(14, 25, 59)))
    
  26.         self.assertEqual(datetime.time(4, 25), f.clean("4:25 AM"))
    
  27.         self.assertEqual(datetime.time(16, 25), f.clean("4:25 PM"))
    
  28.         with self.assertRaisesMessage(ValidationError, "'Enter a valid time.'"):
    
  29.             f.clean("14:30:45")
    
  30. 
    
  31.     def test_timefield_3(self):
    
  32.         f = TimeField()
    
  33.         # Test whitespace stripping behavior (#5714)
    
  34.         self.assertEqual(datetime.time(14, 25), f.clean(" 14:25 "))
    
  35.         self.assertEqual(datetime.time(14, 25, 59), f.clean(" 14:25:59 "))
    
  36.         with self.assertRaisesMessage(ValidationError, "'Enter a valid time.'"):
    
  37.             f.clean("   ")
    
  38. 
    
  39.     def test_timefield_changed(self):
    
  40.         t1 = datetime.time(12, 51, 34, 482548)
    
  41.         t2 = datetime.time(12, 51)
    
  42.         f = TimeField(input_formats=["%H:%M", "%H:%M %p"])
    
  43.         self.assertTrue(f.has_changed(t1, "12:51"))
    
  44.         self.assertFalse(f.has_changed(t2, "12:51"))
    
  45.         self.assertFalse(f.has_changed(t2, "12:51 PM"))