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 29 February 2000
73
74    var UTC_FEB_29_1972 = TIME_1970 + TimeInYear(1970) + TimeInYear(1971) +
75    31*msPerDay + 28*msPerDay;
76
77    var PST_FEB_29_1972 = UTC_FEB_29_1972 - TZ_DIFF * msPerHour;
78
79    addNewTestCase( "TDATE = new Date("+UTC_FEB_29_1972+"); "+
80                    "TDATE.setUTCFullYear(2000);TDATE",
81                    UTCDateFromTime(SetUTCFullYear(UTC_FEB_29_1972,2000)),
82                    LocalDateFromTime(SetUTCFullYear(UTC_FEB_29_1972,2000)) );
83
84    addNewTestCase( "TDATE = new Date("+PST_FEB_29_1972+"); "+
85                    "TDATE.setUTCFullYear(2000);TDATE",
86                    UTCDateFromTime(SetUTCFullYear(PST_FEB_29_1972,2000)),
87                    LocalDateFromTime(SetUTCFullYear(PST_FEB_29_1972,2000)) );
88/*
89    // Dates around 2005
90
91    addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(2005);TDATE",
92                    UTCDateFromTime(SetUTCFullYear(0,2005)),
93                    LocalDateFromTime(SetUTCFullYear(0,2005)) );
94
95    addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(2004);TDATE",
96                    UTCDateFromTime(SetUTCFullYear(0,2004)),
97                    LocalDateFromTime(SetUTCFullYear(0,2004)) );
98
99    addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(2006);TDATE",
100                    UTCDateFromTime(SetUTCFullYear(0,2006)),
101                    LocalDateFromTime(SetUTCFullYear(0,2006)) );
102
103
104    // Dates around 1900
105    addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(1900);TDATE",
106                    UTCDateFromTime(SetUTCFullYear(0,1900)),
107                    LocalDateFromTime(SetUTCFullYear(0,1900)) );
108
109    addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(1899);TDATE",
110                    UTCDateFromTime(SetUTCFullYear(0,1899)),
111                    LocalDateFromTime(SetUTCFullYear(0,1899)) );
112
113    addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(1901);TDATE",
114                    UTCDateFromTime(SetUTCFullYear(0,1901)),
115                    LocalDateFromTime(SetUTCFullYear(0,1901)) );
116
117*/
118}
119function addNewTestCase( DateString, UTCDate, LocalDate) {
120    DateCase = eval( DateString );
121
122    var item = testcases.length;
123
124//    fixed_year = ( ExpectDate.year >=1900 || ExpectDate.year < 2000 ) ? ExpectDate.year - 1900 : ExpectDate.year;
125
126    testcases[item++] = new TestCase( SECTION, DateString+".getTime()",             UTCDate.value,       DateCase.getTime() );
127    testcases[item++] = new TestCase( SECTION, DateString+".valueOf()",             UTCDate.value,       DateCase.valueOf() );
128
129    testcases[item++] = new TestCase( SECTION, DateString+".getUTCFullYear()",      UTCDate.year,    DateCase.getUTCFullYear() );
130    testcases[item++] = new TestCase( SECTION, DateString+".getUTCMonth()",         UTCDate.month,  DateCase.getUTCMonth() );
131    testcases[item++] = new TestCase( SECTION, DateString+".getUTCDate()",          UTCDate.date,   DateCase.getUTCDate() );
132    testcases[item++] = new TestCase( SECTION, DateString+".getUTCDay()",           UTCDate.day,    DateCase.getUTCDay() );
133    testcases[item++] = new TestCase( SECTION, DateString+".getUTCHours()",         UTCDate.hours,  DateCase.getUTCHours() );
134    testcases[item++] = new TestCase( SECTION, DateString+".getUTCMinutes()",       UTCDate.minutes,DateCase.getUTCMinutes() );
135    testcases[item++] = new TestCase( SECTION, DateString+".getUTCSeconds()",       UTCDate.seconds,DateCase.getUTCSeconds() );
136    testcases[item++] = new TestCase( SECTION, DateString+".getUTCMilliseconds()",  UTCDate.ms,     DateCase.getUTCMilliseconds() );
137
138    testcases[item++] = new TestCase( SECTION, DateString+".getFullYear()",         LocalDate.year,       DateCase.getFullYear() );
139    testcases[item++] = new TestCase( SECTION, DateString+".getMonth()",            LocalDate.month,      DateCase.getMonth() );
140    testcases[item++] = new TestCase( SECTION, DateString+".getDate()",             LocalDate.date,       DateCase.getDate() );
141    testcases[item++] = new TestCase( SECTION, DateString+".getDay()",              LocalDate.day,        DateCase.getDay() );
142    testcases[item++] = new TestCase( SECTION, DateString+".getHours()",            LocalDate.hours,      DateCase.getHours() );
143    testcases[item++] = new TestCase( SECTION, DateString+".getMinutes()",          LocalDate.minutes,    DateCase.getMinutes() );
144    testcases[item++] = new TestCase( SECTION, DateString+".getSeconds()",          LocalDate.seconds,    DateCase.getSeconds() );
145    testcases[item++] = new TestCase( SECTION, DateString+".getMilliseconds()",     LocalDate.ms,         DateCase.getMilliseconds() );
146
147    DateCase.toString = Object.prototype.toString;
148
149    testcases[item++] = new TestCase( SECTION,
150                                      DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
151                                      "[object Date]",
152                                      DateCase.toString() );
153}
154
155function MyDate() {
156    this.year = 0;
157    this.month = 0;
158    this.date = 0;
159    this.hours = 0;
160    this.minutes = 0;
161    this.seconds = 0;
162    this.ms = 0;
163}
164function LocalDateFromTime(t) {
165    t = LocalTime(t);
166    return ( MyDateFromTime(t) );
167}
168function UTCDateFromTime(t) {
169 return ( MyDateFromTime(t) );
170}
171function MyDateFromTime( t ) {
172    var d = new MyDate();
173    d.year = YearFromTime(t);
174    d.month = MonthFromTime(t);
175    d.date = DateFromTime(t);
176    d.hours = HourFromTime(t);
177    d.minutes = MinFromTime(t);
178    d.seconds = SecFromTime(t);
179    d.ms = msFromTime(t);
180
181    d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
182    d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
183    d.day = WeekDay( d.value );
184
185    return (d);
186}
187function SetUTCFullYear( t, year, mon, date ) {
188    var T = ( t != t ) ? 0 : t;
189    var YEAR = Number(year);
190    var MONTH = ( mon == void 0 ) ?     MonthFromTime(T) : Number( mon );
191    var DATE  = ( date == void 0 ) ?    DateFromTime(T)  : Number( date );
192    var DAY = MakeDay( YEAR, MONTH, DATE );
193
194    return ( TimeClip(MakeDate(DAY, TimeWithinDay(T))) );
195}
196