Home | History | Annotate | Download | only in js1_5
      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
      2  *
      3  * The contents of this file are subject to the Netscape Public
      4  * License Version 1.1 (the "License"); you may not use this file
      5  * except in compliance with the License. You may obtain a copy of
      6  * the License at http://www.mozilla.org/NPL/
      7  *
      8  * Software distributed under the License is distributed on an "AS
      9  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
     10  * implied. See the License for the specific language governing
     11  * rights and limitations under the License.
     12  *
     13  * The Original Code is Mozilla Communicator client code, released March
     14  * 31, 1998.
     15  *
     16  * The Initial Developer of the Original Code is Netscape Communications
     17  * Corporation. Portions created by Netscape are
     18  * Copyright (C) 1998 Netscape Communications Corporation. All
     19  * Rights Reserved.
     20  *
     21  * Contributor(s):
     22  * Rob Ginda rginda (at) netscape.com
     23  */
     24 
     25 var FAILED = "FAILED!: ";
     26 var STATUS = "STATUS: ";
     27 var BUGNUMBER = "BUGNUMBER: ";
     28 var VERBOSE = false;
     29 var SECT_PREFIX = 'Section ';
     30 var SECT_SUFFIX = ' of test -';
     31 var callStack = new Array();
     32 
     33 /*
     34  * The test driver searches for such a phrase in the test output.
     35  * If such phrase exists, it will set n as the expected exit code.
     36  */
     37 function expectExitCode(n)
     38 {
     39 
     40     print('--- NOTE: IN THIS TESTCASE, WE EXPECT EXIT CODE ' + n + ' ---');
     41 
     42 }
     43 
     44 /*
     45  * Statuses current section of a test
     46  */
     47 function inSection(x)
     48 {
     49 
     50     return SECT_PREFIX + x + SECT_SUFFIX;
     51 
     52 }
     53 
     54 /*
     55  * Some tests need to know if we are in Rhino as opposed to SpiderMonkey
     56  */
     57 function inRhino()
     58 {
     59   return (typeof defineClass == "function");
     60 }
     61 
     62 /*
     63  * Report a failure in the 'accepted' manner
     64  */
     65 function reportFailure (msg)
     66 {
     67     var lines = msg.split ("\n");
     68     var l;
     69     var funcName = currentFunc();
     70     var prefix = (funcName) ? "[reported from " + funcName + "] ": "";
     71 
     72     for (var i=0; i<lines.length; i++)
     73         print (FAILED + prefix + lines[i]);
     74 
     75 }
     76 
     77 /*
     78  * Print a non-failure message.
     79  */
     80 function printStatus (msg)
     81 {
     82     var lines = msg.split ("\n");
     83     var l;
     84 
     85     for (var i=0; i<lines.length; i++)
     86         print (STATUS + lines[i]);
     87 
     88 }
     89 
     90 /*
     91  * Print a bugnumber message.
     92  */
     93 function printBugNumber (num)
     94 {
     95 
     96     print (BUGNUMBER + num);
     97 
     98 }
     99 
    100 /*
    101  * Compare expected result to actual result, if they differ (in value and/or
    102  * type) report a failure.  If description is provided, include it in the
    103  * failure report.
    104  */
    105 function reportCompare (expected, actual, description)
    106 {
    107     var expected_t = typeof expected;
    108     var actual_t = typeof actual;
    109     var output = "";
    110 
    111     if ((VERBOSE) && (typeof description != "undefined"))
    112         printStatus ("Comparing '" + description + "'");
    113 
    114     if (expected_t != actual_t)
    115         output += "Type mismatch, expected type " + expected_t +
    116             ", actual type " + actual_t + "\n";
    117     else if (VERBOSE)
    118         printStatus ("Expected type '" + actual_t + "' matched actual " +
    119                      "type '" + expected_t + "'");
    120 
    121     if (expected != actual)
    122         output += "Expected value '" + expected + "', Actual value '" + actual +
    123             "'\n";
    124     else if (VERBOSE)
    125         printStatus ("Expected value '" + actual + "' matched actual " +
    126                      "value '" + expected + "'");
    127 
    128     if (output != "")
    129     {
    130         if (typeof description != "undefined")
    131             reportFailure (description);
    132         reportFailure (output);
    133     }
    134 
    135 }
    136 
    137 /*
    138  * Puts funcName at the top of the call stack.  This stack is used to show
    139  * a function-reported-from field when reporting failures.
    140  */
    141 function enterFunc (funcName)
    142 {
    143 
    144     if (!funcName.match(/\(\)$/))
    145         funcName += "()";
    146 
    147     callStack.push(funcName);
    148 
    149 }
    150 
    151 /*
    152  * Pops the top funcName off the call stack.  funcName is optional, and can be
    153  * used to check push-pop balance.
    154  */
    155 function exitFunc (funcName)
    156 {
    157     var lastFunc = callStack.pop();
    158 
    159     if (funcName)
    160     {
    161         if (!funcName.match(/\(\)$/))
    162             funcName += "()";
    163 
    164         if (lastFunc != funcName)
    165             reportFailure ("Test driver failure, expected to exit function '" +
    166                            funcName + "' but '" + lastFunc + "' came off " +
    167                            "the stack");
    168     }
    169 
    170 }
    171 
    172 /*
    173  * Peeks at the top of the call stack.
    174  */
    175 function currentFunc()
    176 {
    177 
    178     return callStack[callStack.length - 1];
    179 
    180 }
    181