18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* The contents of this file are subject to the Netscape Public
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License Version 1.1 (the "License"); you may not use this file
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * except in compliance with the License. You may obtain a copy of
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the License at http://www.mozilla.org/NPL/
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Software distributed under the License is distributed on an "AS
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * implied. See the License for the specific language governing
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * rights and limitations under the License.
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The Original Code is Mozilla Communicator client code, released March
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 31, 1998.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The Initial Developer of the Original Code is Netscape Communications
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Corporation. Portions created by Netscape are
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 1998 Netscape Communications Corporation. All
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Rights Reserved.
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Contributor(s):
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar completed = false;
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar testcases;
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar SECTION	= "";
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar VERSION	= "";
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar BUGNUMBER =	"";
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar	GLOBAL = "[object global]";
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar PASSED = " PASSED!"
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar FAILED = " FAILED! expected: ";
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectstartTest();
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    version(120);
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction test() {
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for ( tc=0; tc < testcases.length; tc++ ) {
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        testcases[tc].passed = writeTestCaseResult(
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                            testcases[tc].expect,
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                            testcases[tc].actual,
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                            testcases[tc].description +" = "+
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                            testcases[tc].actual );
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    stopTest();
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return ( testcases );
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* wrapper for test cas constructor that doesn't require the SECTION
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * argument.
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction AddTestCase( description, expect, actual ) {
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    testcases[tc++] = new TestCase( SECTION, description, expect, actual );
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction TestCase( n, d, e, a ) {
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.name        = n;
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.description = d;
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.expect      = e;
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.actual      = a;
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.passed      = true;
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.reason      = "";
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.passed = getTestCaseResult( this.expect, this.actual );
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction startTest() {
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    version(120);
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if ( BUGNUMBER ) {
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        writeLineToLog ("BUGNUMBER: " + BUGNUMBER );
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    testcases = new Array();
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    tc = 0;
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction getTestCaseResult( expect, actual ) {
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //  because ( NaN == NaN ) always returns false, need to do
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //  a special compare to see if we got the right result.
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if ( actual != actual ) {
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if ( typeof actual == "object" ) {
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                actual = "NaN object";
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            } else {
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                actual = "NaN number";
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            }
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if ( expect != expect ) {
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if ( typeof expect == "object" ) {
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                expect = "NaN object";
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            } else {
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                expect = "NaN number";
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            }
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        var passed = ( expect == actual ) ? true : false;
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //  if both objects are numbers, give a little leeway for rounding.
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (    !passed
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                && typeof(actual) == "number"
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                && typeof(expect) == "number"
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ) {
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                if ( Math.abs(actual-expect) < 0.0000001 ) {
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                    passed = true;
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                }
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //  verify type is the same
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if ( typeof(expect) != typeof(actual) ) {
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            passed = false;
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return passed;
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Begin printing functions.  These functions use the shell's
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * print function.  When running tests in the browser, these
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * functions, override these functions with functions that use
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * document.write.
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction writeTestCaseResult( expect, actual, string ) {
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project		var	passed = getTestCaseResult(	expect,	actual );
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project		writeFormattedResult( expect, actual, string, passed );
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project		return passed;
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction writeFormattedResult( expect, actual, string, passed ) {
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        var s = string ;
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        s += ( passed ) ? PASSED : FAILED + expect;
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        writeLineToLog( s);
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return passed;
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction writeLineToLog( string	) {
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	print( string );
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction writeHeaderToLog( string )	{
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	print( string );
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* end of print functions */
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction stopTest() {
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   var gc;
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   if ( gc != undefined ) {
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        gc();
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   }
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
148