1 /* The contents of this file are subject to the Netscape Public 2 * License Version 1.1 (the "License"); you may not use this file 3 * except in compliance with the License. You may obtain a copy of 4 * the License at http://www.mozilla.org/NPL/ 5 * 6 * Software distributed under the License is distributed on an "AS 7 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 8 * implied. See the License for the specific language governing 9 * rights and limitations under the License. 10 * 11 * The Original Code is Mozilla Communicator client code, released March 12 * 31, 1998. 13 * 14 * The Initial Developer of the Original Code is Netscape Communications 15 * Corporation. Portions created by Netscape are 16 * Copyright (C) 1998 Netscape Communications Corporation. All 17 * Rights Reserved. 18 * 19 * Contributor(s): 20 * 21 */ 22 /** 23 File Name: 15.9.3.1.js 24 ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms) 25 Description: The [[Prototype]] property of the newly constructed 26 object is set to the original Date prototype object, 27 the one that is the initial value of Date.prototype. 28 29 The [[Class]] property of the newly constructed object 30 is set as follows: 31 1. Call ToNumber(year) 32 2. Call ToNumber(month) 33 3. Call ToNumber(date) 34 4. Call ToNumber(hours) 35 5. Call ToNumber(minutes) 36 6. Call ToNumber(seconds) 37 7. Call ToNumber(ms) 38 8. If Result(1)is NaN and 0 <= ToInteger(Result(1)) <= 39 99, Result(8) is 1900+ToInteger(Result(1)); otherwise, 40 Result(8) is Result(1) 41 9. Compute MakeDay(Result(8), Result(2), Result(3) 42 10. Compute MakeTime(Result(4), Result(5), Result(6), 43 Result(7) 44 11. Compute MakeDate(Result(9), Result(10)) 45 12. Set the [[Value]] property of the newly constructed 46 object to TimeClip(UTC(Result(11))). 47 48 49 This tests the returned value of a newly constructed 50 Date object. 51 52 Author: christine (at) netscape.com 53 Date: 7 july 1997 54 */ 55 56 var TIME = 0; 57 var UTC_YEAR = 1; 58 var UTC_MONTH = 2; 59 var UTC_DATE = 3; 60 var UTC_DAY = 4; 61 var UTC_HOURS = 5; 62 var UTC_MINUTES = 6; 63 var UTC_SECONDS = 7; 64 var UTC_MS = 8; 65 66 var YEAR = 9; 67 var MONTH = 10; 68 var DATE = 11; 69 var DAY = 12; 70 var HOURS = 13; 71 var MINUTES = 14; 72 var SECONDS = 15; 73 var MS = 16; 74 75 // for TCMS, the testcases array must be global. 76 var SECTION = "15.9.3.1"; 77 var TITLE = "Date( year, month, date, hours, minutes, seconds )"; 78 79 writeHeaderToLog( SECTION+" " +TITLE ); 80 81 var testcases = new Array(); 82 getTestCases(); 83 84 // all tests must call a function that returns an array of TestCase object 85 test(); 86 87 function getTestCases( ) { 88 89 // Dates around 1970 90 91 addNewTestCase( new Date( 1969,11,31,15,59,59), 92 "new Date( 1969,11,31,15,59,59)", 93 [-1000,1969,11,31,3,23,59,59,0,1969,11,31,3,15,59,59,0] ); 94 95 addNewTestCase( new Date( 1969,11,31,16,0,0), 96 "new Date( 1969,11,31,16,0,0)", 97 [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] ); 98 99 addNewTestCase( new Date( 1969,11,31,23,59,59), 100 "new Date( 1969,11,31,23,59,59)", 101 [28799000,1970,0,1,4,7,59,59,0,1969,11,31,3,23,59,59,0] ); 102 103 addNewTestCase( new Date( 1970, 0, 1, 0, 0, 0), 104 "new Date( 1970, 0, 1, 0, 0, 0)", 105 [28800000,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] ); 106 107 addNewTestCase( new Date( 1969,11,31,16,0,0), 108 "new Date( 1969,11,31,16,0,0)", 109 [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] ); 110 /* 111 // Dates around 2000 112 113 addNewTestCase( new Date( 1999,11,31,15,59,59), 114 "new Date( 1999,11,31,15,59,59)", 115 [946684799000,1999,11,31,5,23,59,59,0,1999,11,31,5,15,59,59,0] ); 116 117 addNewTestCase( new Date( 1999,11,31,16,0,0), 118 "new Date( 1999,11,31,16,0,0)", 119 [946684800000,2000,0,1,6,0,0,0,0,1999,11,31,5, 16,0,0,0] ); 120 121 addNewTestCase( new Date( 2000,0,1,0,0,0), 122 "new Date( 2000,0,1,0,0,0)", 123 [946713600000,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] ); 124 125 // Dates around 1900 126 127 addNewTestCase( new Date(1899,11,31,16,0,0), 128 "new Date(1899,11,31,16,0,0)", 129 [-2208988800000,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] ); 130 131 addNewTestCase( new Date(1899,11,31,15,59,59), 132 "new Date(1899,11,31,15,59,59)", 133 [-2208988801000,1899,11,31,0,23,59,59,0,1899,11,31,0,15,59,59,0] ); 134 135 addNewTestCase( new Date(1900,0,1,0,0,0), 136 "new Date(1900,0,1,0,0,0)", 137 [-2208960000000,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] ); 138 139 addNewTestCase( new Date(1900,0,1,0,0,1), 140 "new Date(1900,0,1,0,0,1)", 141 [-2208959999000,1900,0,1,1,8,0,1,0,1900,0,1,1,0,0,1,0] ); 142 143 var UTC_FEB_29_2000 = TIME_2000 + msPerDay*31 + msPerDay*28; 144 var PST_FEB_29_2000 = UTC_FEB_29_2000 + 8*msPerHour; 145 146 // Dates around Feb 29, 2000 147 addNewTestCase( new Date(2000,1,28,16,0,0,0), 148 "new Date(2000,1,28,16,0,0,0)", 149 [UTC_FEB_29_2000,2000,1,29,2,0,0,0,0,2000,1,28,1,16,0,0,0,0] ); 150 151 addNewTestCase( new Date(2000,1,29,0,0,0,0), 152 "new Date(2000,1,29,0,0,0,0)", 153 [PST_FEB_29_2000,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] ); 154 155 addNewTestCase( new Date(2000,1,29,24,0,0,0), 156 "new Date(2000,1,29,24,0,0,0)", 157 [PST_FEB_29_2000+msPerDay,2000,2,1,3,8,0,0,0,2000,2,1,3,0,0,0,0] ); 158 159 // Dates around Jan 1, 2005 160 161 var UTC_JAN_1_2005 = TIME_2000 + TimeInYear(2000) + TimeInYear(2001) + 162 TimeInYear(2002)+ TimeInYear(2003) + TimeInYear(2004); 163 var PST_JAN_1_2005 = UTC_JAN_1_2005 + 8*msPerHour; 164 165 addNewTestCase( new Date(2005,0,1,0,0,0,0), 166 "new Date(2005,0,1,0,0,0,0)", 167 [PST_JAN_1_2005,2005,0,1,6,8,0,0,0,2005,0,1,6,0,0,0,0] ); 168 169 addNewTestCase( new Date(2004,11,31,16,0,0,0), 170 "new Date(2004,11,31,16,0,0,0)", 171 [UTC_JAN_1_2005,2005,0,1,6,0,0,0,0,2004,11,31,5,16,0,0,0] ); 172 */ 173 /* 174 This test case is incorrect. Need to fix the DaylightSavings functions in 175 shell.js for this to work properly. 176 177 // Daylight Savings Time 178 179 var DST_START_1998 = UTC( GetSecondSundayInMarch(TimeFromYear(1998)) + 2*msPerHour ) 180 181 addNewTestCase( new Date(1998,3,5,1,59,59,999), 182 "new Date(1998,3,5,1,59,59,999)", 183 [DST_START_1998-1,1998,3,5,0,9,59,59,999,1998,3,5,0,1,59,59,999] ); 184 185 addNewTestCase( new Date(1998,3,5,2,0,0,0), 186 "new Date(1998,3,5,2,0,0,0)", 187 [DST_START_1998,1998,3,5,0,10,0,0,0,1998,3,5,0,3,0,0,0]); 188 189 var DST_END_1998 = UTC( GetFirstSundayInNovember(TimeFromYear(1998)) + 2*msPerHour ); 190 191 addNewTestCase ( new Date(1998,9,25,1,59,59,999), 192 "new Date(1998,9,25,1,59,59,999)", 193 [DST_END_1998-1,1998,9,25,0,8,59,59,999,1998,9,25,0,1,59,59,999] ); 194 195 addNewTestCase ( new Date(1998,9,25,2,0,0,0), 196 "new Date(1998,9,25,2,0,0,0)", 197 [DST_END_1998,1998,9,25,0,9,0,0,0,1998,9,25,0,1,0,0,0] ); 198 */ 199 } 200 201 function addNewTestCase( DateCase, DateString, ResultArray ) { 202 //adjust hard-coded ResultArray for tester's timezone instead of PST 203 adjustResultArray(ResultArray); 204 205 item = testcases.length; 206 207 testcases[item++] = new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() ); 208 testcases[item++] = new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() ); 209 210 testcases[item++] = new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() ); 211 testcases[item++] = new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() ); 212 testcases[item++] = new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() ); 213 testcases[item++] = new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() ); 214 testcases[item++] = new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() ); 215 testcases[item++] = new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() ); 216 testcases[item++] = new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() ); 217 testcases[item++] = new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() ); 218 219 testcases[item++] = new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() ); 220 testcases[item++] = new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() ); 221 testcases[item++] = new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() ); 222 testcases[item++] = new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() ); 223 testcases[item++] = new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() ); 224 testcases[item++] = new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() ); 225 testcases[item++] = new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() ); 226 testcases[item++] = new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() ); 227 228 } 229 230 function test() { 231 for( tc=0; tc < testcases.length; tc++ ) { 232 testcases[tc].passed = writeTestCaseResult( 233 testcases[tc].expect, 234 testcases[tc].actual, 235 testcases[tc].description +" = " + 236 testcases[tc].actual ); 237 } 238 stopTest(); 239 return testcases; 240 } 241 242