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