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