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