test_booleanfield.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. from __future__ import unicode_literals
  2. import pickle
  3. from django.forms import BooleanField, ValidationError
  4. from django.test import SimpleTestCase
  5. class BooleanFieldTest(SimpleTestCase):
  6. def test_booleanfield_clean_1(self):
  7. f = BooleanField()
  8. with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
  9. f.clean('')
  10. with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
  11. f.clean(None)
  12. self.assertTrue(f.clean(True))
  13. with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
  14. f.clean(False)
  15. self.assertTrue(f.clean(1))
  16. with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
  17. f.clean(0)
  18. self.assertTrue(f.clean('Django rocks'))
  19. self.assertTrue(f.clean('True'))
  20. with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
  21. f.clean('False')
  22. def test_booleanfield_clean_2(self):
  23. f = BooleanField(required=False)
  24. self.assertIs(f.clean(''), False)
  25. self.assertIs(f.clean(None), False)
  26. self.assertIs(f.clean(True), True)
  27. self.assertIs(f.clean(False), False)
  28. self.assertIs(f.clean(1), True)
  29. self.assertIs(f.clean(0), False)
  30. self.assertIs(f.clean('1'), True)
  31. self.assertIs(f.clean('0'), False)
  32. self.assertIs(f.clean('Django rocks'), True)
  33. self.assertIs(f.clean('False'), False)
  34. self.assertIs(f.clean('false'), False)
  35. self.assertIs(f.clean('FaLsE'), False)
  36. def test_boolean_picklable(self):
  37. self.assertIsInstance(pickle.loads(pickle.dumps(BooleanField())), BooleanField)
  38. def test_booleanfield_changed(self):
  39. f = BooleanField()
  40. self.assertFalse(f.has_changed(None, None))
  41. self.assertFalse(f.has_changed(None, ''))
  42. self.assertFalse(f.has_changed('', None))
  43. self.assertFalse(f.has_changed('', ''))
  44. self.assertTrue(f.has_changed(False, 'on'))
  45. self.assertFalse(f.has_changed(True, 'on'))
  46. self.assertTrue(f.has_changed(True, ''))
  47. # Initial value may have mutated to a string due to show_hidden_initial (#19537)
  48. self.assertTrue(f.has_changed('False', 'on'))
  49. # HiddenInput widget sends string values for boolean but doesn't clean them in value_from_datadict
  50. self.assertFalse(f.has_changed(False, 'False'))
  51. self.assertFalse(f.has_changed(True, 'True'))
  52. self.assertTrue(f.has_changed(False, 'True'))
  53. self.assertTrue(f.has_changed(True, 'False'))