File indexing completed on 2024-04-28 15:28:37

0001 debug("Start Of Test");
0002 
0003 shouldThrow("Date.prototype.valueOf()");
0004 
0005 var d = new Date(1017492323515); // Sat Mar 30 13:45:23 GMT+0100 (CET) 2002
0006 // shouldBe("d.getUTCHours()", "12");
0007 // shouldBe("d.getHours()", "12");
0008 shouldBe("d.getMinutes()", "45");
0009 shouldBe("d.getUTCMinutes()", "45");
0010 shouldBe("d.getDay()", "6");
0011 shouldBe("d.getMonth()", "2");
0012 shouldBe("d.getFullYear()", "2002");
0013 
0014 // string/number conversions
0015 shouldBe("Number(d)", "1017492323515");
0016 shouldBe("Boolean(d)", "true");
0017 shouldBe("(new Date(100)).valueOf()", "100");
0018 shouldBe("(new Date(true)).valueOf()", "1");
0019 shouldBe("(new Date(false)).valueOf()", "0");
0020 shouldBe("typeof (new Date()).toString()", "'string'");
0021 shouldBe("typeof ('' + new Date())", "'string'");
0022 shouldBe("typeof (new Date() + new Date())", "'string'");
0023 shouldBeTrue("isNaN(Number(new Date('foo')))");
0024 shouldBe("new Date(10001) - new Date(10000)", "1");
0025 shouldBe("'' - new Date(10000)", "-10000");
0026 shouldBe("2 * new Date(10000)", "20000");
0027 shouldBe("var d = new Date(); d == String(d)", "true");
0028 
0029 var d0 = new Date(2004, 0, 1, 0, 0, 0, 0);
0030 shouldBe("d0.getHours()","0");
0031 
0032 var d1 = new Date(Date.UTC(2004, 0, 1, 0, 0, 0, 0));
0033 shouldBe("d1.getUTCHours()","0");
0034 d1.setUTCHours(1999,6,9);
0035 d1.setUTCHours(11,22,33);
0036 shouldBe("d1.getUTCHours()","11");
0037 
0038 var d2 = new Date();
0039 d2.setMilliseconds(11);
0040 shouldBe("d2.getMilliseconds()", "11");
0041 d2.setSeconds(11, 22);
0042 shouldBe("d2.getSeconds()", "11");
0043 shouldBe("d2.getMilliseconds()", "22");
0044 d2.setMinutes(11, 22, 33);
0045 shouldBe("d2.getMinutes()", "11");
0046 shouldBe("d2.getSeconds()", "22");
0047 shouldBe("d2.getMilliseconds()", "33");
0048 d2.setHours(11, 22, 33, 44);
0049 shouldBe("d2.getHours()", "11");
0050 shouldBe("d2.getMinutes()", "22");
0051 shouldBe("d2.getSeconds()", "33");
0052 shouldBe("d2.getMilliseconds()", "44");
0053 d2.setMonth(3, 20);
0054 shouldBe("d2.getMonth()", "3");
0055 shouldBe("d2.getDate()", "20");
0056 d2.setFullYear(1976, 3, 20);
0057 shouldBe("d2.getFullYear()", "1976");
0058 shouldBe("d2.getMonth()", "3");
0059 shouldBe("d2.getDate()", "20");
0060 d2.setFullYear(1970, 0, 1); // Unix epoch
0061 shouldBe("d2.getFullYear()", "1970");
0062 shouldBe("d2.getMonth()", "0");
0063 shouldBe("d2.getDate()", "1");
0064 
0065 // ### fix: shouldBe("d2.setYear(-1), d2.getFullYear()", "-1");
0066 shouldBe("d2.setYear(0), d2.getFullYear()", "1900");
0067 shouldBe("d2.setYear(1), d2.getFullYear()", "1901");
0068 shouldBe("d2.setYear(99), d2.getFullYear()", "1999");
0069 shouldBe("d2.setYear(100), d2.getFullYear()", "100");
0070 shouldBe("d2.setYear(2050), d2.getFullYear()", "2050");
0071 shouldBe("d2.setYear(1899), d2.getFullYear()", "1899");
0072 shouldBe("d2.setYear(2000), d2.getFullYear()", "2000");
0073 shouldBe("d2.setYear(2100), d2.getFullYear()", "2100");
0074 
0075 // date parsing
0076 // from kdelibs/kdecore/tests/krfcdatetest.cpp
0077   var dateRef = new Date('Thu Nov 5 1994 18:15:30 GMT+0500');
0078   //  debug(dateRef);
0079   shouldBe( "dateRef.getDay()", "6"); // It was in fact a Saturday
0080   shouldBe( "dateRef.getDate()", "5");
0081   shouldBe( "dateRef.getMonth()", "10");
0082   shouldBe( "dateRef.getYear()", "94"); // like NS, and unlike IE, by default
0083   shouldBe( "dateRef.getFullYear()", "1994");
0084   shouldBe( "dateRef.getMinutes()", "15");
0085   shouldBe( "dateRef.getSeconds()", "30");
0086   shouldBe( "dateRef.getUTCDay()", "6"); // It was in fact a Saturday
0087   shouldBe( "dateRef.getUTCDate()", "5");
0088   shouldBe( "dateRef.getUTCMonth()", "10");
0089   shouldBe( "dateRef.getUTCFullYear()", "1994");
0090   shouldBe( "dateRef.getUTCHours()", "13");
0091   shouldBe( "dateRef.getUTCMinutes()", "15");
0092   shouldBe( "dateRef.getUTCSeconds()", "30");
0093 
0094   d = new Date('Thu Nov 5 1994 18:15:30 GMT+05:00');
0095   shouldBe( "d.toUTCString()", "dateRef.toUTCString()");
0096   shouldBe( "d.toUTCString().replace('GMT', '+0000')", "'Sat, 05 Nov 1994 13:15:30 +0000'"); // It was in fact a Saturday
0097 
0098   dateRef = new Date('Thu Nov 5 2065 18:15:30 GMT+0500');
0099   //  debug(dateRef);
0100   shouldBe( "dateRef.getDay()", "4");
0101   shouldBe( "dateRef.getDate()", "5");
0102   shouldBe( "dateRef.getMonth()", "10");
0103 //  shouldBe( "dateRef.getYear()", "65"); // Should this be 65 or 165 ??
0104   shouldBe( "dateRef.getFullYear()", "2065");
0105   shouldBe( "dateRef.getMinutes()", "15");
0106   shouldBe( "dateRef.getSeconds()", "30");
0107   shouldBe( "dateRef.getUTCDay()", "4");
0108   shouldBe( "dateRef.getUTCDate()", "5");
0109   shouldBe( "dateRef.getUTCMonth()", "10");
0110   shouldBe( "dateRef.getUTCFullYear()", "2065");
0111   shouldBe( "dateRef.getUTCHours()", "13");
0112   shouldBe( "dateRef.getUTCMinutes()", "15");
0113   shouldBe( "dateRef.getUTCSeconds()", "30");
0114 
0115   dateRef = new Date('Wed Nov 5 2064 18:15:30 GMT+0500'); // Leap year
0116   //  debug(dateRef);
0117   shouldBe( "dateRef.getDay()", "3");
0118   shouldBe( "dateRef.getDate()", "5");
0119   shouldBe( "dateRef.getMonth()", "10");
0120 //  shouldBe( "dateRef.getYear()", "64"); // Should this be 64 or 164 ??
0121   shouldBe( "dateRef.getFullYear()", "2064");
0122   shouldBe( "dateRef.getMinutes()", "15");
0123   shouldBe( "dateRef.getSeconds()", "30");
0124   shouldBe( "dateRef.getUTCDay()", "3");
0125   shouldBe( "dateRef.getUTCDate()", "5");
0126   shouldBe( "dateRef.getUTCMonth()", "10");
0127   shouldBe( "dateRef.getUTCFullYear()", "2064");
0128   shouldBe( "dateRef.getUTCHours()", "13");
0129   shouldBe( "dateRef.getUTCMinutes()", "15");
0130   shouldBe( "dateRef.getUTCSeconds()", "30");
0131 
0132 /*
0133   // Shouldn't this work?
0134   dateRef = new Date('Sat Nov 5 1864 18:15:30 GMT+0500');
0135   //  debug(dateRef);
0136   shouldBe( "dateRef.getDay()", "6");
0137   shouldBe( "dateRef.getDate()", "5");
0138   shouldBe( "dateRef.getMonth()", "10");
0139 //  shouldBe( "dateRef.getYear()", "64"); // Should this be 64 ??
0140   shouldBe( "dateRef.getFullYear()", "1864");
0141   shouldBe( "dateRef.getMinutes()", "15");
0142   shouldBe( "dateRef.getSeconds()", "30");
0143   shouldBe( "dateRef.getUTCDay()", "3");
0144   shouldBe( "dateRef.getUTCDate()", "5");
0145   shouldBe( "dateRef.getUTCMonth()", "10");
0146   shouldBe( "dateRef.getUTCFullYear()", "1864");
0147   shouldBe( "dateRef.getUTCHours()", "13");
0148   shouldBe( "dateRef.getUTCMinutes()", "15");
0149   shouldBe( "dateRef.getUTCSeconds()", "30");
0150 */
0151 
0152   d = new Date('Tue Nov 5 2024 18:15:30 GMT+05:00');
0153   shouldBe( "d.toUTCString().replace('GMT', '+0000')", "'Tue, 05 Nov 2024 13:15:30 +0000'");
0154   d = new Date('Mon Nov 5 2040 18:15:30 GMT+05:00');
0155   shouldBe( "d.toUTCString().replace('GMT', '+0000')", "'Mon, 05 Nov 2040 13:15:30 +0000'");
0156   d = new Date('Fri Nov 5 2100 18:15:30 GMT+05:00');
0157   shouldBe( "d.toUTCString().replace('GMT', '+0000')", "'Fri, 05 Nov 2100 13:15:30 +0000'");
0158   d = new Date('Fri Nov 5 2004 03:15:30 GMT+05:00'); // Timezone crosses day barrier
0159   shouldBe( "d.toUTCString().replace('GMT', '+0000')", "'Thu, 04 Nov 2004 22:15:30 +0000'");
0160 
0161 // AM/PM
0162 shouldBe("(new Date('Dec 25 1995 1:30 PM UTC')).valueOf()", "819898200000");
0163 shouldBe("(new Date('Dec 25 1995 1:30 pm UTC')).valueOf()", "819898200000");
0164 shouldBe("(new Date('Dec 25 1995 1:30 AM UTC')).valueOf()", "819855000000");
0165 shouldBe("(new Date('Dec 25 1995 1:30 am UTC')).valueOf()", "819855000000");
0166 shouldBe("(new Date('Dec 25 1995 12:00 PM UTC')).valueOf()", "819892800000");
0167 shouldBe("(new Date('Dec 25 1995 12:00 AM UTC')).valueOf()", "819849600000");
0168 shouldBe("(new Date('Dec 25 1995 00:00 AM UTC')).valueOf()", "819849600000");
0169 shouldBe("(new Date('Dec 25 1995 00:00 PM UTC')).valueOf()", "819892800000");
0170 shouldBeTrue("isNaN(new Date('Dec 25 1995 13:30 AM UTC')).valueOf()");
0171 
0172 /*
0173   // Don't work in any other browsers
0174   d = new Date('Wednesday, 05-Nov-94 13:15:30 GMT');
0175   shouldBe( "d.toUTCString()", "dateRef.toUTCString()");
0176 
0177   d = new Date('Wed, 05-Nov-1994 13:15:30 GMT');
0178   shouldBe( "d.toUTCString()", "dateRef.toUTCString()");
0179 
0180   d = new Date('Wed, 05-November-1994 13:15:30 GMT');
0181   shouldBe( "d.toUTCString()", "dateRef.toUTCString()");
0182 
0183   // Works only in EST/EDT
0184   d = new Date('November 5, 1994 08:15:30');
0185   debug(d);
0186   shouldBe( "d.toUTCString()", "dateRef.toUTCString()");
0187 
0188   var dateRef2 = new Date('July 1, 2004 10:00 EDT');
0189   d = new Date('July 1, 2004 10:00');
0190   debug(d);
0191   shouldBe( "d.toUTCString()", "dateRef2.toUTCString()");
0192 
0193   shouldBe("new Date('Wednesday 09-Nov-99 13:12:40 GMT').getMonth()", "10"); // not parsed in moz
0194   shouldBe("new Date('Sat, 01-Dec-2000 08:00:00 GMT').getMonth()", "11"); // not parsed in moz
0195 */
0196 
0197 shouldBe("new Date('Sat, 01 Dec 2000 08:00:00 GMT').getMonth()", "11");
0198 shouldBe("new Date('01 Jan 99 22:00 +0100').getFullYear()", "1999");
0199 shouldBe("new Date('May 09 1999 13:12:40 GMT').getDate()", "9");
0200 shouldBe("new Date('Wednesday February 09 1999 13:12:40 GMT').getMonth()", "1");
0201 shouldBe("new Date('Wednesday January 09 1999 13:12:40 GMT').getFullYear()", "1999");
0202 shouldBe("new Date('Wednesday January 09 13:12:40 GMT 1999').getFullYear()", "1999");
0203 shouldBe("new Date('Wednesday January 06 13:12:40 GMT 2100').getFullYear()", "2100");
0204 shouldBe("new Date('Mon Nov 24 04:25:03 -0800 2008').getFullYear()", "2008");
0205 shouldBe("(new Date('\\n21\\rFeb\\f\\v\\t 2004')).getFullYear()", "2004"); // ws
0206 shouldBe("(new Date('Dec 25 1995 gmt')).valueOf()", "819849600000");
0207 shouldBe("(new Date('Dec 25 1995 utc')).valueOf()", "819849600000");
0208 
0209 // Those two fail in Konqueror, due to time_t being limited to 2037 !
0210 // moved to evil-n.js shouldBe("new Date('3/31/2099').getFullYear()", "2099");
0211 // moved to evil-n.js shouldBe("new Date('3/31/2099').getMonth()", "2");
0212 //shouldBe("new Date('3/31/2099').getDate()",31);
0213 
0214 shouldBe("new Date('3/31/2005').getDate()", "31");
0215 shouldBe("new Date('3/31/2005').getHours()", "0");
0216 shouldBe("new Date('7/31/2005').getHours()", "0"); // DST
0217 shouldBe("new Date('3/31/2005 GMT').getFullYear()", "2005");
0218 shouldBe("new Date('3/31/2005 12:45:15').getDate()", "31");
0219 shouldBe("new Date('3/31/2005 12:45:15').getMonth()", "2");
0220 shouldBe("new Date('3/31/2005 12:45:15').getSeconds()", "15");
0221 shouldBe("new Date('2003/02/03').getMonth()", "1");
0222 // ### not sure how to interpret this: new Date('25/12/2005') 
0223 // ### shouldBe("new Date('1950/02/03').getFullYear()", "1950");
0224 shouldBe("new Date('2003/02/03 02:01:04 UTC').getSeconds()", "4");
0225 
0226 var jul27Str = 'July 27, 2003'
0227 var jul27Num = new Date(jul27Str).valueOf();
0228 shouldBe("jul27Num", "Date.parse(jul27Str).valueOf()");
0229 // expect NaN, not undefined
0230 shouldBe("typeof Date.parse(0)", "'number'");
0231 shouldBeTrue("isNaN(Date.parse(0))");
0232 // parse string *object*
0233 shouldBe("Date.parse(new String(jul27Str)).valueOf()", "jul27Num");
0234 
0235 // invalid dates
0236 shouldBeTrue("isNaN(Number(new Date('01 ANF 2000')))"); // middle of JANFEB :)
0237 shouldBeTrue("isNaN(Number(new Date('ANF 01 2000')))");
0238 
0239 d = new Date("January 1, 2000");
0240 var oldHours = d.getHours();
0241 d.setMonth(8);
0242 shouldBe("oldHours", "d.getHours()");
0243 
0244 // some time values in different (implementation) ranges
0245 shouldBe("Date.UTC(1800, 0, 1)", "-5364662400000");
0246 shouldBe("Date.UTC(1800, 2, 1)", "-5359564800000"); // one day after Feb 28th
0247 shouldBe("Date.UTC(1899, 0, 1)", "-2240524800000");
0248 shouldBe("Date.UTC(1900, 0, 1)", "-2208988800000");
0249 shouldBe("Date.UTC(1960, 0, 1)", "-315619200000");
0250 shouldBe("Date.UTC(1970, 0, 1)", "0");
0251 shouldBe("Date.UTC(3000, 0, 1)", "32503680000000");
0252 
0253 // same dates as above
0254 shouldBe("(new Date(-5364662400000)).valueOf()", "-5364662400000");
0255 shouldBe("(new Date(-2240524800000)).valueOf()", "-2240524800000");
0256 shouldBe("(new Date(-2208988800000)).valueOf()", "-2208988800000");
0257 shouldBe("(new Date(-315619200000)).valueOf()", "-315619200000");
0258 shouldBe("(new Date(0)).valueOf()", "0");
0259 shouldBe("(new Date(32503680000000)).valueOf()", "32503680000000");
0260 
0261 d = new Date(2010, 0, 1);
0262 //shouldBe("d.valueOf()", "32503676400000");
0263 shouldBe("d.getDay()", "5");
0264 
0265 // large and small year numbers
0266 d = new Date(3000, 0, 1);
0267 //shouldBe("d.valueOf()", "32503676400000");
0268 //shouldBe("(new Date(3000, 0, 1)).valueOf()", "Date.UTC(3000, 0, 1)");
0269 shouldBeTrue("d.getYear() == 1100 || d.getYear() == 3000");
0270 shouldBe("d.getFullYear()", "3000");
0271 shouldBe("d.getDay()", "3");
0272 shouldBe("d.getHours()", "0");
0273 shouldBe("new Date('3/31/2099').getFullYear()", "2099");
0274 shouldBe("new Date('3/31/2099').getMonth()", "2");
0275 
0276 d = new Date(Date.UTC(3000, 0, 1));
0277 shouldBe("d.valueOf()", "32503680000000");
0278 shouldBe("d.getUTCDay()", "3");
0279 shouldBe("d.getUTCHours()", "0");
0280 
0281 d = new Date(1899, 0, 1);
0282 shouldBe("d.getFullYear()", "1899");
0283 shouldBeTrue("d.getYear() == -1 || d.getYear() == 1899"); // Moz or IE
0284 shouldBe("d.getDay()", "0");
0285 shouldBe("d.getHours()", "0");
0286 
0287 d = new Date(Date.UTC(3000, 0, 1));
0288 shouldBe("d.getUTCDay()", "3");
0289 
0290 d = new Date(Date.UTC(1899, 0, 1));
0291 shouldBe("d.getUTCDay()", "0");
0292 shouldBe( "d.toUTCString().replace(' 01 ', ' 1 ').replace(/GMT|UTC/, '+0000')", "'Sun, 1 Jan 1899 00:00:00 +0000'");
0293 
0294 // out of range values. have to be caught by TimeClip()
0295 shouldBe("Number(new Date(8.64E15))", "8.64E15");
0296 shouldBe("Number(new Date(-8.64E15))", "-8.64E15");
0297 shouldBeTrue("isNaN(new Date(8.6400001E15))");;
0298 shouldBeTrue("isNaN(new Date(-8.6400001E15))");;
0299 
0300 // other browsers don't mind the missing space
0301 shouldBe("(new Date('January29,2005')).getDate()", "29");
0302 
0303 shouldBe("(new Date('12/25/1995 ::')).valueOf()",
0304          "(new Date('12/25/1995')).valueOf()");
0305 
0306 // use of ',', '-' and ':' instead of whitespace
0307 shouldBe("new Date(',-:,September 03 2006, 13:53:02').getDate()", "3");
0308 shouldBe("new Date('September,03,-:,2006, 13:53:02,-:').getSeconds()", "02");
0309 shouldBeTrue("isNaN(new Date('September,03,-:,2006, 13:53:02:'))");
0310 shouldBeTrue("isNaN(new Date('September 03 2006:13:53:02:'))");
0311 
0312 // Tolerance for high values in xx/xx/xxxx
0313 shouldBe("new Date('03/30/2006').getDate()", "30");
0314 shouldBe("new Date('Mar 30 2006').toString()", "new Date('03/30/2006').toString()");
0315 shouldBe("new Date('30/03/2006').toString()", "new Date('Jun 03 2008').toString()");
0316 shouldBe("new Date('24/55/2006').getFullYear()", "2008");
0317 shouldBe("new Date('70/55/2006').getDate()", "27");
0318 shouldBe("new Date('00/00/2006').toString()", "new Date('Nov 30 2005').toString()");
0319 shouldBe("new Date('01/452/2006').toString()", "new Date('Mar 28 2007').toString()");
0320 
0321 // JavaScript 1.5 Mozilla extension
0322 shouldBeTrue("Math.abs(Date.now() - Number(new Date())) < 10000");
0323 
0324 // Not crashing when trying set* ops on NaNs
0325 shouldBeTrue("isNaN(new Date(NaN).setFullYear(1900))");
0326 
0327 //... but should permit doing setTime on NaN (#136992)
0328 shouldBe("new Date(NaN).setTime(1162939650000)", "1162939650000"); 
0329 
0330 // don't crash on invocation of Date functions on non-Date objects
0331 shouldBe("Date.prototype.toString()", "'Invalid Date'");
0332 shouldThrow("Date.prototype.valueOf()");
0333 shouldThrow("Date.prototype.toDateString()");
0334 shouldBeTrue("Date.prototype.toJSON.apply(Infinity) === null");
0335 shouldBeTrue("Date.prototype.toJSON.apply(-Infinity) === null");
0336 shouldBeTrue("Date.prototype.toJSON.apply(NaN) === null");
0337 // TODO: add successful case of toJSON()
0338 
0339 // from Acid3
0340 d = new Date();
0341 shouldBeTrue("isNaN(d.setMilliseconds())");
0342 shouldBeTrue("isNaN(d)");
0343 shouldBeTrue("isNaN(d.getDay())");
0344 // variations
0345 shouldBeTrue("isNaN((new Date()).setMilliseconds(NaN))");
0346 shouldBeTrue("isNaN((new Date()).setSeconds())");
0347 shouldBeTrue("isNaN((new Date()).setDate())");
0348 shouldBeTrue("isNaN((new Date()).setMonth())");
0349 
0350 // Not freezing or crashing when doing setTime on an extreme value (#189373)
0351 shouldBeTrue("isNaN(de = new Date(), de.setTime(1e21), de.getTime())");
0352 
0353 debug("End Of Test");