/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
/**
* This file contains functions used by all of the XPConnect tests.
* See http://www.mozilla.org/scriptable/tests/ for more information.
*/
/**
*
*
*/
var FILE_BUGNUMBERS = "";
var window;
var PASSED;
var FAILED;
function AddTestCase( s, e, a, n, b, i ) {
TESTCASES[TESTCASES.length] = new TestCase( s, e, a, b, n, i );
return TESTCASES[TESTCASES.length];
}
function TestCase( s, e, a, n, b, i ) {
this.id = ID++;
this.description = s;
this.expected = e;
this.actual = a;
if ( n )
this.negative = n;
if ( b )
this.bugnumber = b;
if ( i )
this.ignore = i;
this.passed = GetResult( e, a );
}
function StartTest( t ) {
TESTCASES = new Array();
FILE_FAILED_CASES = 0;
FILE_PASSED_CASES = 0;
FILE_PASSED = true;
COMPLETED = false;
ID = 0;
FILE_TITLE = t;
WriteLine("\n" + FILE_TITLE +"\n");
if ( window ) {
document.open();
PASSED = "passed ";
FAILED = "FAILED ";
} else {
PASSED = "passed ";
FAILED = "FAILED ";
}
}
function StopTest() {
// here, we will close up and print a summary of what happened
writeReadableResults();
//writeParseableResults();
writeTestFileSummary();
if ( window ) {
document.close();
}
}
function AddComment(s) {
WriteLine(s);
}
function writeReadableResults() {
for ( var i = 0; i < TESTCASES.length; i++ ) {
var tc = TESTCASES[i];
if (tc.passed && this.DONT_PRINT_PASSED_TESTS)
continue;
WriteLine(
(tc.passed ? PASSED : FAILED) +
tc.description + " = " +
tc.actual + " " +
(tc.passed ? "" : "expected " + tc.expected)
);
}
}
function writeParseableResults() {
WriteLine( "START TEST CASE RESULTS" );
for ( var i = 0; i < TESTCASES.length; i++ ) {
var tc = TESTCASES[i];
WriteLine( tc.id +","+
tc.description +","+
tc.expected +","+
tc.actual +","+
tc.bugnumber +","+
tc.negative +","+
tc.ignore +","+
tc.exception +","+
tc.passed );
}
}
function writeTestFileSummary() {
WriteLine ("\nTEST FILE SUMMARY" );
WriteLine( "Title: " + FILE_TITLE );
WriteLine( "Passed: " + FILE_PASSED );
WriteLine( "Testcases: " + TESTCASES.length );
WriteLine( "Passed Cases: " + FILE_PASSED_CASES );
WriteLine( "Failed Cases: " + FILE_FAILED_CASES );
// if we're in the shell, run the garbage collector.
var gc;
if ( typeof gc == "function") {
gc();
}
}
function GetResult(expect, actual) {
if ( actual != actual ) {
if ( typeof actual == "object" ){
actual = "NaN object";
} else {
actual = "NaN number";
}
}
if ( expect != expect ) {
if ( typeof expect == "object" ) {
expect = "NaN object";
} else {
expect = "NaN number";
}
}
var passed = ( expect == actual ) ? true : false;
if ( typeof(expect) != typeof(actual) ) {
passed = false;
}
if ( !passed ) {
FILE_PASSED = false;
FILE_FAILED_CASES++;
} else {
FILE_PASSED_CASES++;
}
return passed;
}
function PrintResult(e, a, s, p) {
}
function PrintHTMLFormattedResult( e, a, s, p ) {
}
function WriteLine( s ) {
if ( window ) {
document.write( s +"
");
} else {
print ( s );
}
}
function GetFailedCases() {
for ( var i = 0; i < TESTCASES.length; i++ ) {
var tc = TESTCASES[i];
if ( !tc.passed )
WriteLine(
(tc.passed ? "passed " : "FAILED! ") +
tc.description + " = " +
tc.actual + " " +
(tc.passed ? "" : "expected " + tc.expected)
);
}
}
/**
* Given an object, display all its properties and the value of that
* property.
*/
function Enumerate( o ) {
var p;
WriteLine( "Properties of object " + o );
for ( p in o ) {
WriteLine( p +": "+ (typeof o[p] == "function" ? "function" : o[p]) );
}
}
/**
* These are variables whose values depend on the host environment.
* The defaults here are correct for the JavaScript or XPConnect shell.
* In order to run the tests in the browser, need to override these
* values for the tests to execute correctly.
*
*/
var GLOBAL = "[object global]";