|
| 1 | +var painless = require('painless'); |
| 2 | +var fecha = require('./fecha'); |
| 3 | +var test = painless.test; |
| 4 | +var assert = painless.assert; |
| 5 | +var today = new Date(); |
| 6 | +var year = today.getFullYear(); |
| 7 | + |
| 8 | +function testParse(name, str, format, date) { |
| 9 | + test(name, function() { |
| 10 | + assert.equal(+fecha.parse(str, format), +date); |
| 11 | + }); |
| 12 | +} |
| 13 | + |
| 14 | +function testFormat(name, dateObj, format, expected) { |
| 15 | + test(name, function () { |
| 16 | + assert.equal(fecha.format(dateObj, format), expected); |
| 17 | + }); |
| 18 | +} |
| 19 | + |
| 20 | +testParse('basic date parse', '2012/05/03', 'YYYY/MM/DD', new Date(2012, 4, 3)); |
| 21 | +testParse('basic date parse with time', '2012/05/03 05:01:40', 'YYYY/MM/DD HH:mm:ss', new Date(2012, 4, 3, 5, 1, 40)); |
| 22 | +testParse('date with different slashes', '2012-05-03 05:01:40', 'YYYY-MM-DD HH:mm:ss', new Date(2012, 4, 3, 5, 1, 40)); |
| 23 | +testParse('date with different order', '11-7-97', 'D-M-YY', new Date(1997, 6, 11)); |
| 24 | +testParse('date very short', '2-8-04', 'D-M-YY', new Date(2004, 7, 2)); |
| 25 | +testParse('compact', '11081997', 'MMDDYYYY', new Date(1997, 10, 8)); |
| 26 | +testParse('month names', 'March 3rd, 1999', 'MMMM Do, YYYY', new Date(1999, 2, 3)); |
| 27 | +testParse('month names short', 'Jun 12, 2003', 'MMM D, YYYY', new Date(2003, 5, 12)); |
| 28 | +testParse('day name', 'Wednesday Feb 03, 2100', 'dddd MMM DD, YYYY', new Date(2100, 1, 3)); |
| 29 | +testParse('ampm 10PM', '2015-11-07 10PM', 'YYYY-MM-DD hhA', new Date(2015, 10, 7, 22)); |
| 30 | +testParse('ampm 9AM', '2015-11-07 9AM', 'YYYY-MM-DD hhA', new Date(2015, 10, 7, 9)); |
| 31 | +testParse('ampm 12am', '2000-01-01 12AM', 'YYYY-MM-DD hhA', new Date(2000, 0, 1, 0)); |
| 32 | +testParse('ampm 3am', '2000-01-01 12AM', 'YYYY-MM-DD hhA', new Date(2000, 0, 1, 0)); |
| 33 | +testParse('ampm am lowercase', '2000-01-01 11am', 'YYYY-MM-DD hha', new Date(2000, 0, 1, 11)); |
| 34 | +testParse('noon pm lowercase', '2000-01-01 12pm', 'YYYY-MM-DD hha', new Date(2000, 0, 1, 12)); |
| 35 | +testParse('24 hour time long', '2000-01-01 20', 'YYYY-MM-DD HH', new Date(2000, 0, 1, 20)); |
| 36 | +testParse('24 hour time long 02', '2000-01-01 02', 'YYYY-MM-DD HH', new Date(2000, 0, 1, 2)); |
| 37 | +testParse('24 hour time short', '2000-01-01 3', 'YYYY-MM-DD H', new Date(2000, 0, 1, 3)); |
| 38 | +testParse('milliseconds time', '10:20:30.123', 'HH:mm:ss.SSS', new Date(year, 0, 1, 10, 20, 30, 123)); |
| 39 | +testParse('milliseconds medium', '10:20:30.12', 'HH:mm:ss.SS', new Date(year, 0, 1, 10, 20, 30, 120)); |
| 40 | +testParse('milliseconds short', '10:20:30.1', 'HH:mm:ss.S', new Date(year, 0, 1, 10, 20, 30, 100)); |
| 41 | +testParse('timezone offset', '09:20:31 GMT-0500 (EST)', 'HH:mm:ss ZZ', new Date(Date.UTC(year, 0, 1, 14, 20, 31))); |
| 42 | +testParse('UTC timezone offset', '09:20:31 GMT-0000 (UTC)', 'HH:mm:ss ZZ', new Date(Date.UTC(year, 0, 1, 9,20, 31))); |
| 43 | +testParse('invalid date', 'hello', 'HH:mm:ss ZZ', false); |
| 44 | +test('invalid date no format', function () { |
| 45 | + assert.throws(function () { |
| 46 | + fecha.parse('hello'); |
| 47 | + }); |
| 48 | +}); |
| 49 | +test('no format specified', function () { |
| 50 | + assert.throws(function () { |
| 51 | + fecha.parse('2014-11-05', false); |
| 52 | + }); |
| 53 | +}); |
| 54 | +test('long input false', function () { |
| 55 | + var input = ''; |
| 56 | + for (var i = 0; i < 1002; i++) { |
| 57 | + input += '1'; |
| 58 | + } |
| 59 | + assert.isFalse(fecha.parse(input, 'HH')); |
| 60 | +}); |
| 61 | + |
| 62 | +// Day of the month |
| 63 | +testFormat('Day of the month', new Date(2014, 2, 5), 'D', '5'); |
| 64 | +testFormat('Day of the month padded', new Date(2014, 2, 5), 'DD', '05'); |
| 65 | + |
| 66 | +// Day of the week |
| 67 | +testFormat('Day of the week short', new Date(2015, 0, 8), 'd', '4'); |
| 68 | +testFormat('Day of the week long', new Date(2015, 0, 10), 'dd', '06'); |
| 69 | +testFormat('Day of the week short name', new Date(2014, 2, 5), 'ddd', 'Wed'); |
| 70 | +testFormat('Day of the week long name', new Date(2014, 2, 5), 'dddd', 'Wednesday'); |
| 71 | + |
| 72 | +// Month |
| 73 | +testFormat('Month', new Date(2014, 2, 5), 'M', '3'); |
| 74 | +testFormat('Month padded', new Date(2014, 2, 5), 'MM', '03'); |
| 75 | +testFormat('Month short name', new Date(2014, 2, 5), 'MMM', 'Mar'); |
| 76 | +testFormat('Month full name mmmm', new Date(2014, 2, 5), 'MMMM', 'March'); |
| 77 | + |
| 78 | +// Year |
| 79 | +testFormat('Year short', new Date(2001, 2, 5), 'YY', '01'); |
| 80 | +testFormat('Year long', new Date(2001, 2, 5), 'YYYY', '2001'); |
| 81 | + |
| 82 | +// Hour |
| 83 | +testFormat('Hour 12 hour short', new Date(2001, 2, 5, 6), 'h', '6'); |
| 84 | +testFormat('Hour 12 hour padded', new Date(2001, 2, 5, 6), 'hh', '06'); |
| 85 | +testFormat('Hour 12 hour short 2', new Date(2001, 2, 5, 14), 'h', '2'); |
| 86 | +testFormat('Hour 12 hour padded 2', new Date(2001, 2, 5, 14), 'hh', '02'); |
| 87 | +testFormat('Hour 24 hour short', new Date(2001, 2, 5, 13), 'H', '13'); |
| 88 | +testFormat('Hour 24 hour padded', new Date(2001, 2, 5, 13), 'HH', '13'); |
| 89 | +testFormat('Hour 24 hour short', new Date(2001, 2, 5, 3), 'H', '3'); |
| 90 | +testFormat('Hour 24 hour padded', new Date(2001, 2, 5, 3), 'HH', '03'); |
| 91 | + |
| 92 | +// Minute |
| 93 | +testFormat('Minutes short', new Date(2001, 2, 5, 6, 7), 'm', '7'); |
| 94 | +testFormat('Minutes padded', new Date(2001, 2, 5, 6, 7), 'mm', '07'); |
| 95 | + |
| 96 | +// Seconds |
| 97 | +testFormat('Seconds short', new Date(2001, 2, 5, 6, 7, 2), 's', '2'); |
| 98 | +testFormat('Seconds padded', new Date(2001, 2, 5, 6, 7, 2), 'ss', '02'); |
| 99 | + |
| 100 | +// Milliseconds |
| 101 | +testFormat('milliseconds short', new Date(2001, 2, 5, 6, 7, 2, 500), 'S', '5'); |
| 102 | +testFormat('milliseconds short 2', new Date(2001, 2, 5, 6, 7, 2, 2), 'S', '0'); |
| 103 | +testFormat('milliseconds medium', new Date(2001, 2, 5, 6, 7, 2, 300), 'SS', '30'); |
| 104 | +testFormat('milliseconds medium 2', new Date(2001, 2, 5, 6, 7, 2, 10), 'SS', '01'); |
| 105 | +testFormat('milliseconds long', new Date(2001, 2, 5, 6, 7, 2, 5), 'SSS', '005'); |
| 106 | + |
| 107 | +// AM PM |
| 108 | +testFormat('ampm am', new Date(2001, 2, 5, 3, 7, 2, 5), 'a', 'am'); |
| 109 | +testFormat('ampm pm', new Date(2001, 2, 5, 15, 7, 2, 5), 'a', 'pm'); |
| 110 | +testFormat('ampm AM', new Date(2001, 2, 5, 3, 7, 2, 5), 'A', 'AM'); |
| 111 | +testFormat('ampm PM', new Date(2001, 2, 5, 16, 7, 2, 5), 'A', 'PM'); |
| 112 | + |
| 113 | +// th, st, nd, rd |
| 114 | +testFormat('th', new Date(2001, 2, 11), 'Do', '11th'); |
| 115 | +testFormat('st', new Date(2001, 2, 21), 'Do', '21st'); |
| 116 | +testFormat('nd', new Date(2001, 2, 2), 'Do', '2nd'); |
| 117 | +testFormat('rd', new Date(2001, 2, 23), 'Do', '23rd'); |
| 118 | + |
| 119 | +// Timezone offset |
| 120 | +test('timezone offset', function () { |
| 121 | + assert(fecha.format(new Date(2001, 2, 11), 'ZZ').match(/^[\+\-]\d{4}$/)); |
| 122 | +}); |
| 123 | + |
| 124 | +// Random groupings |
| 125 | +testFormat('MM-DD-YYYY HH:mm:ss', new Date(2001, 2, 5, 6, 7, 2, 5), 'MM-DD-YYYY HH:mm:ss', |
| 126 | + '03-05-2001 06:07:02'); |
| 127 | +testFormat('MMMM D, YY', new Date(1987, 0, 8, 6, 7, 2, 5), 'MMMM D, YY', 'January 8, 87'); |
| 128 | +testFormat('M MMMM MM YYYY, YY', new Date(1987, 0, 8, 6, 7, 2, 5), 'M MMMM MM YYYY, YY', |
| 129 | + '1 January 01 1987, 87'); |
| 130 | +testFormat('YYYY/MM/DD HH:mm:ss', new Date(2031, 10, 29, 2, 1, 9, 5), 'YYYY/MM/DD HH:mm:ss', |
| 131 | + '2031/11/29 02:01:09'); |
| 132 | +testFormat('D-M-YYYY', new Date(2043, 8, 18, 2, 1, 9, 5), 'D-M-YYYY', '18-9-2043'); |
| 133 | +testFormat('current date', new Date(), 'YYYY', '' + (new Date()).getFullYear()); |
| 134 | +testFormat('mask', new Date(1999, 0, 2), 'mediumDate', 'Jan 2, 1999'); |
| 135 | + |
| 136 | +test('Invalid date', function () { |
| 137 | + assert.throws(function () { |
| 138 | + fecha.format('hello', 'YYYY'); |
| 139 | + }); |
| 140 | +}); |
| 141 | +test('string date', function () { |
| 142 | + assert.throws(function () { |
| 143 | + fecha.format('2011-10-01', 'MM-DD-YYYY') |
| 144 | + }) |
| 145 | +}); |
| 146 | + |
0 commit comments