date.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576
  1. describe('date', function() {
  2. beforeEach(function() {
  3. $([
  4. '<form class="form-horizontal" id="dateForm">',
  5. '<div id="msg"></div>',
  6. '<div class="form-group">',
  7. '<input type="text" name="date" data-bv-date />',
  8. '</div>',
  9. '<div class="form-group">',
  10. '<input type="text" name="minDate" data-bv-date data-bv-date-min="" />',
  11. '</div>',
  12. '<div class="form-group">',
  13. '<input type="text" name="maxDate" data-bv-date data-bv-date-max="" />',
  14. '</div>',
  15. '<div class="form-group">',
  16. '<input type="text" name="range" data-bv-date data-bv-date-min="" data-bv-date-max="" />',
  17. '</div>',
  18. '</form>'
  19. ].join('\n')).appendTo('body');
  20. $('#dateForm').bootstrapValidator();
  21. this.bv = $('#dateForm').data('bootstrapValidator');
  22. this.$date = this.bv.getFieldElements('date');
  23. this.$minDate = this.bv.getFieldElements('minDate');
  24. this.$maxDate = this.bv.getFieldElements('maxDate');
  25. this.$range = this.bv.getFieldElements('range');
  26. });
  27. afterEach(function() {
  28. $('#dateForm').bootstrapValidator('destroy').remove();
  29. });
  30. it('YYYY/MM/DD', function() {
  31. this.bv.updateOption('date', 'date', 'format', 'YYYY/MM/DD');
  32. this.$date.val('2000/01/30');
  33. this.bv.validate();
  34. expect(this.bv.isValid()).toBeTruthy();
  35. // Invalid year
  36. this.bv.resetForm();
  37. this.$date.val('100/10/20');
  38. this.bv.validate();
  39. expect(this.bv.isValid()).toEqual(false);
  40. // Invalid month
  41. this.bv.resetForm();
  42. this.$date.val('2000/00/10');
  43. this.bv.validate();
  44. expect(this.bv.isValid()).toEqual(false);
  45. this.bv.resetForm();
  46. this.$date.val('2000/15/10');
  47. this.bv.validate();
  48. expect(this.bv.isValid()).toEqual(false);
  49. // Invalid day
  50. this.bv.resetForm();
  51. this.$date.val('2000/03/00');
  52. this.bv.validate();
  53. expect(this.bv.isValid()).toEqual(false);
  54. this.bv.resetForm();
  55. this.$date.val('2000/10/32');
  56. this.bv.validate();
  57. expect(this.bv.isValid()).toEqual(false);
  58. // Negative number
  59. this.bv.resetForm();
  60. this.$date.val('-2000/10/20');
  61. this.bv.validate();
  62. expect(this.bv.isValid()).toEqual(false);
  63. this.bv.resetForm();
  64. this.$date.val('2000/-10/20');
  65. this.bv.validate();
  66. expect(this.bv.isValid()).toEqual(false);
  67. this.bv.resetForm();
  68. this.$date.val('2000/10/-20');
  69. this.bv.validate();
  70. expect(this.bv.isValid()).toEqual(false);
  71. // Consist invalid characters
  72. // Issue #310
  73. this.bv.resetForm();
  74. this.$date.val('aaaa/');
  75. this.bv.validate();
  76. expect(this.bv.isValid()).toEqual(false);
  77. this.bv.resetForm();
  78. this.$date.val('2004df/1dd1/5ffg');
  79. this.bv.validate();
  80. expect(this.bv.isValid()).toEqual(false);
  81. // Issue #475
  82. this.bv.resetForm();
  83. this.$date.val('2014/09');
  84. this.bv.validate();
  85. expect(this.bv.isValid()).toEqual(false);
  86. this.bv.resetForm();
  87. this.$date.val('2014/09/');
  88. this.bv.validate();
  89. expect(this.bv.isValid()).toEqual(false);
  90. this.bv.resetForm();
  91. this.$date.val('2014//15');
  92. this.bv.validate();
  93. expect(this.bv.isValid()).toEqual(false);
  94. this.bv.resetForm();
  95. this.$date.val('/09/15');
  96. this.bv.validate();
  97. expect(this.bv.isValid()).toEqual(false);
  98. });
  99. it('MM/DD/YYYY', function() {
  100. this.bv.updateOption('date', 'date', 'format', 'MM/DD/YYYY');
  101. this.$date.val('09/15/2020');
  102. this.bv.validate();
  103. expect(this.bv.isValid()).toBeTruthy();
  104. this.bv.resetForm();
  105. this.$date.val('09/15');
  106. this.bv.validate();
  107. expect(this.bv.isValid()).toEqual(false);
  108. this.bv.resetForm();
  109. this.$date.val('09/15/');
  110. this.bv.validate();
  111. expect(this.bv.isValid()).toEqual(false);
  112. });
  113. it('number of days in February', function() {
  114. this.bv.updateOption('date', 'date', 'format', 'YYYY/MM/DD');
  115. this.$date.val('2000/02/28');
  116. this.bv.validate();
  117. expect(this.bv.isValid()).toBeTruthy();
  118. this.bv.resetForm();
  119. this.$date.val('2000/02/29');
  120. this.bv.validate();
  121. expect(this.bv.isValid()).toBeTruthy();
  122. this.bv.resetForm();
  123. this.$date.val('2001/02/29');
  124. this.bv.validate();
  125. expect(this.bv.isValid()).toEqual(false);
  126. });
  127. // Issue #681
  128. it('date, month, year are prefixed by zero', function() {
  129. this.bv.updateOption('date', 'date', 'format', 'MM/DD/YYYY');
  130. this.$date.val('0012/08/2014');
  131. this.bv.validate();
  132. expect(this.bv.isValid()).toEqual(false);
  133. this.bv.resetForm();
  134. this.$date.val('12/0008/2014');
  135. this.bv.validate();
  136. expect(this.bv.isValid()).toEqual(false);
  137. this.bv.resetForm();
  138. this.$date.val('12/08/002014');
  139. this.bv.validate();
  140. expect(this.bv.isValid()).toEqual(false);
  141. this.bv.resetForm();
  142. this.$date.val('12/08/2014');
  143. this.bv.validate();
  144. expect(this.bv.isValid()).toBeTruthy();
  145. });
  146. it('hours, minutes, seconds are prefixed by zero', function() {
  147. this.bv.updateOption('date', 'date', 'format', 'YYYY/MM/DD h:m:s');
  148. this.$date.val('2014/08/17 0007:30:00');
  149. this.bv.validate();
  150. expect(this.bv.isValid()).toEqual(false);
  151. this.bv.resetForm();
  152. this.$date.val('2014/08/17 07:030:00');
  153. this.bv.validate();
  154. expect(this.bv.isValid()).toEqual(false);
  155. this.bv.resetForm();
  156. this.$date.val('2014/08/17 07:30:0000');
  157. this.bv.validate();
  158. expect(this.bv.isValid()).toEqual(false);
  159. this.bv.resetForm();
  160. this.$date.val('2014/08/17 07:30:00');
  161. this.bv.validate();
  162. expect(this.bv.isValid()).toBeTruthy();
  163. });
  164. // min test suite
  165. it('min date format YYYY/MM/DD', function() {
  166. this.bv.updateOption('minDate', 'date', 'format', 'YYYY/MM/DD');
  167. this.bv.updateOption('minDate', 'date', 'min', '2010/01/01');
  168. this.$minDate.val('2010/01/02');
  169. this.bv.validate();
  170. expect(this.bv.isValidField('minDate')).toBeTruthy();
  171. this.bv.resetForm();
  172. this.$minDate.val('2010/01/002'); // day prefexid by 0 not allowed
  173. this.bv.validate();
  174. expect(this.bv.isValidField('minDate')).toEqual(false);
  175. this.bv.resetForm();
  176. this.$minDate.val('2014/08/17');
  177. this.bv.validate();
  178. expect(this.bv.isValidField('minDate')).toBeTruthy();
  179. this.bv.resetForm();
  180. this.$minDate.val('2009/12/31');
  181. this.bv.validate();
  182. expect(this.bv.isValidField('minDate')).toEqual(false);
  183. this.bv.resetForm();
  184. this.$minDate.val('2000/01/01');
  185. this.bv.validate();
  186. expect(this.bv.isValidField('minDate')).toEqual(false);
  187. });
  188. it('min date format YYYY-MM-DD', function() {
  189. this.bv.updateOption('minDate', 'date', 'format', 'YYYY-MM-DD');
  190. this.bv.updateOption('minDate', 'date', 'min', '2010-01-01');
  191. this.$minDate.val('2010-01-02');
  192. this.bv.validate();
  193. expect(this.bv.isValidField('minDate')).toBeTruthy();
  194. this.bv.resetForm();
  195. this.$minDate.val('2010-001-02'); // month prefexid by 0 not allowed
  196. this.bv.validate();
  197. expect(this.bv.isValidField('minDate')).toEqual(false);
  198. this.bv.resetForm();
  199. this.$minDate.val('2014-08-17');
  200. this.bv.validate();
  201. expect(this.bv.isValidField('minDate')).toBeTruthy();
  202. this.bv.resetForm();
  203. this.$minDate.val('2009-12-31');
  204. this.bv.validate();
  205. expect(this.bv.isValidField('minDate')).toEqual(false);
  206. this.bv.resetForm();
  207. this.$minDate.val('2000-01-01');
  208. this.bv.validate();
  209. expect(this.bv.isValidField('minDate')).toEqual(false);
  210. });
  211. it('min date format DD/MM/YYYY', function() {
  212. this.bv.updateOption('minDate', 'date', 'format', 'DD/MM/YYYY');
  213. this.bv.updateOption('minDate', 'date', 'min', '01/01/2010');
  214. this.$minDate.val('02/01/2010');
  215. this.bv.validate();
  216. expect(this.bv.isValidField('minDate')).toBeTruthy();
  217. this.bv.resetForm();
  218. this.$minDate.val('17/08/2014');
  219. this.bv.validate();
  220. expect(this.bv.isValidField('minDate')).toBeTruthy();
  221. this.bv.resetForm();
  222. this.$minDate.val('02/01/02010'); // year prefixed by 0 not allowed
  223. this.bv.validate();
  224. expect(this.bv.isValidField('minDate')).toEqual(false);
  225. this.bv.resetForm();
  226. this.$minDate.val('31/12/2009');
  227. this.bv.validate();
  228. expect(this.bv.isValidField('minDate')).toEqual(false);
  229. this.bv.resetForm();
  230. this.$minDate.val('01/01/2000');
  231. this.bv.validate();
  232. expect(this.bv.isValidField('minDate')).toEqual(false);
  233. });
  234. it('min date format YYYY-MM-DD h:m:s', function() {
  235. this.bv.updateOption('minDate', 'date', 'format', 'YYYY-MM-DD h:m:s');
  236. this.bv.updateOption('minDate', 'date', 'min', '2010-01-01 01:00:00');
  237. this.bv.resetForm();
  238. this.$minDate.val('2010-01-01 01:00:01');
  239. this.bv.validate();
  240. expect(this.bv.isValidField('minDate')).toBeTruthy();
  241. this.$minDate.val('2010-01-02 01:00:01');
  242. this.bv.validate();
  243. expect(this.bv.isValidField('minDate')).toBeTruthy();
  244. this.bv.resetForm();
  245. this.$minDate.val('2014-08-17 12:00:00');
  246. this.bv.validate();
  247. expect(this.bv.isValidField('minDate')).toBeTruthy();
  248. this.bv.resetForm();
  249. this.$minDate.val('2009-12-31 00:00:00');
  250. this.bv.validate();
  251. expect(this.bv.isValidField('minDate')).toEqual(false);
  252. this.bv.resetForm();
  253. this.$minDate.val('2009-12-31 010:00:00'); // hours prefixed by 0 not allowed
  254. this.bv.validate();
  255. expect(this.bv.isValidField('minDate')).toEqual(false);
  256. this.bv.resetForm();
  257. this.$minDate.val('2009-12-31 10:001:00'); // minutes prefixed by 0 not allowed
  258. this.bv.validate();
  259. expect(this.bv.isValidField('minDate')).toEqual(false);
  260. this.bv.resetForm();
  261. this.$minDate.val('2009-12-31 10:01:012'); // seconds prefixed by 0 not allowed
  262. this.bv.validate();
  263. expect(this.bv.isValidField('minDate')).toEqual(false);
  264. this.bv.resetForm();
  265. this.$minDate.val('2009-12-31 00:00:00');
  266. this.bv.validate();
  267. expect(this.bv.isValidField('minDate')).toEqual(false);
  268. this.bv.resetForm();
  269. this.$minDate.val('2000-01-01 23:00:12');
  270. this.bv.validate();
  271. expect(this.bv.isValidField('minDate')).toEqual(false);
  272. });
  273. // max test suite
  274. it('max date format YYYY/MM/DD', function() {
  275. this.bv.updateOption('maxDate', 'date', 'format', 'YYYY/MM/DD');
  276. this.bv.updateOption('maxDate', 'date', 'max', '2014/09/10');
  277. this.$maxDate.val('2014/09/09');
  278. this.bv.validate();
  279. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  280. this.bv.resetForm();
  281. this.$maxDate.val('2014/08/17');
  282. this.bv.validate();
  283. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  284. this.bv.resetForm();
  285. this.$maxDate.val('02014/012/031'); // year, month or day prefixed by 0 not allowed
  286. this.bv.validate();
  287. expect(this.bv.isValidField('maxDate')).toEqual(false);
  288. this.bv.resetForm();
  289. this.$maxDate.val('2014/12/31');
  290. this.bv.validate();
  291. expect(this.bv.isValidField('maxDate')).toEqual(false);
  292. this.bv.resetForm();
  293. this.$maxDate.val('2015/01/01');
  294. this.bv.validate();
  295. expect(this.bv.isValidField('maxDate')).toEqual(false);
  296. });
  297. it('max date format YYYY-MM-DD', function() {
  298. this.bv.updateOption('maxDate', 'date', 'format', 'YYYY-MM-DD');
  299. this.bv.updateOption('maxDate', 'date', 'max', '2014-09-10');
  300. this.$maxDate.val('2014-09-09');
  301. this.bv.validate();
  302. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  303. this.bv.resetForm();
  304. this.$maxDate.val('2014-08-17');
  305. this.bv.validate();
  306. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  307. this.bv.resetForm();
  308. this.$maxDate.val('02014-012-031'); // year, month or day prefixed by 0 not allowed
  309. this.bv.validate();
  310. expect(this.bv.isValidField('maxDate')).toEqual(false);
  311. this.bv.resetForm();
  312. this.$maxDate.val('2014-12-31');
  313. this.bv.validate();
  314. expect(this.bv.isValidField('maxDate')).toEqual(false);
  315. this.bv.resetForm();
  316. this.$maxDate.val('2015-01-01');
  317. this.bv.validate();
  318. expect(this.bv.isValidField('maxDate')).toEqual(false);
  319. });
  320. it('max date format DD/MM/YYYY', function() {
  321. this.bv.updateOption('maxDate', 'date', 'format', 'DD/MM/YYYY');
  322. this.bv.updateOption('maxDate', 'date', 'max', '10/09/2014');
  323. this.$maxDate.val('09/09/2014');
  324. this.bv.validate();
  325. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  326. this.bv.resetForm();
  327. this.$maxDate.val('17/08/2014');
  328. this.bv.validate();
  329. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  330. this.bv.resetForm();
  331. this.$maxDate.val('031/012/02014'); // year, month or day prefixed by 0 not allowed
  332. this.bv.validate();
  333. expect(this.bv.isValidField('maxDate')).toEqual(false);
  334. this.bv.resetForm();
  335. this.$maxDate.val('31/12/2014');
  336. this.bv.validate();
  337. expect(this.bv.isValidField('maxDate')).toEqual(false);
  338. this.bv.resetForm();
  339. this.$maxDate.val('01/01/2015');
  340. this.bv.validate();
  341. expect(this.bv.isValidField('maxDate')).toEqual(false);
  342. });
  343. it('max date format YYYY-MM-DD h:m:s', function() {
  344. this.bv.updateOption('maxDate', 'date', 'format', 'YYYY-MM-DD h:m:s');
  345. this.bv.updateOption('maxDate', 'date', 'max', '2014-09-10 01:00:00');
  346. this.$maxDate.val('2014-09-09 01:00:01');
  347. this.bv.validate();
  348. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  349. this.bv.resetForm();
  350. this.$maxDate.val('2014-08-17 12:00:00');
  351. this.bv.validate();
  352. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  353. this.bv.resetForm();
  354. this.$maxDate.val('2014-09-09 001:001:001'); // hours, minutes or seconds prefixed by 0 not allowed
  355. this.bv.validate();
  356. expect(this.bv.isValidField('maxDate')).toEqual(false);
  357. this.bv.resetForm();
  358. this.$maxDate.val('2014-12-31 00:00:00');
  359. this.bv.validate();
  360. expect(this.bv.isValidField('maxDate')).toEqual(false);
  361. this.bv.resetForm();
  362. this.$maxDate.val('2015-01-01 23:00:12');
  363. this.bv.validate();
  364. expect(this.bv.isValidField('maxDate')).toEqual(false);
  365. });
  366. // range test suite
  367. it('range format YYYY/MM/DD', function() {
  368. this.bv.updateOption('range', 'date', 'format', 'YYYY/MM/DD');
  369. this.bv.updateOption('range', 'date', 'min', '2010/09/10');
  370. this.bv.updateOption('range', 'date', 'max', '2014/09/10');
  371. this.$range.val('2011/01/01');
  372. this.bv.validate();
  373. expect(this.bv.isValidField('range')).toBeTruthy();
  374. this.bv.resetForm();
  375. this.$range.val('2014/09/09');
  376. this.bv.validate();
  377. expect(this.bv.isValidField('range')).toBeTruthy();
  378. this.bv.resetForm();
  379. this.$range.val('02014/001/031'); // year, month or day prefixed by 0 not allowed
  380. this.bv.validate();
  381. expect(this.bv.isValidField('range')).toEqual(false);
  382. this.bv.resetForm();
  383. this.$range.val('2010/09/09');
  384. this.bv.validate();
  385. expect(this.bv.isValidField('range')).toEqual(false);
  386. this.bv.resetForm();
  387. this.$range.val('2014/09/11');
  388. this.bv.validate();
  389. expect(this.bv.isValidField('range')).toEqual(false);
  390. });
  391. it('range format YYYY-MM-DD', function() {
  392. this.bv.updateOption('range', 'date', 'format', 'YYYY-MM-DD');
  393. this.bv.updateOption('range', 'date', 'min', '2010-09-10');
  394. this.bv.updateOption('range', 'date', 'max', '2014-09-10');
  395. this.$range.val('2012-01-12');
  396. this.bv.validate();
  397. expect(this.bv.isValidField('range')).toBeTruthy();
  398. this.bv.resetForm();
  399. this.$range.val('2014-09-09');
  400. this.bv.validate();
  401. expect(this.bv.isValidField('range')).toBeTruthy();
  402. this.bv.resetForm();
  403. this.$range.val('02014-003-031'); // year, month or day prefixed by 0 not allowed
  404. this.bv.validate();
  405. expect(this.bv.isValidField('range')).toEqual(false);
  406. this.bv.resetForm();
  407. this.$range.val('2009-12-31');
  408. this.bv.validate();
  409. expect(this.bv.isValidField('range')).toEqual(false);
  410. this.bv.resetForm();
  411. this.$range.val('2015-01-01');
  412. this.bv.validate();
  413. expect(this.bv.isValidField('range')).toEqual(false);
  414. });
  415. it('range format DD/MM/YYYY', function() {
  416. this.bv.updateOption('range', 'date', 'format', 'DD/MM/YYYY');
  417. this.bv.updateOption('range', 'date', 'min', '10/09/2010');
  418. this.bv.updateOption('range', 'date', 'max', '10/09/2014');
  419. this.$range.val('11/11/2011');
  420. this.bv.validate();
  421. expect(this.bv.isValidField('range')).toBeTruthy();
  422. this.bv.resetForm();
  423. this.$range.val('17/08/2014');
  424. this.bv.validate();
  425. expect(this.bv.isValidField('range')).toBeTruthy();
  426. this.bv.resetForm();
  427. this.$range.val('031/012/02013'); // year, month or day prefixed by 0 not allowed
  428. this.bv.validate();
  429. expect(this.bv.isValidField('range')).toEqual(false);
  430. this.bv.resetForm();
  431. this.$range.val('31/01/2010');
  432. this.bv.validate();
  433. expect(this.bv.isValidField('range')).toEqual(false);
  434. this.bv.resetForm();
  435. this.$range.val('25/03/2015');
  436. this.bv.validate();
  437. expect(this.bv.isValidField('range')).toEqual(false);
  438. });
  439. it('range format YYYY-MM-DD h:m:s', function() {
  440. this.bv.updateOption('range', 'date', 'format', 'YYYY-MM-DD h:m:s');
  441. this.bv.updateOption('range', 'date', 'min', '2010-05-15 22:00:00');
  442. this.bv.updateOption('range', 'date', 'max', '2015-05-15 22:00:00');
  443. this.$range.val('2012-07-17 01:00:01');
  444. this.bv.validate();
  445. expect(this.bv.isValidField('range')).toBeTruthy();
  446. this.bv.resetForm();
  447. this.$range.val('2013-08-17 12:00:00');
  448. this.bv.validate();
  449. expect(this.bv.isValidField('range')).toBeTruthy();
  450. this.bv.resetForm();
  451. this.$range.val('2011-06-19 001:001:001'); // hours, minutes or seconds prefixed by 0 not allowed
  452. this.bv.validate();
  453. expect(this.bv.isValidField('range')).toEqual(false);
  454. this.bv.resetForm();
  455. this.$range.val('2008-11-27 23:15:00');
  456. this.bv.validate();
  457. expect(this.bv.isValidField('range')).toEqual(false);
  458. this.bv.resetForm();
  459. this.$range.val('2015-05-15 22:00:01');
  460. this.bv.validate();
  461. expect(this.bv.isValidField('range')).toEqual(false);
  462. });
  463. });