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.3.1.js
     24     ECMA Section:       15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms)
     25     Description:        The [[Prototype]] property of the newly constructed
     26                         object is set to the original Date prototype object,
     27                         the one that is the initial value of Date.prototype.
     28 
     29                         The [[Class]] property of the newly constructed object
     30                         is set as follows:
     31                         1. Call ToNumber(year)
     32                         2. Call ToNumber(month)
     33                         3. Call ToNumber(date)
     34                         4. Call ToNumber(hours)
     35                         5. Call ToNumber(minutes)
     36                         6. Call ToNumber(seconds)
     37                         7. Call ToNumber(ms)
     38                         8.  If Result(1)is NaN and 0 <= ToInteger(Result(1)) <=
     39                             99, Result(8) is 1900+ToInteger(Result(1)); otherwise,
     40                             Result(8) is Result(1)
     41                         9.  Compute MakeDay(Result(8), Result(2), Result(3)
     42                         10. Compute MakeTime(Result(4), Result(5), Result(6),
     43                             Result(7)
     44                         11. Compute MakeDate(Result(9), Result(10))
     45                         12. Set the [[Value]] property of the newly constructed
     46                             object to TimeClip(UTC(Result(11))).
     47 
     48 
     49                         This tests the returned value of a newly constructed
     50                         Date object.
     51 
     52     Author:             christine (at) netscape.com
     53     Date:               7 july 1997
     54 */
     55 
     56     var TIME        = 0;
     57     var UTC_YEAR    = 1;
     58     var UTC_MONTH   = 2;
     59     var UTC_DATE    = 3;
     60     var UTC_DAY     = 4;
     61     var UTC_HOURS   = 5;
     62     var UTC_MINUTES = 6;
     63     var UTC_SECONDS = 7;
     64     var UTC_MS      = 8;
     65 
     66     var YEAR        = 9;
     67     var MONTH       = 10;
     68     var DATE        = 11;
     69     var DAY         = 12;
     70     var HOURS       = 13;
     71     var MINUTES     = 14;
     72     var SECONDS     = 15;
     73     var MS          = 16;
     74 
     75 //  for TCMS, the testcases array must be global.
     76     var SECTION = "15.9.3.1";
     77     var TITLE =   "Date( year, month, date, hours, minutes, seconds )";
     78 
     79     writeHeaderToLog( SECTION+" " +TITLE );
     80 
     81     var testcases = new Array();
     82     getTestCases();
     83 
     84 //  all tests must call a function that returns an array of TestCase object
     85     test();
     86 
     87 function getTestCases( ) {
     88 
     89     // Dates around 1970
     90 
     91     addNewTestCase( new Date( 1969,11,31,15,59,59),
     92                     "new Date( 1969,11,31,15,59,59)",
     93                     [-1000,1969,11,31,3,23,59,59,0,1969,11,31,3,15,59,59,0] );
     94 
     95     addNewTestCase( new Date( 1969,11,31,16,0,0),
     96                     "new Date( 1969,11,31,16,0,0)",
     97                     [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] );
     98 
     99     addNewTestCase( new Date( 1969,11,31,23,59,59),
    100                     "new Date( 1969,11,31,23,59,59)",
    101                     [28799000,1970,0,1,4,7,59,59,0,1969,11,31,3,23,59,59,0] );
    102 
    103     addNewTestCase( new Date( 1970, 0, 1, 0, 0, 0),
    104                     "new Date( 1970, 0, 1, 0, 0, 0)",
    105                     [28800000,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] );
    106 
    107     addNewTestCase( new Date( 1969,11,31,16,0,0),
    108                     "new Date( 1969,11,31,16,0,0)",
    109                     [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] );
    110 /*
    111     // Dates around 2000
    112 
    113     addNewTestCase( new Date( 1999,11,31,15,59,59),
    114                     "new Date( 1999,11,31,15,59,59)",
    115                     [946684799000,1999,11,31,5,23,59,59,0,1999,11,31,5,15,59,59,0] );
    116 
    117     addNewTestCase( new Date( 1999,11,31,16,0,0),
    118                     "new Date( 1999,11,31,16,0,0)",
    119                     [946684800000,2000,0,1,6,0,0,0,0,1999,11,31,5, 16,0,0,0] );
    120 
    121     addNewTestCase( new Date( 2000,0,1,0,0,0),
    122                     "new Date( 2000,0,1,0,0,0)",
    123                     [946713600000,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] );
    124 
    125     // Dates around 1900
    126 
    127     addNewTestCase( new Date(1899,11,31,16,0,0),
    128                     "new Date(1899,11,31,16,0,0)",
    129                     [-2208988800000,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] );
    130 
    131     addNewTestCase( new Date(1899,11,31,15,59,59),
    132                     "new Date(1899,11,31,15,59,59)",
    133                     [-2208988801000,1899,11,31,0,23,59,59,0,1899,11,31,0,15,59,59,0] );
    134 
    135     addNewTestCase( new Date(1900,0,1,0,0,0),
    136                     "new Date(1900,0,1,0,0,0)",
    137                     [-2208960000000,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] );
    138 
    139     addNewTestCase( new Date(1900,0,1,0,0,1),
    140                     "new Date(1900,0,1,0,0,1)",
    141                     [-2208959999000,1900,0,1,1,8,0,1,0,1900,0,1,1,0,0,1,0] );
    142 
    143     var UTC_FEB_29_2000 = TIME_2000 + msPerDay*31 + msPerDay*28;
    144     var PST_FEB_29_2000 = UTC_FEB_29_2000 + 8*msPerHour;
    145 
    146     // Dates around Feb 29, 2000
    147     addNewTestCase( new Date(2000,1,28,16,0,0,0),
    148                     "new Date(2000,1,28,16,0,0,0)",
    149                     [UTC_FEB_29_2000,2000,1,29,2,0,0,0,0,2000,1,28,1,16,0,0,0,0] );
    150 
    151     addNewTestCase( new Date(2000,1,29,0,0,0,0),
    152                     "new Date(2000,1,29,0,0,0,0)",
    153                     [PST_FEB_29_2000,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] );
    154 
    155     addNewTestCase( new Date(2000,1,29,24,0,0,0),
    156                     "new Date(2000,1,29,24,0,0,0)",
    157                     [PST_FEB_29_2000+msPerDay,2000,2,1,3,8,0,0,0,2000,2,1,3,0,0,0,0] );
    158 
    159     // Dates around Jan 1, 2005
    160 
    161     var UTC_JAN_1_2005 = TIME_2000 + TimeInYear(2000) + TimeInYear(2001) +
    162     TimeInYear(2002)+ TimeInYear(2003) + TimeInYear(2004);
    163     var PST_JAN_1_2005 = UTC_JAN_1_2005 + 8*msPerHour;
    164 
    165     addNewTestCase( new Date(2005,0,1,0,0,0,0),
    166                     "new Date(2005,0,1,0,0,0,0)",
    167                     [PST_JAN_1_2005,2005,0,1,6,8,0,0,0,2005,0,1,6,0,0,0,0] );
    168 
    169     addNewTestCase( new Date(2004,11,31,16,0,0,0),
    170                     "new Date(2004,11,31,16,0,0,0)",
    171                     [UTC_JAN_1_2005,2005,0,1,6,0,0,0,0,2004,11,31,5,16,0,0,0] );
    172 */
    173 /*
    174    This test case is incorrect.  Need to fix the DaylightSavings functions in
    175    shell.js for this to work properly.
    176 
    177     // Daylight Savings Time
    178 
    179     var DST_START_1998 = UTC( GetSecondSundayInMarch(TimeFromYear(1998)) + 2*msPerHour )
    180 
    181     addNewTestCase( new Date(1998,3,5,1,59,59,999),
    182                     "new Date(1998,3,5,1,59,59,999)",
    183                     [DST_START_1998-1,1998,3,5,0,9,59,59,999,1998,3,5,0,1,59,59,999] );
    184 
    185     addNewTestCase( new Date(1998,3,5,2,0,0,0),
    186                     "new Date(1998,3,5,2,0,0,0)",
    187                     [DST_START_1998,1998,3,5,0,10,0,0,0,1998,3,5,0,3,0,0,0]);
    188 
    189     var DST_END_1998 = UTC( GetFirstSundayInNovember(TimeFromYear(1998)) + 2*msPerHour );
    190 
    191     addNewTestCase ( new Date(1998,9,25,1,59,59,999),
    192                     "new Date(1998,9,25,1,59,59,999)",
    193                     [DST_END_1998-1,1998,9,25,0,8,59,59,999,1998,9,25,0,1,59,59,999] );
    194 
    195     addNewTestCase ( new Date(1998,9,25,2,0,0,0),
    196                     "new Date(1998,9,25,2,0,0,0)",
    197                     [DST_END_1998,1998,9,25,0,9,0,0,0,1998,9,25,0,1,0,0,0] );
    198 */
    199 }
    200 
    201 function addNewTestCase( DateCase, DateString, ResultArray ) {
    202     //adjust hard-coded ResultArray for tester's timezone instead of PST
    203     adjustResultArray(ResultArray);
    204 
    205     item = testcases.length;
    206 
    207     testcases[item++] = new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME],       DateCase.getTime() );
    208     testcases[item++] = new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME],       DateCase.valueOf() );
    209 
    210     testcases[item++] = new TestCase( SECTION, DateString+".getUTCFullYear()",      ResultArray[UTC_YEAR],   DateCase.getUTCFullYear() );
    211     testcases[item++] = new TestCase( SECTION, DateString+".getUTCMonth()",         ResultArray[UTC_MONTH],  DateCase.getUTCMonth() );
    212     testcases[item++] = new TestCase( SECTION, DateString+".getUTCDate()",          ResultArray[UTC_DATE],   DateCase.getUTCDate() );
    213     testcases[item++] = new TestCase( SECTION, DateString+".getUTCDay()",           ResultArray[UTC_DAY],    DateCase.getUTCDay() );
    214     testcases[item++] = new TestCase( SECTION, DateString+".getUTCHours()",         ResultArray[UTC_HOURS],  DateCase.getUTCHours() );
    215     testcases[item++] = new TestCase( SECTION, DateString+".getUTCMinutes()",       ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() );
    216     testcases[item++] = new TestCase( SECTION, DateString+".getUTCSeconds()",       ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() );
    217     testcases[item++] = new TestCase( SECTION, DateString+".getUTCMilliseconds()",  ResultArray[UTC_MS],     DateCase.getUTCMilliseconds() );
    218 
    219     testcases[item++] = new TestCase( SECTION, DateString+".getFullYear()",         ResultArray[YEAR],       DateCase.getFullYear() );
    220     testcases[item++] = new TestCase( SECTION, DateString+".getMonth()",            ResultArray[MONTH],      DateCase.getMonth() );
    221     testcases[item++] = new TestCase( SECTION, DateString+".getDate()",             ResultArray[DATE],       DateCase.getDate() );
    222     testcases[item++] = new TestCase( SECTION, DateString+".getDay()",              ResultArray[DAY],        DateCase.getDay() );
    223     testcases[item++] = new TestCase( SECTION, DateString+".getHours()",            ResultArray[HOURS],      DateCase.getHours() );
    224     testcases[item++] = new TestCase( SECTION, DateString+".getMinutes()",          ResultArray[MINUTES],    DateCase.getMinutes() );
    225     testcases[item++] = new TestCase( SECTION, DateString+".getSeconds()",          ResultArray[SECONDS],    DateCase.getSeconds() );
    226     testcases[item++] = new TestCase( SECTION, DateString+".getMilliseconds()",     ResultArray[MS],         DateCase.getMilliseconds() );
    227 
    228 }
    229 
    230 function test() {
    231     for( tc=0; tc < testcases.length; tc++ ) {
    232         testcases[tc].passed = writeTestCaseResult(
    233                                 testcases[tc].expect,
    234                                 testcases[tc].actual,
    235                                 testcases[tc].description +" = " +
    236                                 testcases[tc].actual );
    237     }
    238     stopTest();
    239     return testcases;
    240 }
    241 
    242