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.5.37-1.js
24    ECMA Section:       15.9.5.37 Date.prototype.setUTCFullYear(year [, mon [, date ]] )
25    Description:
26
27    If mon is not specified, this behaves as if mon were specified with the
28    value getUTCMonth( ).  If date is not specified, this behaves as if date
29    were specified with the value getUTCDate( ).
30
31   1.   Let t be this time value; but if this time value is NaN, let t be +0.
32   2.   Call ToNumber(year).
33   3.   If mon is not specified, compute MonthFromTime(t); otherwise, call
34        ToNumber(mon).
35   4.   If date is not specified, compute DateFromTime(t); otherwise, call
36        ToNumber(date).
37   5.   Compute MakeDay(Result(2), Result(3), Result(4)).
38   6.   Compute MakeDate(Result(5), TimeWithinDay(t)).
39   7.   Set the [[Value]] property of the this value to TimeClip(Result(6)).
40   8.   Return the value of the [[Value]] property of the this value.
41
42    Author:             christine@netscape.com
43    Date:               12 november 1997
44
45    Added some Year 2000 test cases.
46*/
47    var SECTION = "15.9.5.37-1";
48    var VERSION = "ECMA_1";
49    startTest();
50
51    writeHeaderToLog( SECTION + " Date.prototype.setUTCFullYear(year [, mon [, date ]] )");
52
53    getTestCases();
54    test();
55
56function test() {
57    for ( tc=0; tc < testcases.length; tc++ ) {
58        testcases[tc].passed = writeTestCaseResult(
59                            testcases[tc].expect,
60                            testcases[tc].actual,
61                            testcases[tc].description +" = "+
62                            testcases[tc].actual );
63
64        testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
65    }
66    stopTest();
67    return ( testcases );
68}
69
70function getTestCases() {
71
72    // Dates around 1970
73
74    addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCFullYear(1970);TDATE",
75                    UTCDateFromTime(SetUTCFullYear(0,1970)),
76                    LocalDateFromTime(SetUTCFullYear(0,1970)) );
77
78    addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCFullYear(1971);TDATE",
79                    UTCDateFromTime(SetUTCFullYear(0,1971)),
80                    LocalDateFromTime(SetUTCFullYear(0,1971)) );
81
82    addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCFullYear(1972);TDATE",
83                    UTCDateFromTime(SetUTCFullYear(0,1972)),
84                    LocalDateFromTime(SetUTCFullYear(0,1972)) );
85
86    addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCFullYear(1968);TDATE",
87                    UTCDateFromTime(SetUTCFullYear(0,1968)),
88                    LocalDateFromTime(SetUTCFullYear(0,1968)) );
89
90    addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCFullYear(1969);TDATE",
91                    UTCDateFromTime(SetUTCFullYear(0,1969)),
92                    LocalDateFromTime(SetUTCFullYear(0,1969)) );
93
94    addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCFullYear(1969);TDATE",
95                    UTCDateFromTime(SetUTCFullYear(0,1969)),
96                    LocalDateFromTime(SetUTCFullYear(0,1969)) );
97/*
98    // Dates around 2000
99
100    addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(2000);TDATE",
101                    UTCDateFromTime(SetUTCFullYear(0,2000)),
102                    LocalDateFromTime(SetUTCFullYear(0,2000)) );
103
104    addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(2001);TDATE",
105                    UTCDateFromTime(SetUTCFullYear(0,2001)),
106                    LocalDateFromTime(SetUTCFullYear(0,2001)) );
107
108    addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(1999);TDATE",
109                    UTCDateFromTime(SetUTCFullYear(0,1999)),
110                    LocalDateFromTime(SetUTCFullYear(0,1999)) );
111
112    // Dates around 29 February 2000
113
114    var UTC_FEB_29_1972 = TIME_1970 + TimeInYear(1970) + TimeInYear(1971) +
115    31*msPerDay + 28*msPerDay;
116
117    var PST_FEB_29_1972 = UTC_FEB_29_1972 - TZ_DIFF * msPerHour;
118
119    addNewTestCase( "TDATE = new Date("+UTC_FEB_29_1972+"); "+
120                    "TDATE.setUTCFullYear(2000);TDATE",
121                    UTCDateFromTime(SetUTCFullYear(UTC_FEB_29_1972,2000)),
122                    LocalDateFromTime(SetUTCFullYear(UTC_FEB_29_1972,2000)) );
123
124    addNewTestCase( "TDATE = new Date("+PST_FEB_29_1972+"); "+
125                    "TDATE.setUTCFullYear(2000);TDATE",
126                    UTCDateFromTime(SetUTCFullYear(PST_FEB_29_1972,2000)),
127                    LocalDateFromTime(SetUTCFullYear(PST_FEB_29_1972,2000)) );
128
129    // Dates around 2005
130
131    addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(2005);TDATE",
132                    UTCDateFromTime(SetUTCFullYear(0,2005)),
133                    LocalDateFromTime(SetUTCFullYear(0,2005)) );
134
135    addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(2004);TDATE",
136                    UTCDateFromTime(SetUTCFullYear(0,2004)),
137                    LocalDateFromTime(SetUTCFullYear(0,2004)) );
138
139    addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(2006);TDATE",
140                    UTCDateFromTime(SetUTCFullYear(0,2006)),
141                    LocalDateFromTime(SetUTCFullYear(0,2006)) );
142
143
144    // Dates around 1900
145    addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(1900);TDATE",
146                    UTCDateFromTime(SetUTCFullYear(0,1900)),
147                    LocalDateFromTime(SetUTCFullYear(0,1900)) );
148
149    addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(1899);TDATE",
150                    UTCDateFromTime(SetUTCFullYear(0,1899)),
151                    LocalDateFromTime(SetUTCFullYear(0,1899)) );
152
153    addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(1901);TDATE",
154                    UTCDateFromTime(SetUTCFullYear(0,1901)),
155                    LocalDateFromTime(SetUTCFullYear(0,1901)) );
156
157*/
158}
159function addNewTestCase( DateString, UTCDate, LocalDate) {
160    DateCase = eval( DateString );
161
162    var item = testcases.length;
163
164//    fixed_year = ( ExpectDate.year >=1900 || ExpectDate.year < 2000 ) ? ExpectDate.year - 1900 : ExpectDate.year;
165
166    testcases[item++] = new TestCase( SECTION, DateString+".getTime()",             UTCDate.value,       DateCase.getTime() );
167    testcases[item++] = new TestCase( SECTION, DateString+".valueOf()",             UTCDate.value,       DateCase.valueOf() );
168
169    testcases[item++] = new TestCase( SECTION, DateString+".getUTCFullYear()",      UTCDate.year,    DateCase.getUTCFullYear() );
170    testcases[item++] = new TestCase( SECTION, DateString+".getUTCMonth()",         UTCDate.month,  DateCase.getUTCMonth() );
171    testcases[item++] = new TestCase( SECTION, DateString+".getUTCDate()",          UTCDate.date,   DateCase.getUTCDate() );
172    testcases[item++] = new TestCase( SECTION, DateString+".getUTCDay()",           UTCDate.day,    DateCase.getUTCDay() );
173    testcases[item++] = new TestCase( SECTION, DateString+".getUTCHours()",         UTCDate.hours,  DateCase.getUTCHours() );
174    testcases[item++] = new TestCase( SECTION, DateString+".getUTCMinutes()",       UTCDate.minutes,DateCase.getUTCMinutes() );
175    testcases[item++] = new TestCase( SECTION, DateString+".getUTCSeconds()",       UTCDate.seconds,DateCase.getUTCSeconds() );
176    testcases[item++] = new TestCase( SECTION, DateString+".getUTCMilliseconds()",  UTCDate.ms,     DateCase.getUTCMilliseconds() );
177
178    testcases[item++] = new TestCase( SECTION, DateString+".getFullYear()",         LocalDate.year,       DateCase.getFullYear() );
179    testcases[item++] = new TestCase( SECTION, DateString+".getMonth()",            LocalDate.month,      DateCase.getMonth() );
180    testcases[item++] = new TestCase( SECTION, DateString+".getDate()",             LocalDate.date,       DateCase.getDate() );
181    testcases[item++] = new TestCase( SECTION, DateString+".getDay()",              LocalDate.day,        DateCase.getDay() );
182    testcases[item++] = new TestCase( SECTION, DateString+".getHours()",            LocalDate.hours,      DateCase.getHours() );
183    testcases[item++] = new TestCase( SECTION, DateString+".getMinutes()",          LocalDate.minutes,    DateCase.getMinutes() );
184    testcases[item++] = new TestCase( SECTION, DateString+".getSeconds()",          LocalDate.seconds,    DateCase.getSeconds() );
185    testcases[item++] = new TestCase( SECTION, DateString+".getMilliseconds()",     LocalDate.ms,         DateCase.getMilliseconds() );
186
187    DateCase.toString = Object.prototype.toString;
188
189    testcases[item++] = new TestCase( SECTION,
190                                      DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
191                                      "[object Date]",
192                                      DateCase.toString() );
193}
194
195function MyDate() {
196    this.year = 0;
197    this.month = 0;
198    this.date = 0;
199    this.hours = 0;
200    this.minutes = 0;
201    this.seconds = 0;
202    this.ms = 0;
203}
204function LocalDateFromTime(t) {
205    t = LocalTime(t);
206    return ( MyDateFromTime(t) );
207}
208function UTCDateFromTime(t) {
209 return ( MyDateFromTime(t) );
210}
211function MyDateFromTime( t ) {
212    var d = new MyDate();
213    d.year = YearFromTime(t);
214    d.month = MonthFromTime(t);
215    d.date = DateFromTime(t);
216    d.hours = HourFromTime(t);
217    d.minutes = MinFromTime(t);
218    d.seconds = SecFromTime(t);
219    d.ms = msFromTime(t);
220
221    d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
222    d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
223    d.day = WeekDay( d.value );
224
225    return (d);
226}
227function SetUTCFullYear( t, year, mon, date ) {
228    var T = ( t != t ) ? 0 : t;
229    var YEAR = Number(year);
230    var MONTH = ( mon == void 0 ) ?     MonthFromTime(T) : Number( mon );
231    var DATE  = ( date == void 0 ) ?    DateFromTime(T)  : Number( date );
232    var DAY = MakeDay( YEAR, MONTH, DATE );
233
234    return ( TimeClip(MakeDate(DAY, TimeWithinDay(T))) );
235}
236