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 }