test_splitdatetimewidget.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. from datetime import date, datetime, time
  2. from django.forms import Form, SplitDateTimeField, SplitDateTimeWidget
  3. from .base import WidgetTest
  4. class SplitDateTimeWidgetTest(WidgetTest):
  5. widget = SplitDateTimeWidget()
  6. def test_render_empty(self):
  7. self.check_html(
  8. self.widget,
  9. "date",
  10. "",
  11. html=('<input type="text" name="date_0"><input type="text" name="date_1">'),
  12. )
  13. def test_render_none(self):
  14. self.check_html(
  15. self.widget,
  16. "date",
  17. None,
  18. html=('<input type="text" name="date_0"><input type="text" name="date_1">'),
  19. )
  20. def test_render_datetime(self):
  21. self.check_html(
  22. self.widget,
  23. "date",
  24. datetime(2006, 1, 10, 7, 30),
  25. html=(
  26. '<input type="text" name="date_0" value="2006-01-10">'
  27. '<input type="text" name="date_1" value="07:30:00">'
  28. ),
  29. )
  30. def test_render_date_and_time(self):
  31. self.check_html(
  32. self.widget,
  33. "date",
  34. [date(2006, 1, 10), time(7, 30)],
  35. html=(
  36. '<input type="text" name="date_0" value="2006-01-10">'
  37. '<input type="text" name="date_1" value="07:30:00">'
  38. ),
  39. )
  40. def test_constructor_attrs(self):
  41. widget = SplitDateTimeWidget(attrs={"class": "pretty"})
  42. self.check_html(
  43. widget,
  44. "date",
  45. datetime(2006, 1, 10, 7, 30),
  46. html=(
  47. '<input type="text" class="pretty" value="2006-01-10" name="date_0">'
  48. '<input type="text" class="pretty" value="07:30:00" name="date_1">'
  49. ),
  50. )
  51. def test_constructor_different_attrs(self):
  52. html = (
  53. '<input type="text" class="foo" value="2006-01-10" name="date_0">'
  54. '<input type="text" class="bar" value="07:30:00" name="date_1">'
  55. )
  56. widget = SplitDateTimeWidget(
  57. date_attrs={"class": "foo"}, time_attrs={"class": "bar"}
  58. )
  59. self.check_html(widget, "date", datetime(2006, 1, 10, 7, 30), html=html)
  60. widget = SplitDateTimeWidget(
  61. date_attrs={"class": "foo"}, attrs={"class": "bar"}
  62. )
  63. self.check_html(widget, "date", datetime(2006, 1, 10, 7, 30), html=html)
  64. widget = SplitDateTimeWidget(
  65. time_attrs={"class": "bar"}, attrs={"class": "foo"}
  66. )
  67. self.check_html(widget, "date", datetime(2006, 1, 10, 7, 30), html=html)
  68. def test_formatting(self):
  69. """
  70. Use 'date_format' and 'time_format' to change the way a value is
  71. displayed.
  72. """
  73. widget = SplitDateTimeWidget(
  74. date_format="%d/%m/%Y",
  75. time_format="%H:%M",
  76. )
  77. self.check_html(
  78. widget,
  79. "date",
  80. datetime(2006, 1, 10, 7, 30),
  81. html=(
  82. '<input type="text" name="date_0" value="10/01/2006">'
  83. '<input type="text" name="date_1" value="07:30">'
  84. ),
  85. )
  86. self.check_html(
  87. widget,
  88. "date",
  89. datetime(2006, 1, 10, 7, 30),
  90. html=(
  91. '<input type="text" name="date_0" value="10/01/2006">'
  92. '<input type="text" name="date_1" value="07:30">'
  93. ),
  94. )
  95. def test_fieldset(self):
  96. class TestForm(Form):
  97. template_name = "forms_tests/use_fieldset.html"
  98. field = SplitDateTimeField(widget=self.widget)
  99. form = TestForm()
  100. self.assertIs(self.widget.use_fieldset, True)
  101. self.assertHTMLEqual(
  102. '<div><fieldset><legend>Field:</legend><input type="text" '
  103. 'name="field_0" required id="id_field_0"><input type="text" '
  104. 'name="field_1" required id="id_field_1"></fieldset></div>',
  105. form.render(),
  106. )