Home | History | Annotate | Download | only in js1_3
      1 var completed = false;
      2 var	testcases;
      3 var tc = 0;
      4 
      5 SECTION	= "";
      6 VERSION	= "";
      7 BUGNUMBER =	"";
      8 DEBUG = false;
      9 
     10 var	GLOBAL = "[object global]";
     11 var PASSED = " PASSED!"
     12 var FAILED = " FAILED! expected: ";
     13 
     14 function test() {
     15     for ( tc=0; tc < testcases.length; tc++ ) {
     16         testcases[tc].passed = writeTestCaseResult(
     17                             testcases[tc].expect,
     18                             testcases[tc].actual,
     19                             testcases[tc].description +" = "+
     20                             testcases[tc].actual );
     21 
     22         testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
     23     }
     24     stopTest();
     25     return ( testcases );
     26 }
     27 
     28 /* wrapper for test cas constructor that doesn't require the SECTION
     29  * argument.
     30  */
     31 
     32 function AddTestCase( description, expect, actual ) {
     33     testcases[tc++] = new TestCase( SECTION, description, expect, actual );
     34 }
     35 
     36 function TestCase( n, d, e, a ) {
     37     this.name        = n;
     38     this.description = d;
     39     this.expect      = e;
     40     this.actual      = a;
     41     this.passed      = true;
     42     this.reason      = "";
     43     this.bugnumber   = BUGNUMBER;
     44 
     45     this.passed = getTestCaseResult( this.expect, this.actual );
     46     if ( DEBUG ) {
     47         writeLineToLog( "added " + this.description );
     48     }
     49 }
     50 function startTest() {
     51     //  JavaScript 1.3 is supposed to be compliant ecma version 1.0
     52     if ( VERSION == "ECMA_1" ) {
     53         version ( 130 );
     54     }
     55     if ( VERSION == "JS_1.3" ) {
     56         version ( 130 );
     57     }
     58     if ( VERSION == "JS_1.2" ) {
     59         version ( 120 );
     60     }
     61     if ( VERSION  == "JS_1.1" ) {
     62         version ( 110 );
     63     }
     64     // for ecma version 2.0, we will leave the javascript version to
     65     // the default ( for now ).
     66 
     67     if ( BUGNUMBER ) {
     68             writeLineToLog ("BUGNUMBER: " + BUGNUMBER );
     69     }
     70 
     71     testcases = new Array();
     72     tc = 0;
     73 }
     74 function getTestCaseResult( expect, actual ) {
     75     //  because ( NaN == NaN ) always returns false, need to do
     76     //  a special compare to see if we got the right result.
     77         if ( actual != actual ) {
     78             if ( typeof actual == "object" ) {
     79                 actual = "NaN object";
     80             } else {
     81                 actual = "NaN number";
     82             }
     83         }
     84         if ( expect != expect ) {
     85             if ( typeof expect == "object" ) {
     86                 expect = "NaN object";
     87             } else {
     88                 expect = "NaN number";
     89             }
     90         }
     91 
     92         var passed = ( expect == actual ) ? true : false;
     93 
     94     //  if both objects are numbers
     95     // need to replace w/ IEEE standard 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 function writeTestCaseResult( expect, actual, string ) {
    113         var passed = getTestCaseResult( expect, actual );
    114         writeFormattedResult( expect, actual, string, passed );
    115         return passed;
    116 }
    117 function writeFormattedResult( expect, actual, string, passed ) {
    118         var s = TT + string ;
    119 
    120         for ( k = 0;
    121               k <  (60 - string.length >= 0 ? 60 - string.length : 5) ;
    122               k++ ) {
    123         }
    124 
    125         s += B ;
    126         s += ( passed ) ? FONT_GREEN + NBSP + PASSED : FONT_RED + NBSP + FAILED + expect + TT_ ;
    127 
    128         writeLineToLog( s + FONT_ + B_ + TT_ );
    129 
    130         return passed;
    131 }
    132 /*
    133  * Begin printing functions.  These functions use the shell's
    134  * print function.  When running tests in the browser, these
    135  * functions, override these functions with functions that use
    136  * document.write.
    137  */
    138 
    139 function writeTestCaseResult( expect, actual, string ) {
    140 		var	passed = getTestCaseResult(	expect,	actual );
    141 		writeFormattedResult( expect, actual, string, passed );
    142 		return passed;
    143 }
    144 function writeFormattedResult( expect, actual, string, passed ) {
    145         var s = string ;
    146         s += ( passed ) ? PASSED : FAILED + expect;
    147         writeLineToLog( s);
    148         return passed;
    149 }
    150 function writeLineToLog( string	) {
    151 	print( string );
    152 }
    153 function writeHeaderToLog( string )	{
    154 	print( string );
    155 }
    156 /* end of print functions */
    157 
    158 function stopTest() {
    159    var gc;
    160    if ( gc != undefined ) {
    161         gc();
    162    }
    163 }
    164