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");