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 */ 22var completed = false; 23var testcases; 24 25var SECTION = ""; 26var VERSION = ""; 27var BUGNUMBER = ""; 28 29var GLOBAL = "[object global]"; 30var PASSED = " PASSED!" 31var FAILED = " FAILED! expected: "; 32 33startTest(); 34 35 version(120); 36 37function test() { 38 for ( tc=0; tc < testcases.length; tc++ ) { 39 testcases[tc].passed = writeTestCaseResult( 40 testcases[tc].expect, 41 testcases[tc].actual, 42 testcases[tc].description +" = "+ 43 testcases[tc].actual ); 44 45 testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value "; 46 } 47 stopTest(); 48 return ( testcases ); 49} 50/* wrapper for test cas constructor that doesn't require the SECTION 51 * argument. 52 */ 53 54function AddTestCase( description, expect, actual ) { 55 testcases[tc++] = new TestCase( SECTION, description, expect, actual ); 56} 57 58 59function 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 67 this.passed = getTestCaseResult( this.expect, this.actual ); 68} 69function startTest() { 70 version(120); 71 72 if ( BUGNUMBER ) { 73 writeLineToLog ("BUGNUMBER: " + BUGNUMBER ); 74 } 75 76 testcases = new Array(); 77 tc = 0; 78} 79function getTestCaseResult( expect, actual ) { 80 // because ( NaN == NaN ) always returns false, need to do 81 // a special compare to see if we got the right result. 82 if ( actual != actual ) { 83 if ( typeof actual == "object" ) { 84 actual = "NaN object"; 85 } else { 86 actual = "NaN number"; 87 } 88 } 89 if ( expect != expect ) { 90 if ( typeof expect == "object" ) { 91 expect = "NaN object"; 92 } else { 93 expect = "NaN number"; 94 } 95 } 96 97 var passed = ( expect == actual ) ? true : false; 98 99 // if both objects are numbers, give a little leeway for rounding. 100 if ( !passed 101 && typeof(actual) == "number" 102 && typeof(expect) == "number" 103 ) { 104 if ( Math.abs(actual-expect) < 0.0000001 ) { 105 passed = true; 106 } 107 } 108 109 // verify type is the same 110 if ( typeof(expect) != typeof(actual) ) { 111 passed = false; 112 } 113 114 return passed; 115} 116/* 117 * Begin printing functions. These functions use the shell's 118 * print function. When running tests in the browser, these 119 * functions, override these functions with functions that use 120 * document.write. 121 */ 122 123function writeTestCaseResult( expect, actual, string ) { 124 var passed = getTestCaseResult( expect, actual ); 125 writeFormattedResult( expect, actual, string, passed ); 126 return passed; 127} 128function writeFormattedResult( expect, actual, string, passed ) { 129 var s = string ; 130 s += ( passed ) ? PASSED : FAILED + expect; 131 writeLineToLog( s); 132 return passed; 133} 134function writeLineToLog( string ) { 135 print( string ); 136} 137function writeHeaderToLog( string ) { 138 print( string ); 139} 140/* end of print functions */ 141 142function stopTest() { 143 var gc; 144 if ( gc != undefined ) { 145 gc(); 146 } 147} 148