PageRenderTime 293ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/regressiontests/forms/tests/input_formats.py

https://code.google.com/p/mango-py/
Python | 894 lines | 507 code | 207 blank | 180 comment | 0 complexity | bc0ceb028cf4faf8d8bea2208044f93f MD5 | raw file
Possible License(s): BSD-3-Clause
  1. from datetime import time, date, datetime
  2. from django import forms
  3. from django.conf import settings
  4. from django.utils.translation import activate, deactivate
  5. from django.utils.unittest import TestCase
  6. class LocalizedTimeTests(TestCase):
  7. def setUp(self):
  8. self.old_TIME_INPUT_FORMATS = settings.TIME_INPUT_FORMATS
  9. self.old_USE_L10N = settings.USE_L10N
  10. settings.TIME_INPUT_FORMATS = ["%I:%M:%S %p", "%I:%M %p"]
  11. settings.USE_L10N = True
  12. activate('de')
  13. def tearDown(self):
  14. settings.TIME_INPUT_FORMATS = self.old_TIME_INPUT_FORMATS
  15. settings.USE_L10N = self.old_USE_L10N
  16. deactivate()
  17. def test_timeField(self):
  18. "TimeFields can parse dates in the default format"
  19. f = forms.TimeField()
  20. # Parse a time in an unaccepted format; get an error
  21. self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM')
  22. # Parse a time in a valid format, get a parsed result
  23. result = f.clean('13:30:05')
  24. self.assertEqual(result, time(13,30,5))
  25. # Check that the parsed result does a round trip
  26. text = f.widget._format_value(result)
  27. self.assertEqual(text, '13:30:05')
  28. # Parse a time in a valid, but non-default format, get a parsed result
  29. result = f.clean('13:30')
  30. self.assertEqual(result, time(13,30,0))
  31. # Check that the parsed result does a round trip to default format
  32. text = f.widget._format_value(result)
  33. self.assertEqual(text, "13:30:00")
  34. def test_localized_timeField(self):
  35. "Localized TimeFields act as unlocalized widgets"
  36. f = forms.TimeField(localize=True)
  37. # Parse a time in an unaccepted format; get an error
  38. self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM')
  39. # Parse a time in a valid format, get a parsed result
  40. result = f.clean('13:30:05')
  41. self.assertEqual(result, time(13,30,5))
  42. # Check that the parsed result does a round trip to the same format
  43. text = f.widget._format_value(result)
  44. self.assertEqual(text, '13:30:05')
  45. # Parse a time in a valid format, get a parsed result
  46. result = f.clean('13:30')
  47. self.assertEqual(result, time(13,30,0))
  48. # Check that the parsed result does a round trip to default format
  49. text = f.widget._format_value(result)
  50. self.assertEqual(text, "13:30:00")
  51. def test_timeField_with_inputformat(self):
  52. "TimeFields with manually specified input formats can accept those formats"
  53. f = forms.TimeField(input_formats=["%H.%M.%S", "%H.%M"])
  54. # Parse a time in an unaccepted format; get an error
  55. self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM')
  56. self.assertRaises(forms.ValidationError, f.clean, '13:30:05')
  57. # Parse a time in a valid format, get a parsed result
  58. result = f.clean('13.30.05')
  59. self.assertEqual(result, time(13,30,5))
  60. # Check that the parsed result does a round trip to the same format
  61. text = f.widget._format_value(result)
  62. self.assertEqual(text, "13:30:05")
  63. # Parse a time in a valid format, get a parsed result
  64. result = f.clean('13.30')
  65. self.assertEqual(result, time(13,30,0))
  66. # Check that the parsed result does a round trip to default format
  67. text = f.widget._format_value(result)
  68. self.assertEqual(text, "13:30:00")
  69. def test_localized_timeField_with_inputformat(self):
  70. "Localized TimeFields with manually specified input formats can accept those formats"
  71. f = forms.TimeField(input_formats=["%H.%M.%S", "%H.%M"], localize=True)
  72. # Parse a time in an unaccepted format; get an error
  73. self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM')
  74. self.assertRaises(forms.ValidationError, f.clean, '13:30:05')
  75. # Parse a time in a valid format, get a parsed result
  76. result = f.clean('13.30.05')
  77. self.assertEqual(result, time(13,30,5))
  78. # # Check that the parsed result does a round trip to the same format
  79. text = f.widget._format_value(result)
  80. self.assertEqual(text, "13:30:05")
  81. # Parse a time in a valid format, get a parsed result
  82. result = f.clean('13.30')
  83. self.assertEqual(result, time(13,30,0))
  84. # Check that the parsed result does a round trip to default format
  85. text = f.widget._format_value(result)
  86. self.assertEqual(text, "13:30:00")
  87. class CustomTimeInputFormatsTests(TestCase):
  88. def setUp(self):
  89. self.old_TIME_INPUT_FORMATS = settings.TIME_INPUT_FORMATS
  90. settings.TIME_INPUT_FORMATS = ["%I:%M:%S %p", "%I:%M %p"]
  91. def tearDown(self):
  92. settings.TIME_INPUT_FORMATS = self.old_TIME_INPUT_FORMATS
  93. def test_timeField(self):
  94. "TimeFields can parse dates in the default format"
  95. f = forms.TimeField()
  96. # Parse a time in an unaccepted format; get an error
  97. self.assertRaises(forms.ValidationError, f.clean, '13:30:05')
  98. # Parse a time in a valid format, get a parsed result
  99. result = f.clean('1:30:05 PM')
  100. self.assertEqual(result, time(13,30,5))
  101. # Check that the parsed result does a round trip
  102. text = f.widget._format_value(result)
  103. self.assertEqual(text, '01:30:05 PM')
  104. # Parse a time in a valid, but non-default format, get a parsed result
  105. result = f.clean('1:30 PM')
  106. self.assertEqual(result, time(13,30,0))
  107. # Check that the parsed result does a round trip to default format
  108. text = f.widget._format_value(result)
  109. self.assertEqual(text, "01:30:00 PM")
  110. def test_localized_timeField(self):
  111. "Localized TimeFields act as unlocalized widgets"
  112. f = forms.TimeField(localize=True)
  113. # Parse a time in an unaccepted format; get an error
  114. self.assertRaises(forms.ValidationError, f.clean, '13:30:05')
  115. # Parse a time in a valid format, get a parsed result
  116. result = f.clean('1:30:05 PM')
  117. self.assertEqual(result, time(13,30,5))
  118. # Check that the parsed result does a round trip to the same format
  119. text = f.widget._format_value(result)
  120. self.assertEqual(text, '01:30:05 PM')
  121. # Parse a time in a valid format, get a parsed result
  122. result = f.clean('01:30 PM')
  123. self.assertEqual(result, time(13,30,0))
  124. # Check that the parsed result does a round trip to default format
  125. text = f.widget._format_value(result)
  126. self.assertEqual(text, "01:30:00 PM")
  127. def test_timeField_with_inputformat(self):
  128. "TimeFields with manually specified input formats can accept those formats"
  129. f = forms.TimeField(input_formats=["%H.%M.%S", "%H.%M"])
  130. # Parse a time in an unaccepted format; get an error
  131. self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM')
  132. self.assertRaises(forms.ValidationError, f.clean, '13:30:05')
  133. # Parse a time in a valid format, get a parsed result
  134. result = f.clean('13.30.05')
  135. self.assertEqual(result, time(13,30,5))
  136. # Check that the parsed result does a round trip to the same format
  137. text = f.widget._format_value(result)
  138. self.assertEqual(text, "01:30:05 PM")
  139. # Parse a time in a valid format, get a parsed result
  140. result = f.clean('13.30')
  141. self.assertEqual(result, time(13,30,0))
  142. # Check that the parsed result does a round trip to default format
  143. text = f.widget._format_value(result)
  144. self.assertEqual(text, "01:30:00 PM")
  145. def test_localized_timeField_with_inputformat(self):
  146. "Localized TimeFields with manually specified input formats can accept those formats"
  147. f = forms.TimeField(input_formats=["%H.%M.%S", "%H.%M"], localize=True)
  148. # Parse a time in an unaccepted format; get an error
  149. self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM')
  150. self.assertRaises(forms.ValidationError, f.clean, '13:30:05')
  151. # Parse a time in a valid format, get a parsed result
  152. result = f.clean('13.30.05')
  153. self.assertEqual(result, time(13,30,5))
  154. # # Check that the parsed result does a round trip to the same format
  155. text = f.widget._format_value(result)
  156. self.assertEqual(text, "01:30:05 PM")
  157. # Parse a time in a valid format, get a parsed result
  158. result = f.clean('13.30')
  159. self.assertEqual(result, time(13,30,0))
  160. # Check that the parsed result does a round trip to default format
  161. text = f.widget._format_value(result)
  162. self.assertEqual(text, "01:30:00 PM")
  163. class SimpleTimeFormatTests(TestCase):
  164. def test_timeField(self):
  165. "TimeFields can parse dates in the default format"
  166. f = forms.TimeField()
  167. # Parse a time in an unaccepted format; get an error
  168. self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM')
  169. # Parse a time in a valid format, get a parsed result
  170. result = f.clean('13:30:05')
  171. self.assertEqual(result, time(13,30,5))
  172. # Check that the parsed result does a round trip to the same format
  173. text = f.widget._format_value(result)
  174. self.assertEqual(text, "13:30:05")
  175. # Parse a time in a valid, but non-default format, get a parsed result
  176. result = f.clean('13:30')
  177. self.assertEqual(result, time(13,30,0))
  178. # Check that the parsed result does a round trip to default format
  179. text = f.widget._format_value(result)
  180. self.assertEqual(text, "13:30:00")
  181. def test_localized_timeField(self):
  182. "Localized TimeFields in a non-localized environment act as unlocalized widgets"
  183. f = forms.TimeField()
  184. # Parse a time in an unaccepted format; get an error
  185. self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM')
  186. # Parse a time in a valid format, get a parsed result
  187. result = f.clean('13:30:05')
  188. self.assertEqual(result, time(13,30,5))
  189. # Check that the parsed result does a round trip to the same format
  190. text = f.widget._format_value(result)
  191. self.assertEqual(text, "13:30:05")
  192. # Parse a time in a valid format, get a parsed result
  193. result = f.clean('13:30')
  194. self.assertEqual(result, time(13,30,0))
  195. # Check that the parsed result does a round trip to default format
  196. text = f.widget._format_value(result)
  197. self.assertEqual(text, "13:30:00")
  198. def test_timeField_with_inputformat(self):
  199. "TimeFields with manually specified input formats can accept those formats"
  200. f = forms.TimeField(input_formats=["%I:%M:%S %p", "%I:%M %p"])
  201. # Parse a time in an unaccepted format; get an error
  202. self.assertRaises(forms.ValidationError, f.clean, '13:30:05')
  203. # Parse a time in a valid format, get a parsed result
  204. result = f.clean('1:30:05 PM')
  205. self.assertEqual(result, time(13,30,5))
  206. # Check that the parsed result does a round trip to the same format
  207. text = f.widget._format_value(result)
  208. self.assertEqual(text, "13:30:05")
  209. # Parse a time in a valid format, get a parsed result
  210. result = f.clean('1:30 PM')
  211. self.assertEqual(result, time(13,30,0))
  212. # Check that the parsed result does a round trip to default format
  213. text = f.widget._format_value(result)
  214. self.assertEqual(text, "13:30:00")
  215. def test_localized_timeField_with_inputformat(self):
  216. "Localized TimeFields with manually specified input formats can accept those formats"
  217. f = forms.TimeField(input_formats=["%I:%M:%S %p", "%I:%M %p"], localize=True)
  218. # Parse a time in an unaccepted format; get an error
  219. self.assertRaises(forms.ValidationError, f.clean, '13:30:05')
  220. # Parse a time in a valid format, get a parsed result
  221. result = f.clean('1:30:05 PM')
  222. self.assertEqual(result, time(13,30,5))
  223. # Check that the parsed result does a round trip to the same format
  224. text = f.widget._format_value(result)
  225. self.assertEqual(text, "13:30:05")
  226. # Parse a time in a valid format, get a parsed result
  227. result = f.clean('1:30 PM')
  228. self.assertEqual(result, time(13,30,0))
  229. # Check that the parsed result does a round trip to default format
  230. text = f.widget._format_value(result)
  231. self.assertEqual(text, "13:30:00")
  232. class LocalizedDateTests(TestCase):
  233. def setUp(self):
  234. self.old_DATE_INPUT_FORMATS = settings.DATE_INPUT_FORMATS
  235. self.old_USE_L10N = settings.USE_L10N
  236. settings.DATE_INPUT_FORMATS = ["%d/%m/%Y", "%d-%m-%Y"]
  237. settings.USE_L10N = True
  238. activate('de')
  239. def tearDown(self):
  240. settings.DATE_INPUT_FORMATS = self.old_DATE_INPUT_FORMATS
  241. settings.USE_L10N = self.old_USE_L10N
  242. deactivate()
  243. def test_dateField(self):
  244. "DateFields can parse dates in the default format"
  245. f = forms.DateField()
  246. # Parse a date in an unaccepted format; get an error
  247. self.assertRaises(forms.ValidationError, f.clean, '21/12/2010')
  248. # Parse a date in a valid format, get a parsed result
  249. result = f.clean('21.12.2010')
  250. self.assertEqual(result, date(2010,12,21))
  251. # Check that the parsed result does a round trip
  252. text = f.widget._format_value(result)
  253. self.assertEqual(text, '21.12.2010')
  254. # Parse a date in a valid, but non-default format, get a parsed result
  255. result = f.clean('21.12.10')
  256. self.assertEqual(result, date(2010,12,21))
  257. # Check that the parsed result does a round trip to default format
  258. text = f.widget._format_value(result)
  259. self.assertEqual(text, "21.12.2010")
  260. def test_localized_dateField(self):
  261. "Localized DateFields act as unlocalized widgets"
  262. f = forms.DateField(localize=True)
  263. # Parse a date in an unaccepted format; get an error
  264. self.assertRaises(forms.ValidationError, f.clean, '21/12/2010')
  265. # Parse a date in a valid format, get a parsed result
  266. result = f.clean('21.12.2010')
  267. self.assertEqual(result, date(2010,12,21))
  268. # Check that the parsed result does a round trip to the same format
  269. text = f.widget._format_value(result)
  270. self.assertEqual(text, '21.12.2010')
  271. # Parse a date in a valid format, get a parsed result
  272. result = f.clean('21.12.10')
  273. self.assertEqual(result, date(2010,12,21))
  274. # Check that the parsed result does a round trip to default format
  275. text = f.widget._format_value(result)
  276. self.assertEqual(text, "21.12.2010")
  277. def test_dateField_with_inputformat(self):
  278. "DateFields with manually specified input formats can accept those formats"
  279. f = forms.DateField(input_formats=["%m.%d.%Y", "%m-%d-%Y"])
  280. # Parse a date in an unaccepted format; get an error
  281. self.assertRaises(forms.ValidationError, f.clean, '2010-12-21')
  282. self.assertRaises(forms.ValidationError, f.clean, '21/12/2010')
  283. self.assertRaises(forms.ValidationError, f.clean, '21.12.2010')
  284. # Parse a date in a valid format, get a parsed result
  285. result = f.clean('12.21.2010')
  286. self.assertEqual(result, date(2010,12,21))
  287. # Check that the parsed result does a round trip to the same format
  288. text = f.widget._format_value(result)
  289. self.assertEqual(text, "21.12.2010")
  290. # Parse a date in a valid format, get a parsed result
  291. result = f.clean('12-21-2010')
  292. self.assertEqual(result, date(2010,12,21))
  293. # Check that the parsed result does a round trip to default format
  294. text = f.widget._format_value(result)
  295. self.assertEqual(text, "21.12.2010")
  296. def test_localized_dateField_with_inputformat(self):
  297. "Localized DateFields with manually specified input formats can accept those formats"
  298. f = forms.DateField(input_formats=["%m.%d.%Y", "%m-%d-%Y"], localize=True)
  299. # Parse a date in an unaccepted format; get an error
  300. self.assertRaises(forms.ValidationError, f.clean, '2010-12-21')
  301. self.assertRaises(forms.ValidationError, f.clean, '21/12/2010')
  302. self.assertRaises(forms.ValidationError, f.clean, '21.12.2010')
  303. # Parse a date in a valid format, get a parsed result
  304. result = f.clean('12.21.2010')
  305. self.assertEqual(result, date(2010,12,21))
  306. # # Check that the parsed result does a round trip to the same format
  307. text = f.widget._format_value(result)
  308. self.assertEqual(text, "21.12.2010")
  309. # Parse a date in a valid format, get a parsed result
  310. result = f.clean('12-21-2010')
  311. self.assertEqual(result, date(2010,12,21))
  312. # Check that the parsed result does a round trip to default format
  313. text = f.widget._format_value(result)
  314. self.assertEqual(text, "21.12.2010")
  315. class CustomDateInputFormatsTests(TestCase):
  316. def setUp(self):
  317. self.old_DATE_INPUT_FORMATS = settings.DATE_INPUT_FORMATS
  318. settings.DATE_INPUT_FORMATS = ["%d.%m.%Y", "%d-%m-%Y"]
  319. def tearDown(self):
  320. settings.DATE_INPUT_FORMATS = self.old_DATE_INPUT_FORMATS
  321. def test_dateField(self):
  322. "DateFields can parse dates in the default format"
  323. f = forms.DateField()
  324. # Parse a date in an unaccepted format; get an error
  325. self.assertRaises(forms.ValidationError, f.clean, '2010-12-21')
  326. # Parse a date in a valid format, get a parsed result
  327. result = f.clean('21.12.2010')
  328. self.assertEqual(result, date(2010,12,21))
  329. # Check that the parsed result does a round trip
  330. text = f.widget._format_value(result)
  331. self.assertEqual(text, '21.12.2010')
  332. # Parse a date in a valid, but non-default format, get a parsed result
  333. result = f.clean('21-12-2010')
  334. self.assertEqual(result, date(2010,12,21))
  335. # Check that the parsed result does a round trip to default format
  336. text = f.widget._format_value(result)
  337. self.assertEqual(text, "21.12.2010")
  338. def test_localized_dateField(self):
  339. "Localized DateFields act as unlocalized widgets"
  340. f = forms.DateField(localize=True)
  341. # Parse a date in an unaccepted format; get an error
  342. self.assertRaises(forms.ValidationError, f.clean, '2010-12-21')
  343. # Parse a date in a valid format, get a parsed result
  344. result = f.clean('21.12.2010')
  345. self.assertEqual(result, date(2010,12,21))
  346. # Check that the parsed result does a round trip to the same format
  347. text = f.widget._format_value(result)
  348. self.assertEqual(text, '21.12.2010')
  349. # Parse a date in a valid format, get a parsed result
  350. result = f.clean('21-12-2010')
  351. self.assertEqual(result, date(2010,12,21))
  352. # Check that the parsed result does a round trip to default format
  353. text = f.widget._format_value(result)
  354. self.assertEqual(text, "21.12.2010")
  355. def test_dateField_with_inputformat(self):
  356. "DateFields with manually specified input formats can accept those formats"
  357. f = forms.DateField(input_formats=["%m.%d.%Y", "%m-%d-%Y"])
  358. # Parse a date in an unaccepted format; get an error
  359. self.assertRaises(forms.ValidationError, f.clean, '21.12.2010')
  360. self.assertRaises(forms.ValidationError, f.clean, '2010-12-21')
  361. # Parse a date in a valid format, get a parsed result
  362. result = f.clean('12.21.2010')
  363. self.assertEqual(result, date(2010,12,21))
  364. # Check that the parsed result does a round trip to the same format
  365. text = f.widget._format_value(result)
  366. self.assertEqual(text, "21.12.2010")
  367. # Parse a date in a valid format, get a parsed result
  368. result = f.clean('12-21-2010')
  369. self.assertEqual(result, date(2010,12,21))
  370. # Check that the parsed result does a round trip to default format
  371. text = f.widget._format_value(result)
  372. self.assertEqual(text, "21.12.2010")
  373. def test_localized_dateField_with_inputformat(self):
  374. "Localized DateFields with manually specified input formats can accept those formats"
  375. f = forms.DateField(input_formats=["%m.%d.%Y", "%m-%d-%Y"], localize=True)
  376. # Parse a date in an unaccepted format; get an error
  377. self.assertRaises(forms.ValidationError, f.clean, '21.12.2010')
  378. self.assertRaises(forms.ValidationError, f.clean, '2010-12-21')
  379. # Parse a date in a valid format, get a parsed result
  380. result = f.clean('12.21.2010')
  381. self.assertEqual(result, date(2010,12,21))
  382. # # Check that the parsed result does a round trip to the same format
  383. text = f.widget._format_value(result)
  384. self.assertEqual(text, "21.12.2010")
  385. # Parse a date in a valid format, get a parsed result
  386. result = f.clean('12-21-2010')
  387. self.assertEqual(result, date(2010,12,21))
  388. # Check that the parsed result does a round trip to default format
  389. text = f.widget._format_value(result)
  390. self.assertEqual(text, "21.12.2010")
  391. class SimpleDateFormatTests(TestCase):
  392. def test_dateField(self):
  393. "DateFields can parse dates in the default format"
  394. f = forms.DateField()
  395. # Parse a date in an unaccepted format; get an error
  396. self.assertRaises(forms.ValidationError, f.clean, '21.12.2010')
  397. # Parse a date in a valid format, get a parsed result
  398. result = f.clean('2010-12-21')
  399. self.assertEqual(result, date(2010,12,21))
  400. # Check that the parsed result does a round trip to the same format
  401. text = f.widget._format_value(result)
  402. self.assertEqual(text, "2010-12-21")
  403. # Parse a date in a valid, but non-default format, get a parsed result
  404. result = f.clean('12/21/2010')
  405. self.assertEqual(result, date(2010,12,21))
  406. # Check that the parsed result does a round trip to default format
  407. text = f.widget._format_value(result)
  408. self.assertEqual(text, "2010-12-21")
  409. def test_localized_dateField(self):
  410. "Localized DateFields in a non-localized environment act as unlocalized widgets"
  411. f = forms.DateField()
  412. # Parse a date in an unaccepted format; get an error
  413. self.assertRaises(forms.ValidationError, f.clean, '21.12.2010')
  414. # Parse a date in a valid format, get a parsed result
  415. result = f.clean('2010-12-21')
  416. self.assertEqual(result, date(2010,12,21))
  417. # Check that the parsed result does a round trip to the same format
  418. text = f.widget._format_value(result)
  419. self.assertEqual(text, "2010-12-21")
  420. # Parse a date in a valid format, get a parsed result
  421. result = f.clean('12/21/2010')
  422. self.assertEqual(result, date(2010,12,21))
  423. # Check that the parsed result does a round trip to default format
  424. text = f.widget._format_value(result)
  425. self.assertEqual(text, "2010-12-21")
  426. def test_dateField_with_inputformat(self):
  427. "DateFields with manually specified input formats can accept those formats"
  428. f = forms.DateField(input_formats=["%d.%m.%Y", "%d-%m-%Y"])
  429. # Parse a date in an unaccepted format; get an error
  430. self.assertRaises(forms.ValidationError, f.clean, '2010-12-21')
  431. # Parse a date in a valid format, get a parsed result
  432. result = f.clean('21.12.2010')
  433. self.assertEqual(result, date(2010,12,21))
  434. # Check that the parsed result does a round trip to the same format
  435. text = f.widget._format_value(result)
  436. self.assertEqual(text, "2010-12-21")
  437. # Parse a date in a valid format, get a parsed result
  438. result = f.clean('21-12-2010')
  439. self.assertEqual(result, date(2010,12,21))
  440. # Check that the parsed result does a round trip to default format
  441. text = f.widget._format_value(result)
  442. self.assertEqual(text, "2010-12-21")
  443. def test_localized_dateField_with_inputformat(self):
  444. "Localized DateFields with manually specified input formats can accept those formats"
  445. f = forms.DateField(input_formats=["%d.%m.%Y", "%d-%m-%Y"], localize=True)
  446. # Parse a date in an unaccepted format; get an error
  447. self.assertRaises(forms.ValidationError, f.clean, '2010-12-21')
  448. # Parse a date in a valid format, get a parsed result
  449. result = f.clean('21.12.2010')
  450. self.assertEqual(result, date(2010,12,21))
  451. # Check that the parsed result does a round trip to the same format
  452. text = f.widget._format_value(result)
  453. self.assertEqual(text, "2010-12-21")
  454. # Parse a date in a valid format, get a parsed result
  455. result = f.clean('21-12-2010')
  456. self.assertEqual(result, date(2010,12,21))
  457. # Check that the parsed result does a round trip to default format
  458. text = f.widget._format_value(result)
  459. self.assertEqual(text, "2010-12-21")
  460. class LocalizedDateTimeTests(TestCase):
  461. def setUp(self):
  462. self.old_DATETIME_INPUT_FORMATS = settings.DATETIME_INPUT_FORMATS
  463. self.old_USE_L10N = settings.USE_L10N
  464. settings.DATETIME_INPUT_FORMATS = ["%I:%M:%S %p %d/%m/%Y", "%I:%M %p %d-%m-%Y"]
  465. settings.USE_L10N = True
  466. activate('de')
  467. def tearDown(self):
  468. settings.DATETIME_INPUT_FORMATS = self.old_DATETIME_INPUT_FORMATS
  469. settings.USE_L10N = self.old_USE_L10N
  470. deactivate()
  471. def test_dateTimeField(self):
  472. "DateTimeFields can parse dates in the default format"
  473. f = forms.DateTimeField()
  474. # Parse a date in an unaccepted format; get an error
  475. self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM 21/12/2010')
  476. # Parse a date in a valid format, get a parsed result
  477. result = f.clean('21.12.2010 13:30:05')
  478. self.assertEqual(result, datetime(2010,12,21,13,30,5))
  479. # Check that the parsed result does a round trip
  480. text = f.widget._format_value(result)
  481. self.assertEqual(text, '21.12.2010 13:30:05')
  482. # Parse a date in a valid, but non-default format, get a parsed result
  483. result = f.clean('21.12.2010 13:30')
  484. self.assertEqual(result, datetime(2010,12,21,13,30))
  485. # Check that the parsed result does a round trip to default format
  486. text = f.widget._format_value(result)
  487. self.assertEqual(text, "21.12.2010 13:30:00")
  488. def test_localized_dateTimeField(self):
  489. "Localized DateTimeFields act as unlocalized widgets"
  490. f = forms.DateTimeField(localize=True)
  491. # Parse a date in an unaccepted format; get an error
  492. self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM 21/12/2010')
  493. # Parse a date in a valid format, get a parsed result
  494. result = f.clean('21.12.2010 13:30:05')
  495. self.assertEqual(result, datetime(2010,12,21,13,30,5))
  496. # Check that the parsed result does a round trip to the same format
  497. text = f.widget._format_value(result)
  498. self.assertEqual(text, '21.12.2010 13:30:05')
  499. # Parse a date in a valid format, get a parsed result
  500. result = f.clean('21.12.2010 13:30')
  501. self.assertEqual(result, datetime(2010,12,21,13,30))
  502. # Check that the parsed result does a round trip to default format
  503. text = f.widget._format_value(result)
  504. self.assertEqual(text, "21.12.2010 13:30:00")
  505. def test_dateTimeField_with_inputformat(self):
  506. "DateTimeFields with manually specified input formats can accept those formats"
  507. f = forms.DateTimeField(input_formats=["%H.%M.%S %m.%d.%Y", "%H.%M %m-%d-%Y"])
  508. # Parse a date in an unaccepted format; get an error
  509. self.assertRaises(forms.ValidationError, f.clean, '2010-12-21 13:30:05 13:30:05')
  510. self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM 21/12/2010')
  511. self.assertRaises(forms.ValidationError, f.clean, '13:30:05 21.12.2010')
  512. # Parse a date in a valid format, get a parsed result
  513. result = f.clean('13.30.05 12.21.2010')
  514. self.assertEqual(result, datetime(2010,12,21,13,30,5))
  515. # Check that the parsed result does a round trip to the same format
  516. text = f.widget._format_value(result)
  517. self.assertEqual(text, "21.12.2010 13:30:05")
  518. # Parse a date in a valid format, get a parsed result
  519. result = f.clean('13.30 12-21-2010')
  520. self.assertEqual(result, datetime(2010,12,21,13,30))
  521. # Check that the parsed result does a round trip to default format
  522. text = f.widget._format_value(result)
  523. self.assertEqual(text, "21.12.2010 13:30:00")
  524. def test_localized_dateTimeField_with_inputformat(self):
  525. "Localized DateTimeFields with manually specified input formats can accept those formats"
  526. f = forms.DateTimeField(input_formats=["%H.%M.%S %m.%d.%Y", "%H.%M %m-%d-%Y"], localize=True)
  527. # Parse a date in an unaccepted format; get an error
  528. self.assertRaises(forms.ValidationError, f.clean, '2010-12-21 13:30:05')
  529. self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM 21/12/2010')
  530. self.assertRaises(forms.ValidationError, f.clean, '13:30:05 21.12.2010')
  531. # Parse a date in a valid format, get a parsed result
  532. result = f.clean('13.30.05 12.21.2010')
  533. self.assertEqual(result, datetime(2010,12,21,13,30,5))
  534. # # Check that the parsed result does a round trip to the same format
  535. text = f.widget._format_value(result)
  536. self.assertEqual(text, "21.12.2010 13:30:05")
  537. # Parse a date in a valid format, get a parsed result
  538. result = f.clean('13.30 12-21-2010')
  539. self.assertEqual(result, datetime(2010,12,21,13,30))
  540. # Check that the parsed result does a round trip to default format
  541. text = f.widget._format_value(result)
  542. self.assertEqual(text, "21.12.2010 13:30:00")
  543. class CustomDateTimeInputFormatsTests(TestCase):
  544. def setUp(self):
  545. self.old_DATETIME_INPUT_FORMATS = settings.DATETIME_INPUT_FORMATS
  546. settings.DATETIME_INPUT_FORMATS = ["%I:%M:%S %p %d/%m/%Y", "%I:%M %p %d-%m-%Y"]
  547. def tearDown(self):
  548. settings.DATETIME_INPUT_FORMATS = self.old_DATETIME_INPUT_FORMATS
  549. def test_dateTimeField(self):
  550. "DateTimeFields can parse dates in the default format"
  551. f = forms.DateTimeField()
  552. # Parse a date in an unaccepted format; get an error
  553. self.assertRaises(forms.ValidationError, f.clean, '2010-12-21 13:30:05')
  554. # Parse a date in a valid format, get a parsed result
  555. result = f.clean('1:30:05 PM 21/12/2010')
  556. self.assertEqual(result, datetime(2010,12,21,13,30,5))
  557. # Check that the parsed result does a round trip
  558. text = f.widget._format_value(result)
  559. self.assertEqual(text, '01:30:05 PM 21/12/2010')
  560. # Parse a date in a valid, but non-default format, get a parsed result
  561. result = f.clean('1:30 PM 21-12-2010')
  562. self.assertEqual(result, datetime(2010,12,21,13,30))
  563. # Check that the parsed result does a round trip to default format
  564. text = f.widget._format_value(result)
  565. self.assertEqual(text, "01:30:00 PM 21/12/2010")
  566. def test_localized_dateTimeField(self):
  567. "Localized DateTimeFields act as unlocalized widgets"
  568. f = forms.DateTimeField(localize=True)
  569. # Parse a date in an unaccepted format; get an error
  570. self.assertRaises(forms.ValidationError, f.clean, '2010-12-21 13:30:05')
  571. # Parse a date in a valid format, get a parsed result
  572. result = f.clean('1:30:05 PM 21/12/2010')
  573. self.assertEqual(result, datetime(2010,12,21,13,30,5))
  574. # Check that the parsed result does a round trip to the same format
  575. text = f.widget._format_value(result)
  576. self.assertEqual(text, '01:30:05 PM 21/12/2010')
  577. # Parse a date in a valid format, get a parsed result
  578. result = f.clean('1:30 PM 21-12-2010')
  579. self.assertEqual(result, datetime(2010,12,21,13,30))
  580. # Check that the parsed result does a round trip to default format
  581. text = f.widget._format_value(result)
  582. self.assertEqual(text, "01:30:00 PM 21/12/2010")
  583. def test_dateTimeField_with_inputformat(self):
  584. "DateTimeFields with manually specified input formats can accept those formats"
  585. f = forms.DateTimeField(input_formats=["%m.%d.%Y %H:%M:%S", "%m-%d-%Y %H:%M"])
  586. # Parse a date in an unaccepted format; get an error
  587. self.assertRaises(forms.ValidationError, f.clean, '13:30:05 21.12.2010')
  588. self.assertRaises(forms.ValidationError, f.clean, '2010-12-21 13:30:05')
  589. # Parse a date in a valid format, get a parsed result
  590. result = f.clean('12.21.2010 13:30:05')
  591. self.assertEqual(result, datetime(2010,12,21,13,30,5))
  592. # Check that the parsed result does a round trip to the same format
  593. text = f.widget._format_value(result)
  594. self.assertEqual(text, "01:30:05 PM 21/12/2010")
  595. # Parse a date in a valid format, get a parsed result
  596. result = f.clean('12-21-2010 13:30')
  597. self.assertEqual(result, datetime(2010,12,21,13,30))
  598. # Check that the parsed result does a round trip to default format
  599. text = f.widget._format_value(result)
  600. self.assertEqual(text, "01:30:00 PM 21/12/2010")
  601. def test_localized_dateTimeField_with_inputformat(self):
  602. "Localized DateTimeFields with manually specified input formats can accept those formats"
  603. f = forms.DateTimeField(input_formats=["%m.%d.%Y %H:%M:%S", "%m-%d-%Y %H:%M"], localize=True)
  604. # Parse a date in an unaccepted format; get an error
  605. self.assertRaises(forms.ValidationError, f.clean, '13:30:05 21.12.2010')
  606. self.assertRaises(forms.ValidationError, f.clean, '2010-12-21 13:30:05')
  607. # Parse a date in a valid format, get a parsed result
  608. result = f.clean('12.21.2010 13:30:05')
  609. self.assertEqual(result, datetime(2010,12,21,13,30,5))
  610. # # Check that the parsed result does a round trip to the same format
  611. text = f.widget._format_value(result)
  612. self.assertEqual(text, "01:30:05 PM 21/12/2010")
  613. # Parse a date in a valid format, get a parsed result
  614. result = f.clean('12-21-2010 13:30')
  615. self.assertEqual(result, datetime(2010,12,21,13,30))
  616. # Check that the parsed result does a round trip to default format
  617. text = f.widget._format_value(result)
  618. self.assertEqual(text, "01:30:00 PM 21/12/2010")
  619. class SimpleDateTimeFormatTests(TestCase):
  620. def test_dateTimeField(self):
  621. "DateTimeFields can parse dates in the default format"
  622. f = forms.DateTimeField()
  623. # Parse a date in an unaccepted format; get an error
  624. self.assertRaises(forms.ValidationError, f.clean, '13:30:05 21.12.2010')
  625. # Parse a date in a valid format, get a parsed result
  626. result = f.clean('2010-12-21 13:30:05')
  627. self.assertEqual(result, datetime(2010,12,21,13,30,5))
  628. # Check that the parsed result does a round trip to the same format
  629. text = f.widget._format_value(result)
  630. self.assertEqual(text, "2010-12-21 13:30:05")
  631. # Parse a date in a valid, but non-default format, get a parsed result
  632. result = f.clean('12/21/2010 13:30:05')
  633. self.assertEqual(result, datetime(2010,12,21,13,30,5))
  634. # Check that the parsed result does a round trip to default format
  635. text = f.widget._format_value(result)
  636. self.assertEqual(text, "2010-12-21 13:30:05")
  637. def test_localized_dateTimeField(self):
  638. "Localized DateTimeFields in a non-localized environment act as unlocalized widgets"
  639. f = forms.DateTimeField()
  640. # Parse a date in an unaccepted format; get an error
  641. self.assertRaises(forms.ValidationError, f.clean, '13:30:05 21.12.2010')
  642. # Parse a date in a valid format, get a parsed result
  643. result = f.clean('2010-12-21 13:30:05')
  644. self.assertEqual(result, datetime(2010,12,21,13,30,5))
  645. # Check that the parsed result does a round trip to the same format
  646. text = f.widget._format_value(result)
  647. self.assertEqual(text, "2010-12-21 13:30:05")
  648. # Parse a date in a valid format, get a parsed result
  649. result = f.clean('12/21/2010 13:30:05')
  650. self.assertEqual(result, datetime(2010,12,21,13,30,5))
  651. # Check that the parsed result does a round trip to default format
  652. text = f.widget._format_value(result)
  653. self.assertEqual(text, "2010-12-21 13:30:05")
  654. def test_dateTimeField_with_inputformat(self):
  655. "DateTimeFields with manually specified input formats can accept those formats"
  656. f = forms.DateTimeField(input_formats=["%I:%M:%S %p %d.%m.%Y", "%I:%M %p %d-%m-%Y"])
  657. # Parse a date in an unaccepted format; get an error
  658. self.assertRaises(forms.ValidationError, f.clean, '2010-12-21 13:30:05')
  659. # Parse a date in a valid format, get a parsed result
  660. result = f.clean('1:30:05 PM 21.12.2010')
  661. self.assertEqual(result, datetime(2010,12,21,13,30,5))
  662. # Check that the parsed result does a round trip to the same format
  663. text = f.widget._format_value(result)
  664. self.assertEqual(text, "2010-12-21 13:30:05")
  665. # Parse a date in a valid format, get a parsed result
  666. result = f.clean('1:30 PM 21-12-2010')
  667. self.assertEqual(result, datetime(2010,12,21,13,30))
  668. # Check that the parsed result does a round trip to default format
  669. text = f.widget._format_value(result)
  670. self.assertEqual(text, "2010-12-21 13:30:00")
  671. def test_localized_dateTimeField_with_inputformat(self):
  672. "Localized DateTimeFields with manually specified input formats can accept those formats"
  673. f = forms.DateTimeField(input_formats=["%I:%M:%S %p %d.%m.%Y", "%I:%M %p %d-%m-%Y"], localize=True)
  674. # Parse a date in an unaccepted format; get an error
  675. self.assertRaises(forms.ValidationError, f.clean, '2010-12-21 13:30:05')
  676. # Parse a date in a valid format, get a parsed result
  677. result = f.clean('1:30:05 PM 21.12.2010')
  678. self.assertEqual(result, datetime(2010,12,21,13,30,5))
  679. # Check that the parsed result does a round trip to the same format
  680. text = f.widget._format_value(result)
  681. self.assertEqual(text, "2010-12-21 13:30:05")
  682. # Parse a date in a valid format, get a parsed result
  683. result = f.clean('1:30 PM 21-12-2010')
  684. self.assertEqual(result, datetime(2010,12,21,13,30))
  685. # Check that the parsed result does a round trip to default format
  686. text = f.widget._format_value(result)
  687. self.assertEqual(text, "2010-12-21 13:30:00")