initial import
[vuplus_webkit] / Source / JavaScriptCore / tests / mozilla / ecma_2 / shell.js
1 /*
2 * The contents of this file are subject to the Netscape Public
3 * License Version 1.1 (the "License"); you may not use this file
4 * except in compliance with the License. You may obtain a copy of
5 * the License at http://www.mozilla.org/NPL/
6 *
7 * Software distributed under the License is distributed on an "AS
8 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
9 * implied. See the License for the specific language governing
10 * rights and limitations under the License.
11 *
12 * The Original Code is mozilla.org code.
13 *
14 * The Initial Developer of the Original Code is Netscape
15 * Communications 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 /*
24  * JavaScript shared functions file for running the tests in either
25  * stand-alone JavaScript engine.  To run a test, first load this file,
26  * then load the test script.
27  */
28
29 var completed = false;
30 var testcases;
31 var tc = 0;
32
33 SECTION = "";
34 VERSION = "";
35 BUGNUMBER="";
36
37 var TZ_DIFF = getTimeZoneDiff();
38
39 var DEBUG = false;
40
41 var     GLOBAL = "[object global]";
42 var PASSED = " PASSED!"
43 var FAILED = " FAILED! expected: ";
44
45 function test() {
46     for ( tc=0; tc < testcases.length; tc++ ) {
47         testcases[tc].passed = writeTestCaseResult(
48                             testcases[tc].expect,
49                             testcases[tc].actual,
50                             testcases[tc].description +" = "+
51                             testcases[tc].actual );
52
53         testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
54     }
55     stopTest();
56     return ( testcases );
57 }
58
59 function TestCase( n, d, e, a ) {
60     this.name        = n;
61     this.description = d;
62     this.expect      = e;
63     this.actual      = a;
64     this.passed      = true;
65     this.reason      = "";
66     this.bugnumber   = BUGNUMBER;
67
68     this.passed = getTestCaseResult( this.expect, this.actual );
69     if ( DEBUG ) {
70         writeLineToLog( "added " + this.description );
71     }
72 }
73 function startTest() {
74     if ( version ) {
75         //  JavaScript 1.3 is supposed to be compliant ecma version 1.0
76         if ( VERSION == "ECMA_1" ) {
77             version ( 130 );
78         }
79         if ( VERSION == "JS_13" ) {
80             version ( 130 );
81         }
82         if ( VERSION == "JS_12" ) {
83             version ( 120 );
84         }
85         if ( VERSION  == "JS_11" ) {
86             version ( 110 );
87         }
88     }
89
90
91     // for ecma version 2.0, we will leave the javascript version to
92     // the default ( for now ).
93
94     writeHeaderToLog( SECTION + " "+ TITLE);
95     if ( BUGNUMBER ) {
96         writeLineToLog ("BUGNUMBER: " + BUGNUMBER );
97     }
98
99     testcases = new Array();
100     tc = 0;
101 }
102
103 function getTestCaseResult( expect, actual ) {
104     //  because ( NaN == NaN ) always returns false, need to do
105     //  a special compare to see if we got the right result.
106         if ( actual != actual ) {
107             if ( typeof actual == "object" ) {
108                 actual = "NaN object";
109             } else {
110                 actual = "NaN number";
111             }
112         }
113         if ( expect != expect ) {
114             if ( typeof expect == "object" ) {
115                 expect = "NaN object";
116             } else {
117                 expect = "NaN number";
118             }
119         }
120
121         var passed = ( expect == actual ) ? true : false;
122
123     //  if both objects are numbers
124     // need to replace w/ IEEE standard for rounding
125         if (    !passed
126                 && typeof(actual) == "number"
127                 && typeof(expect) == "number"
128             ) {
129                 if ( Math.abs(actual-expect) < 0.0000001 ) {
130                     passed = true;
131                 }
132         }
133
134     //  verify type is the same
135         if ( typeof(expect) != typeof(actual) ) {
136             passed = false;
137         }
138
139         return passed;
140 }
141
142 function writeTestCaseResult( expect, actual, string ) {
143         var passed = getTestCaseResult( expect, actual );
144         writeFormattedResult( expect, actual, string, passed );
145         return passed;
146 }
147
148 function writeFormattedResult( expect, actual, string, passed ) {
149         var s = string ;
150         s += ( passed ) ? PASSED : FAILED + expect;
151         writeLineToLog( s);
152         return passed;
153 }
154
155 function writeLineToLog( string ) {
156     print( string  );
157 }
158 function writeHeaderToLog( string ) {
159     print( string );
160 }
161 function stopTest() {
162     var gc;
163     if ( gc != undefined ) {
164         gc();
165     }
166 }
167 function getFailedCases() {
168   for ( var i = 0; i < testcases.length; i++ ) {
169      if ( ! testcases[i].passed ) {
170         print( testcases[i].description +" = " +testcases[i].actual +" expected: "+ testcases[i].expect );
171      }
172   }
173 }
174 function err( msg, page, line ) {
175     writeLineToLog( page + " failed with error: " + msg + " on line " + line );
176     testcases[tc].actual = "error";
177     testcases[tc].reason = msg;
178     writeTestCaseResult( testcases[tc].expect,
179                          testcases[tc].actual,
180                          testcases[tc].description +" = "+ testcases[tc].actual +
181                          ": " + testcases[tc].reason );
182     stopTest();
183     return true;
184 }
185
186 function Enumerate ( o ) {
187     var properties = new Array();
188     for ( p in o ) {
189        properties[ properties.length ] = new Array( p, o[p] );
190     }
191     return properties;
192 }
193
194 function getFailedCases() {
195   for ( var     i =     0; i < testcases.length; i++ ) {
196          if     ( !     testcases[i].passed     ) {
197                 writeLineToLog( testcases[i].description        +" = " +testcases[i].actual     +
198                     " expected: "+      testcases[i].expect     );
199          }
200   }
201 }
202 function AddTestCase( description, expect, actual ) {
203     testcases[tc++] = new TestCase( SECTION, description, expect, actual );
204 }
205
206
207 /*
208  * Originally, the test suite used a hard-coded value TZ_DIFF = -8. 
209  * But that was only valid for testers in the Pacific Standard Time Zone! 
210  * We calculate the proper number dynamically for any tester. We just
211  * have to be careful to use a date not subject to Daylight Savings Time...
212 */
213 function getTimeZoneDiff()
214 {
215   return -((new Date(2000, 1, 1)).getTimezoneOffset())/60;
216 }