Home | History | Annotate | Download | only in Date
      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 (at) 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-2";
     50     var VERSION = "ECMA_1";
     51     startTest();
     52 
     53     writeHeaderToLog( SECTION + " Date.prototype.setFullYear(year [, mon [, date ]] )");
     54 
     55     getTestCases();
     56     test();
     57 
     58 function 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 }
     71 function getTestCases() {
     72     // 1970
     73 
     74     addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1970);TDATE",
     75                     UTCDateFromTime(SetFullYear(0,1970)),
     76                     LocalDateFromTime(SetFullYear(0,1970)) );
     77 
     78     addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1970,0);TDATE",
     79                     UTCDateFromTime(SetFullYear(0,1970,0)),
     80                     LocalDateFromTime(SetFullYear(0,1970,0)) );
     81 
     82     addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1970,0,1);TDATE",
     83                     UTCDateFromTime(SetFullYear(0,1970,0,1)),
     84                     LocalDateFromTime(SetFullYear(0,1970,0,1)) );
     85 /*
     86     // 1971
     87     addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1971);TDATE",
     88                     UTCDateFromTime(SetFullYear(0,1971)),
     89                     LocalDateFromTime(SetFullYear(0,1971)) );
     90 
     91     addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1971,0);TDATE",
     92                     UTCDateFromTime(SetFullYear(0,1971,0)),
     93                     LocalDateFromTime(SetFullYear(0,1971,0)) );
     94 
     95     addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1971,0,1);TDATE",
     96                     UTCDateFromTime(SetFullYear(0,1971,0,1)),
     97                     LocalDateFromTime(SetFullYear(0,1971,0,1)) );
     98 
     99     // 1999
    100     addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1999);TDATE",
    101                     UTCDateFromTime(SetFullYear(0,1999)),
    102                     LocalDateFromTime(SetFullYear(0,1999)) );
    103 
    104     addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1999,11);TDATE",
    105                     UTCDateFromTime(SetFullYear(0,1999,11)),
    106                     LocalDateFromTime(SetFullYear(0,1999,11)) );
    107 
    108     addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1999,11,31);TDATE",
    109                     UTCDateFromTime(SetFullYear(0,1999,11,31)),
    110                     LocalDateFromTime(SetFullYear(0,1999,11,31)) );
    111 
    112     // 2000
    113     addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2000);TDATE",
    114                     UTCDateFromTime(SetFullYear(0,2000)),
    115                     LocalDateFromTime(SetFullYear(0,2000)) );
    116 
    117     addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2000,0);TDATE",
    118                     UTCDateFromTime(SetFullYear(0,2000,0)),
    119                     LocalDateFromTime(SetFullYear(0,2000,0)) );
    120 
    121     addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2000,0,1);TDATE",
    122                     UTCDateFromTime(SetFullYear(0,2000,0,1)),
    123                     LocalDateFromTime(SetFullYear(0,2000,0,1)) );
    124 
    125     // feb 29, 2000
    126     addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2000);TDATE",
    127                     UTCDateFromTime(SetFullYear(0,2000)),
    128                     LocalDateFromTime(SetFullYear(0,2000)) );
    129 
    130     addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2000,1);TDATE",
    131                     UTCDateFromTime(SetFullYear(0,2000,1)),
    132                     LocalDateFromTime(SetFullYear(0,2000,1)) );
    133 
    134     addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2000,1,29);TDATE",
    135                     UTCDateFromTime(SetFullYear(0,2000,1,29)),
    136                     LocalDateFromTime(SetFullYear(0,2000,1,29)) );
    137 
    138     // Jan 1, 2005
    139     addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2005);TDATE",
    140                     UTCDateFromTime(SetFullYear(0,2005)),
    141                     LocalDateFromTime(SetFullYear(0,2005)) );
    142 
    143     addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2005,0);TDATE",
    144                     UTCDateFromTime(SetFullYear(0,2005,0)),
    145                     LocalDateFromTime(SetFullYear(0,2005,0)) );
    146 
    147     addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2005,0,1);TDATE",
    148                     UTCDateFromTime(SetFullYear(0,2005,0,1)),
    149                     LocalDateFromTime(SetFullYear(0,2005,0,1)) );
    150 
    151 */
    152 }
    153 function addNewTestCase( DateString, UTCDate, LocalDate) {
    154     DateCase = eval( DateString );
    155 
    156     var item = testcases.length;
    157 
    158 //    fixed_year = ( ExpectDate.year >=1900 || ExpectDate.year < 2000 ) ? ExpectDate.year - 1900 : ExpectDate.year;
    159 
    160     testcases[item++] = new TestCase( SECTION, DateString+".getTime()",             UTCDate.value,       DateCase.getTime() );
    161     testcases[item++] = new TestCase( SECTION, DateString+".valueOf()",             UTCDate.value,       DateCase.valueOf() );
    162 
    163     testcases[item++] = new TestCase( SECTION, DateString+".getUTCFullYear()",      UTCDate.year,    DateCase.getUTCFullYear() );
    164     testcases[item++] = new TestCase( SECTION, DateString+".getUTCMonth()",         UTCDate.month,  DateCase.getUTCMonth() );
    165     testcases[item++] = new TestCase( SECTION, DateString+".getUTCDate()",          UTCDate.date,   DateCase.getUTCDate() );
    166     testcases[item++] = new TestCase( SECTION, DateString+".getUTCDay()",           UTCDate.day,    DateCase.getUTCDay() );
    167     testcases[item++] = new TestCase( SECTION, DateString+".getUTCHours()",         UTCDate.hours,  DateCase.getUTCHours() );
    168     testcases[item++] = new TestCase( SECTION, DateString+".getUTCMinutes()",       UTCDate.minutes,DateCase.getUTCMinutes() );
    169     testcases[item++] = new TestCase( SECTION, DateString+".getUTCSeconds()",       UTCDate.seconds,DateCase.getUTCSeconds() );
    170     testcases[item++] = new TestCase( SECTION, DateString+".getUTCMilliseconds()",  UTCDate.ms,     DateCase.getUTCMilliseconds() );
    171 
    172     testcases[item++] = new TestCase( SECTION, DateString+".getFullYear()",         LocalDate.year,       DateCase.getFullYear() );
    173     testcases[item++] = new TestCase( SECTION, DateString+".getMonth()",            LocalDate.month,      DateCase.getMonth() );
    174     testcases[item++] = new TestCase( SECTION, DateString+".getDate()",             LocalDate.date,       DateCase.getDate() );
    175     testcases[item++] = new TestCase( SECTION, DateString+".getDay()",              LocalDate.day,        DateCase.getDay() );
    176     testcases[item++] = new TestCase( SECTION, DateString+".getHours()",            LocalDate.hours,      DateCase.getHours() );
    177     testcases[item++] = new TestCase( SECTION, DateString+".getMinutes()",          LocalDate.minutes,    DateCase.getMinutes() );
    178     testcases[item++] = new TestCase( SECTION, DateString+".getSeconds()",          LocalDate.seconds,    DateCase.getSeconds() );
    179     testcases[item++] = new TestCase( SECTION, DateString+".getMilliseconds()",     LocalDate.ms,         DateCase.getMilliseconds() );
    180 
    181     DateCase.toString = Object.prototype.toString;
    182 
    183     testcases[item++] = new TestCase( SECTION,
    184                                       DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
    185                                       "[object Date]",
    186                                       DateCase.toString() );
    187 }
    188 
    189 function MyDate() {
    190     this.year = 0;
    191     this.month = 0;
    192     this.date = 0;
    193     this.hours = 0;
    194     this.minutes = 0;
    195     this.seconds = 0;
    196     this.ms = 0;
    197 }
    198 function LocalDateFromTime(t) {
    199     t = LocalTime(t);
    200     return ( MyDateFromTime(t) );
    201 }
    202 function UTCDateFromTime(t) {
    203  return ( MyDateFromTime(t) );
    204 }
    205 function MyDateFromTime( t ) {
    206     var d = new MyDate();
    207     d.year = YearFromTime(t);
    208     d.month = MonthFromTime(t);
    209     d.date = DateFromTime(t);
    210     d.hours = HourFromTime(t);
    211     d.minutes = MinFromTime(t);
    212     d.seconds = SecFromTime(t);
    213     d.ms = msFromTime(t);
    214 
    215     d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
    216     d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
    217     d.day = WeekDay( d.value );
    218 
    219     return (d);
    220 }
    221 function SetFullYear( t, year, mon, date ) {
    222     var T = ( isNaN(t) ) ? 0 : LocalTime(t) ;
    223     var YEAR = Number( year );
    224     var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon );
    225     var DATE = ( date == void 0 ) ? DateFromTime(T)  : Number( date );
    226 
    227     var DAY = MakeDay( YEAR, MONTH, DATE );
    228     var UTC_DATE = UTC(MakeDate( DAY, TimeWithinDay(T)));
    229 
    230     return ( TimeClip(UTC_DATE) );
    231 }