]>
Commit | Line | Data |
---|---|---|
b37bf2e1 A |
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.8.js | |
24 | ECMA Section: 15.9.3.8 The Date Constructor | |
25 | new Date( value ) | |
26 | Description: The [[Prototype]] property of the newly constructed | |
27 | object is set to the original Date prototype object, | |
28 | the one that is the initial valiue of Date.prototype. | |
29 | ||
30 | The [[Class]] property of the newly constructed object is | |
31 | set to "Date". | |
32 | ||
33 | The [[Value]] property of the newly constructed object is | |
34 | set as follows: | |
35 | ||
36 | 1. Call ToPrimitive(value) | |
37 | 2. If Type( Result(1) ) is String, then go to step 5. | |
38 | 3. Let V be ToNumber( Result(1) ). | |
39 | 4. Set the [[Value]] property of the newly constructed | |
40 | object to TimeClip(V) and return. | |
41 | 5. Parse Result(1) as a date, in exactly the same manner | |
42 | as for the parse method. Let V be the time value for | |
43 | this date. | |
44 | 6. Go to step 4. | |
45 | ||
46 | Author: christine@netscape.com | |
47 | Date: 28 october 1997 | |
48 | Version: 9706 | |
49 | ||
50 | */ | |
51 | ||
52 | var VERSION = "ECMA_1"; | |
53 | startTest(); | |
54 | var SECTION = "15.9.3.8"; | |
55 | var TYPEOF = "object"; | |
56 | ||
57 | var TIME = 0; | |
58 | var UTC_YEAR = 1; | |
59 | var UTC_MONTH = 2; | |
60 | var UTC_DATE = 3; | |
61 | var UTC_DAY = 4; | |
62 | var UTC_HOURS = 5; | |
63 | var UTC_MINUTES = 6; | |
64 | var UTC_SECONDS = 7; | |
65 | var UTC_MS = 8; | |
66 | ||
67 | var YEAR = 9; | |
68 | var MONTH = 10; | |
69 | var DATE = 11; | |
70 | var DAY = 12; | |
71 | var HOURS = 13; | |
72 | var MINUTES = 14; | |
73 | var SECONDS = 15; | |
74 | var MS = 16; | |
75 | ||
76 | ||
77 | // for TCMS, the testcases array must be global. | |
78 | var tc= 0; | |
79 | var TITLE = "Date constructor: new Date( value )"; | |
80 | var SECTION = "15.9.3.8"; | |
81 | var VERSION = "ECMA_1"; | |
82 | startTest(); | |
83 | ||
84 | writeHeaderToLog( SECTION +" " + TITLE ); | |
85 | ||
86 | testcases = new Array(); | |
87 | getTestCases(); | |
88 | ||
89 | // all tests must call a function that returns a boolean value | |
90 | test(); | |
91 | ||
92 | function getTestCases( ) { | |
93 | // all the "ResultArrays" below are hard-coded to Pacific Standard Time values - | |
94 | var TZ_ADJUST = -TZ_PST * msPerHour; | |
95 | ||
96 | addNewTestCase( new Date((new Date(0)).toUTCString()), | |
97 | "new Date(\""+ (new Date(0)).toUTCString()+"\" )", | |
98 | [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] ); | |
99 | ||
100 | addNewTestCase( new Date((new Date(1)).toString()), | |
101 | "new Date(\""+ (new Date(1)).toString()+"\" )", | |
102 | [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] ); | |
103 | ||
104 | addNewTestCase( new Date( TZ_ADJUST ), | |
105 | "new Date(" + TZ_ADJUST+")", | |
106 | [TZ_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] ); | |
107 | ||
108 | addNewTestCase( new Date((new Date(TZ_ADJUST)).toString()), | |
109 | "new Date(\""+ (new Date(TZ_ADJUST)).toString()+"\")", | |
110 | [TZ_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] ); | |
111 | ||
112 | ||
113 | addNewTestCase( new Date( (new Date(TZ_ADJUST)).toUTCString() ), | |
114 | "new Date(\""+ (new Date(TZ_ADJUST)).toUTCString()+"\")", | |
115 | [TZ_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] ); | |
116 | /* | |
117 | // Dates around 2000 | |
118 | ||
119 | addNewTestCase( new Date(TIME_2000+TZ_ADJUST), | |
120 | "new Date(" +(TIME_2000+TZ_ADJUST)+")", | |
121 | [TIME_2000+TZ_ADJUST,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] ); | |
122 | ||
123 | addNewTestCase( new Date(TIME_2000), | |
124 | "new Date(" +TIME_2000+")", | |
125 | [TIME_2000,2000,0,1,6,0,0,0,0,1999,11,31,5,16,0,0,0] ); | |
126 | ||
127 | addNewTestCase( new Date( (new Date(TIME_2000+TZ_ADJUST)).toString()), | |
128 | "new Date(\"" +(new Date(TIME_2000+TZ_ADJUST)).toString()+"\")", | |
129 | [TIME_2000+TZ_ADJUST,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] ); | |
130 | ||
131 | addNewTestCase( new Date((new Date(TIME_2000)).toString()), | |
132 | "new Date(\"" +(new Date(TIME_2000)).toString()+"\")", | |
133 | [TIME_2000,2000,0,1,6,0,0,0,0,1999,11,31,5,16,0,0,0] ); | |
134 | ||
135 | // addNewTestCase( "new Date(\"" +(new Date(TIME_2000+TZ_ADJUST)).toLocaleString()+"\")", [TIME_2000+TZ_ADJUST,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] ); | |
136 | // addNewTestCase( "new Date(\"" +(new Date(TIME_2000)).toLocaleString()+"\")", [TIME_2000,2000,0,1,6,0,0,0,0,1999,11,31,5,16,0,0,0] ); | |
137 | ||
138 | addNewTestCase( new Date( (new Date(TIME_2000+TZ_ADJUST)).toUTCString()), | |
139 | "new Date(\"" +(new Date(TIME_2000+TZ_ADJUST)).toUTCString()+"\")", | |
140 | [TIME_2000+TZ_ADJUST,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] ); | |
141 | ||
142 | addNewTestCase( new Date( (new Date(TIME_2000)).toUTCString()), | |
143 | "new Date(\"" +(new Date(TIME_2000)).toUTCString()+"\")", | |
144 | [TIME_2000,2000,0,1,6,0,0,0,0,1999,11,31,5,16,0,0,0] ); | |
145 | ||
146 | // Dates around Feb 29, 2000 | |
147 | ||
148 | var UTC_FEB_29_2000 = TIME_2000 + 31*msPerDay + 28*msPerDay; | |
149 | var PST_FEB_29_2000 = UTC_FEB_29_2000 + TZ_ADJUST; | |
150 | ||
151 | addNewTestCase( new Date(UTC_FEB_29_2000), | |
152 | "new Date("+UTC_FEB_29_2000+")", | |
153 | [UTC_FEB_29_2000,2000,1,29,2,0,0,0,0,2000,1,28,1,16,0,0,0] ); | |
154 | ||
155 | addNewTestCase( new Date(PST_FEB_29_2000), | |
156 | "new Date("+PST_FEB_29_2000+")", | |
157 | [PST_FEB_29_2000,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] ); | |
158 | ||
159 | addNewTestCase( new Date( (new Date(UTC_FEB_29_2000)).toString() ), | |
160 | "new Date(\""+(new Date(UTC_FEB_29_2000)).toString()+"\")", | |
161 | [UTC_FEB_29_2000,2000,1,29,2,0,0,0,0,2000,1,28,1,16,0,0,0] ); | |
162 | ||
163 | addNewTestCase( new Date( (new Date(PST_FEB_29_2000)).toString() ), | |
164 | "new Date(\""+(new Date(PST_FEB_29_2000)).toString()+"\")", | |
165 | [PST_FEB_29_2000,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] ); | |
166 | ||
167 | // Parsing toLocaleString() is not guaranteed by ECMA. | |
168 | // addNewTestCase( "new Date(\""+(new Date(UTC_FEB_29_2000)).toLocaleString()+"\")", [UTC_FEB_29_2000,2000,1,29,2,0,0,0,0,2000,1,28,1,16,0,0,0] ); | |
169 | // addNewTestCase( "new Date(\""+(new Date(PST_FEB_29_2000)).toLocaleString()+"\")", [PST_FEB_29_2000,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] ); | |
170 | ||
171 | addNewTestCase( new Date( (new Date(UTC_FEB_29_2000)).toGMTString() ), | |
172 | "new Date(\""+(new Date(UTC_FEB_29_2000)).toGMTString()+"\")", | |
173 | [UTC_FEB_29_2000,2000,1,29,2,0,0,0,0,2000,1,28,1,16,0,0,0] ); | |
174 | ||
175 | addNewTestCase( new Date( (new Date(PST_FEB_29_2000)).toGMTString() ), | |
176 | "new Date(\""+(new Date(PST_FEB_29_2000)).toGMTString()+"\")", | |
177 | [PST_FEB_29_2000,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] ); | |
178 | ||
179 | // Dates around 1900 | |
180 | ||
181 | var PST_1900 = TIME_1900 + 8*msPerHour; | |
182 | ||
183 | addNewTestCase( new Date( TIME_1900 ), | |
184 | "new Date("+TIME_1900+")", | |
185 | [TIME_1900,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] ); | |
186 | ||
187 | addNewTestCase( new Date(PST_1900), | |
188 | "new Date("+PST_1900+")", | |
189 | [ PST_1900,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] ); | |
190 | ||
191 | addNewTestCase( new Date( (new Date(TIME_1900)).toString() ), | |
192 | "new Date(\""+(new Date(TIME_1900)).toString()+"\")", | |
193 | [TIME_1900,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] ); | |
194 | ||
195 | addNewTestCase( new Date( (new Date(PST_1900)).toString() ), | |
196 | "new Date(\""+(new Date(PST_1900 )).toString()+"\")", | |
197 | [ PST_1900,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] ); | |
198 | ||
199 | addNewTestCase( new Date( (new Date(TIME_1900)).toUTCString() ), | |
200 | "new Date(\""+(new Date(TIME_1900)).toUTCString()+"\")", | |
201 | [TIME_1900,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] ); | |
202 | ||
203 | addNewTestCase( new Date( (new Date(PST_1900)).toUTCString() ), | |
204 | "new Date(\""+(new Date(PST_1900 )).toUTCString()+"\")", | |
205 | [ PST_1900,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] ); | |
206 | ||
207 | // addNewTestCase( "new Date(\""+(new Date(TIME_1900)).toLocaleString()+"\")", [TIME_1900,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] ); | |
208 | // addNewTestCase( "new Date(\""+(new Date(PST_1900 )).toLocaleString()+"\")", [ PST_1900,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] ); | |
209 | */ | |
210 | /* | |
211 | This test case is incorrect. Need to fix the DaylightSavings functions in | |
212 | shell.js for this to work properly. | |
213 | ||
214 | var DST_START_1998 = UTC( GetSecondSundayInMarch(TimeFromYear(1998)) + 2*msPerHour ) | |
215 | ||
216 | addNewTestCase( new Date(DST_START_1998-1), | |
217 | "new Date("+(DST_START_1998-1)+")", | |
218 | [DST_START_1998-1,1998,3,5,0,9,59,59,999,1998,3,5,0,1,59,59,999] ); | |
219 | ||
220 | addNewTestCase( new Date(DST_START_1998), | |
221 | "new Date("+DST_START_1998+")", | |
222 | [DST_START_1998,1998,3,5,0,10,0,0,0,1998,3,5,0,3,0,0,0]); | |
223 | ||
224 | var DST_END_1998 = UTC( GetFirstSundayInNovember(TimeFromYear(1998)) + 2*msPerHour ); | |
225 | ||
226 | addNewTestCase ( new Date(DST_END_1998-1), | |
227 | "new Date("+(DST_END_1998-1)+")", | |
228 | [DST_END_1998-1,1998,9,25,0,8,59,59,999,1998,9,25,0,1,59,59,999] ); | |
229 | ||
230 | addNewTestCase ( new Date(DST_END_1998), | |
231 | "new Date("+DST_END_1998+")", | |
232 | [DST_END_1998,1998,9,25,0,9,0,0,0,1998,9,25,0,1,0,0,0] ); | |
233 | */ | |
234 | } | |
235 | ||
236 | function addNewTestCase( DateCase, DateString, ResultArray ) { | |
237 | //adjust hard-coded ResultArray for tester's timezone instead of PST | |
238 | adjustResultArray(ResultArray, 'msMode'); | |
239 | ||
240 | item = testcases.length; | |
241 | ||
242 | testcases[item++] = new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() ); | |
243 | testcases[item++] = new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() ); | |
244 | testcases[item++] = new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() ); | |
245 | testcases[item++] = new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() ); | |
246 | testcases[item++] = new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() ); | |
247 | testcases[item++] = new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() ); | |
248 | testcases[item++] = new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() ); | |
249 | testcases[item++] = new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() ); | |
250 | testcases[item++] = new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() ); | |
251 | testcases[item++] = new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() ); | |
252 | testcases[item++] = new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() ); | |
253 | testcases[item++] = new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() ); | |
254 | testcases[item++] = new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() ); | |
255 | testcases[item++] = new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() ); | |
256 | testcases[item++] = new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() ); | |
257 | testcases[item++] = new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() ); | |
258 | testcases[item++] = new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() ); | |
259 | testcases[item++] = new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() ); | |
260 | } | |
261 | ||
262 | function test() { | |
263 | for( tc = 0; tc < testcases.length; tc++ ) { | |
264 | ||
265 | testcases[tc].passed = writeTestCaseResult( | |
266 | testcases[tc].expect, | |
267 | testcases[tc].actual, | |
268 | testcases[tc].description +" = " + | |
269 | testcases[tc].actual ); | |
270 | } | |
271 | stopTest(); | |
272 | ||
273 | // all tests must return a boolean value | |
274 | return ( testcases ); | |
275 | } |