18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar completed = false; 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar testcases; 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar tc = 0; 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectSECTION = ""; 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectVERSION = ""; 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectBUGNUMBER = ""; 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar GLOBAL = "[object global]"; 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar PASSED = " PASSED!" 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar FAILED = " FAILED! expected: "; 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction test() { 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for ( tc=0; tc < testcases.length; tc++ ) { 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].passed = writeTestCaseResult( 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].expect, 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].actual, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].description +" = "+ 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].actual ); 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value "; 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project stopTest(); 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return ( testcases ); 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* wrapper for test cas constructor that doesn't require the SECTION 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * argument. 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction AddTestCase( description, expect, actual ) { 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc++] = new TestCase( SECTION, description, expect, actual ); 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction TestCase( n, d, e, a ) { 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.name = n; 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.description = d; 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.expect = e; 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.actual = a; 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.passed = true; 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.reason = ""; 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.passed = getTestCaseResult( this.expect, this.actual ); 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction startTest() { 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // JavaScript 1.3 is supposed to be compliant ecma version 1.0 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( VERSION == "ECMA_1" ) { 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project version ( 130 ); 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( VERSION == "JS_1.3" ) { 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project version ( 130 ); 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( VERSION == "JS_1.2" ) { 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project version ( 120 ); 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( VERSION == "JS_1.1" ) { 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project version ( 110 ); 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // for ecma version 2.0, we will leave the javascript version to 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // the default ( for now ). 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/ 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( BUGNUMBER ) { 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project writeLineToLog ("BUGNUMBER: " + BUGNUMBER ); 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases = new Array(); 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project tc = 0; 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction getTestCaseResult( expect, actual ) { 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // because ( NaN == NaN ) always returns false, need to do 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // a special compare to see if we got the right result. 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( actual != actual ) { 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( typeof actual == "object" ) { 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project actual = "NaN object"; 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project actual = "NaN number"; 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( expect != expect ) { 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( typeof expect == "object" ) { 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project expect = "NaN object"; 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project expect = "NaN number"; 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var passed = ( expect == actual ) ? true : false; 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // if both objects are numbers, give a little leeway for rounding. 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( !passed 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project && typeof(actual) == "number" 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project && typeof(expect) == "number" 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ) { 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( Math.abs(actual-expect) < 0.0000001 ) { 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project passed = true; 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // verify type is the same 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( typeof(expect) != typeof(actual) ) { 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project passed = false; 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return passed; 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Begin printing functions. These functions use the shell's 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * print function. When running tests in the browser, these 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * functions, override these functions with functions that use 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * document.write. 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction writeTestCaseResult( expect, actual, string ) { 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var passed = getTestCaseResult( expect, actual ); 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project writeFormattedResult( expect, actual, string, passed ); 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return passed; 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction writeFormattedResult( expect, actual, string, passed ) { 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var s = string ; 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project s += ( passed ) ? PASSED : FAILED + expect; 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project writeLineToLog( s); 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return passed; 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction writeLineToLog( string ) { 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print( string ); 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction writeHeaderToLog( string ) { 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print( string ); 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* end of print functions */ 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction stopTest() { 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var gc; 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( gc != undefined ) { 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project gc(); 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 139