18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar completed = false; 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar testcases; 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar BUGNUMBER=""; 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar EXCLUDE = ""; 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar TT = ""; 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar TT_ = ""; 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar BR = ""; 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar NBSP = " "; 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar CR = "\n"; 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar FONT = ""; 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar FONT_ = ""; 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar FONT_RED = ""; 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar FONT_GREEN = ""; 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar B = ""; 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar B_ = "" 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar H2 = ""; 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar H2_ = ""; 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar HR = ""; 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar PASSED = " PASSED!" 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar FAILED = " FAILED! expected: "; 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectversion( 140 ); 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction test() { 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for ( tc=0; tc < testcases.length; tc++ ) { 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].passed = writeTestCaseResult( 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].expect, 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].actual, 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].description +" = "+ 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].actual ); 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value "; 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project stopTest(); 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return ( testcases ); 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction TestCase( n, d, e, a ) { 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.name = n; 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.description = d; 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.expect = e; 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.actual = a; 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.passed = true; 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.reason = ""; 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.bugnumber = BUGNUMBER; 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.passed = getTestCaseResult( this.expect, this.actual ); 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction startTest() { 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // JavaScript 1.3 is supposed to be compliant ecma version 1.0 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( VERSION == "ECMA_1" ) { 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project version ( "130" ); 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( VERSION == "JS_1.3" ) { 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project version ( "130" ); 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( VERSION == "JS_1.2" ) { 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project version ( "120" ); 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( VERSION == "JS_1.1" ) { 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project version ( "110" ); 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // for ecma version 2.0, we will leave the javascript version to 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // the default ( for now ). 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/ 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction getTestCaseResult( expect, actual ) { 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // because ( NaN == NaN ) always returns false, need to do 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // a special compare to see if we got the right result. 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( actual != actual ) { 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( typeof actual == "object" ) { 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project actual = "NaN object"; 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project actual = "NaN number"; 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( expect != expect ) { 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( typeof expect == "object" ) { 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project expect = "NaN object"; 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project expect = "NaN number"; 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var passed = ( expect == actual ) ? true : false; 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // if both objects are numbers, give a little leeway for rounding. 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( !passed 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project && typeof(actual) == "number" 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project && typeof(expect) == "number" 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ) { 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( Math.abs(actual-expect) < 0.0000001 ) { 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project passed = true; 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // verify type is the same 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( typeof(expect) != typeof(actual) ) { 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project passed = false; 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return passed; 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction writeTestCaseResult( expect, actual, string ) { 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var passed = getTestCaseResult( expect, actual ); 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project writeFormattedResult( expect, actual, string, passed ); 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return passed; 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction writeFormattedResult( expect, actual, string, passed ) { 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var s = TT + string ; 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for ( k = 0; 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project k < (60 - string.length >= 0 ? 60 - string.length : 5) ; 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project k++ ) { 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// s += NBSP; 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project s += B ; 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project s += ( passed ) ? FONT_GREEN + NBSP + PASSED : FONT_RED + NBSP + FAILED + expect + TT_ ; 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project writeLineToLog( s + FONT_ + B_ + TT_ ); 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return passed; 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction writeLineToLog( string ) { 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print( string + BR + CR ); 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction writeHeaderToLog( string ) { 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print( H2 + string + H2_ ); 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction stopTest() { 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var sizeTag = "<#TEST CASES SIZE>"; 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var doneTag = "<#TEST CASES DONE>"; 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var beginTag = "<#TEST CASE "; 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var endTag = ">"; 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print(sizeTag); 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print(testcases.length); 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (tc = 0; tc < testcases.length; tc++) 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print(beginTag + 'PASSED' + endTag); 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print(testcases[tc].passed); 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print(beginTag + 'NAME' + endTag); 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print(testcases[tc].name); 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print(beginTag + 'EXPECTED' + endTag); 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print(testcases[tc].expect); 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print(beginTag + 'ACTUAL' + endTag); 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print(testcases[tc].actual); 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print(beginTag + 'DESCRIPTION' + endTag); 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print(testcases[tc].description); 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print(beginTag + 'REASON' + endTag); 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print(( testcases[tc].passed ) ? "" : "wrong value "); 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print(beginTag + 'BUGNUMBER' + endTag); 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print( BUGNUMBER ); 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print(doneTag); 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project gc(); 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction getFailedCases() { 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for ( var i = 0; i < testcases.length; i++ ) { 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( ! testcases[i].passed ) { 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print( testcases[i].description +" = " +testcases[i].actual +" expected: "+ testcases[i].expect ); 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 170