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