зеркало из https://github.com/mozilla/pjs.git
adding more javascript language tests.
This commit is contained in:
Родитель
413803f598
Коммит
70a6bb127d
|
@ -0,0 +1,70 @@
|
|||
/* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Netscape are Copyright (C) 1998
|
||||
* Netscape Communications Corporation. All Rights Reserved.
|
||||
*
|
||||
*/
|
||||
/**
|
||||
* File Name: boolean-001.js
|
||||
* Description:
|
||||
*
|
||||
* In JavaScript 1.2, new Boolean(false) evaluates to false.
|
||||
*
|
||||
* Author: christine@netscape.com
|
||||
* Date: 11 August 1998
|
||||
*/
|
||||
var SECTION = "boolean-001.js";
|
||||
var VERSION = "JS1_2";
|
||||
startTest();
|
||||
var TITLE = "new Boolean(false) should evaluate to false";
|
||||
|
||||
writeHeaderToLog( SECTION + " "+ TITLE);
|
||||
|
||||
var testcases = new Array();
|
||||
|
||||
BooleanTest( "new Boolean(true)", new Boolean(true), true );
|
||||
BooleanTest( "new Boolean(false)", new Boolean(false), false );
|
||||
BooleanTest( "true", true, true );
|
||||
BooleanTest( "false", false, false );
|
||||
|
||||
test();
|
||||
|
||||
function BooleanTest( string, object, expect ) {
|
||||
if ( object ) {
|
||||
result = true;
|
||||
} else {
|
||||
result = false;
|
||||
}
|
||||
|
||||
testcases[tc++] = new TestCase(
|
||||
SECTION,
|
||||
string,
|
||||
expect,
|
||||
result );
|
||||
}
|
||||
|
||||
function test() {
|
||||
for ( tc=0; tc < testcases.length; tc++ ) {
|
||||
testcases[tc].passed = writeTestCaseResult(
|
||||
testcases[tc].expect,
|
||||
testcases[tc].actual,
|
||||
testcases[tc].description +" = "+
|
||||
testcases[tc].actual );
|
||||
|
||||
testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
|
||||
}
|
||||
stopTest();
|
||||
return ( testcases );
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* JavaScript test library shared functions file for running the tests
|
||||
* in the browser. Overrides the shell's print function with document.write
|
||||
* and make everything HTML pretty.
|
||||
*
|
||||
* To run the tests in the browser, use the mkhtml.pl script to generate
|
||||
* html pages that include the shell.js, browser.js (this file), and the
|
||||
* test js file in script tags.
|
||||
*
|
||||
* The source of the page that is generated should look something like this:
|
||||
* <script src="./../shell.js"></script>
|
||||
* <script src="./../browser.js"></script>
|
||||
* <script src="./mytest.js"></script>
|
||||
*/
|
||||
|
||||
onerror = err;
|
||||
|
||||
function startTest() {
|
||||
if ( BUGNUMBER ) {
|
||||
writeLineToLog ("BUGNUMBER: " + BUGNUMBER );
|
||||
}
|
||||
|
||||
testcases = new Array();
|
||||
tc = 0;
|
||||
}
|
||||
|
||||
function writeLineToLog( string ) {
|
||||
document.write( string + "<br>\n");
|
||||
}
|
||||
function writeHeaderToLog( string ) {
|
||||
document.write( "<h2>" + string + "</h2>" );
|
||||
}
|
||||
function stopTest() {
|
||||
var gc;
|
||||
if ( gc != undefined ) {
|
||||
gc();
|
||||
}
|
||||
document.write( "<hr>" );
|
||||
}
|
||||
function writeFormattedResult( expect, actual, string, passed ) {
|
||||
var s = "<tt>"+ string ;
|
||||
s += "<b>" ;
|
||||
s += ( passed ) ? "<font color=#009900> " + PASSED
|
||||
: "<font color=#aa0000> " + FAILED + expect + "</tt>";
|
||||
writeLineToLog( s + "</font></b></tt>" );
|
||||
return passed;
|
||||
}
|
||||
function err( msg, page, line ) {
|
||||
writeLineToLog( "Test failed with the message: " + msg );
|
||||
|
||||
testcases[tc].actual = "error";
|
||||
testcases[tc].reason = msg;
|
||||
writeTestCaseResult( testcases[tc].expect,
|
||||
testcases[tc].actual,
|
||||
testcases[tc].description +" = "+ testcases[tc].actual +
|
||||
": " + testcases[tc].reason );
|
||||
stopTest();
|
||||
return true;
|
||||
}
|
|
@ -0,0 +1,170 @@
|
|||
var completed = false;
|
||||
var testcases;
|
||||
|
||||
var BUGNUMBER="";
|
||||
var EXCLUDE = "";
|
||||
|
||||
var TT = "";
|
||||
var TT_ = "";
|
||||
var BR = "";
|
||||
var NBSP = " ";
|
||||
var CR = "\n";
|
||||
var FONT = "";
|
||||
var FONT_ = "";
|
||||
var FONT_RED = "";
|
||||
var FONT_GREEN = "";
|
||||
var B = "";
|
||||
var B_ = ""
|
||||
var H2 = "";
|
||||
var H2_ = "";
|
||||
var HR = "";
|
||||
|
||||
var PASSED = " PASSED!"
|
||||
var FAILED = " FAILED! expected: ";
|
||||
|
||||
version( 110 );
|
||||
|
||||
function test() {
|
||||
for ( tc=0; tc < testcases.length; tc++ ) {
|
||||
testcases[tc].passed = writeTestCaseResult(
|
||||
testcases[tc].expect,
|
||||
testcases[tc].actual,
|
||||
testcases[tc].description +" = "+
|
||||
testcases[tc].actual );
|
||||
|
||||
testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
|
||||
}
|
||||
stopTest();
|
||||
return ( testcases );
|
||||
}
|
||||
|
||||
function TestCase( n, d, e, a ) {
|
||||
this.name = n;
|
||||
this.description = d;
|
||||
this.expect = e;
|
||||
this.actual = a;
|
||||
this.passed = true;
|
||||
this.reason = "";
|
||||
this.bugnumber = BUGNUMBER;
|
||||
|
||||
this.passed = getTestCaseResult( this.expect, this.actual );
|
||||
}
|
||||
function startTest() {
|
||||
/*
|
||||
// JavaScript 1.3 is supposed to be compliant ecma version 1.0
|
||||
if ( VERSION == "ECMA_1" ) {
|
||||
version ( "130" );
|
||||
}
|
||||
if ( VERSION == "JS_1.3" ) {
|
||||
version ( "130" );
|
||||
}
|
||||
if ( VERSION == "JS_1.2" ) {
|
||||
version ( "120" );
|
||||
}
|
||||
if ( VERSION == "JS_1.1" ) {
|
||||
version ( "110" );
|
||||
}
|
||||
// for ecma version 2.0, we will leave the javascript version to
|
||||
// the default ( for now ).
|
||||
*/
|
||||
}
|
||||
function getTestCaseResult( expect, actual ) {
|
||||
// because ( NaN == NaN ) always returns false, need to do
|
||||
// a special compare to see if we got the right result.
|
||||
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 both objects are numbers, give a little leeway for rounding.
|
||||
if ( !passed
|
||||
&& typeof(actual) == "number"
|
||||
&& typeof(expect) == "number"
|
||||
) {
|
||||
if ( Math.abs(actual-expect) < 0.0000001 ) {
|
||||
passed = true;
|
||||
}
|
||||
}
|
||||
|
||||
// verify type is the same
|
||||
if ( typeof(expect) != typeof(actual) ) {
|
||||
passed = false;
|
||||
}
|
||||
|
||||
return passed;
|
||||
}
|
||||
function writeTestCaseResult( expect, actual, string ) {
|
||||
var passed = getTestCaseResult( expect, actual );
|
||||
writeFormattedResult( expect, actual, string, passed );
|
||||
return passed;
|
||||
}
|
||||
function writeFormattedResult( expect, actual, string, passed ) {
|
||||
var s = TT + string ;
|
||||
|
||||
for ( k = 0;
|
||||
k < (60 - string.length >= 0 ? 60 - string.length : 5) ;
|
||||
k++ ) {
|
||||
// s += NBSP;
|
||||
}
|
||||
|
||||
s += B ;
|
||||
s += ( passed ) ? FONT_GREEN + NBSP + PASSED : FONT_RED + NBSP + FAILED + expect + TT_ ;
|
||||
|
||||
writeLineToLog( s + FONT_ + B_ + TT_ );
|
||||
|
||||
return passed;
|
||||
}
|
||||
|
||||
function writeLineToLog( string ) {
|
||||
print( string + BR + CR );
|
||||
}
|
||||
function writeHeaderToLog( string ) {
|
||||
print( H2 + string + H2_ );
|
||||
}
|
||||
function stopTest() {
|
||||
var sizeTag = "<#TEST CASES SIZE>";
|
||||
var doneTag = "<#TEST CASES DONE>";
|
||||
var beginTag = "<#TEST CASE ";
|
||||
var endTag = ">";
|
||||
|
||||
print(sizeTag);
|
||||
print(testcases.length);
|
||||
for (tc = 0; tc < testcases.length; tc++)
|
||||
{
|
||||
print(beginTag + 'PASSED' + endTag);
|
||||
print(testcases[tc].passed);
|
||||
print(beginTag + 'NAME' + endTag);
|
||||
print(testcases[tc].name);
|
||||
print(beginTag + 'EXPECTED' + endTag);
|
||||
print(testcases[tc].expect);
|
||||
print(beginTag + 'ACTUAL' + endTag);
|
||||
print(testcases[tc].actual);
|
||||
print(beginTag + 'DESCRIPTION' + endTag);
|
||||
print(testcases[tc].description);
|
||||
print(beginTag + 'REASON' + endTag);
|
||||
print(( testcases[tc].passed ) ? "" : "wrong value ");
|
||||
print(beginTag + 'BUGNUMBER' + endTag);
|
||||
print( BUGNUMBER );
|
||||
}
|
||||
print(doneTag);
|
||||
gc();
|
||||
}
|
||||
function getFailedCases() {
|
||||
for ( var i = 0; i < testcases.length; i++ ) {
|
||||
if ( ! testcases[i].passed ) {
|
||||
print( testcases[i].description +" = " +testcases[i].actual +" expected: "+ testcases[i].expect );
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
/* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Netscape are Copyright (C) 1998
|
||||
* Netscape Communications Corporation. All Rights Reserved.
|
||||
*
|
||||
*/
|
||||
/**
|
||||
* File Name: boolean-001.js
|
||||
* Description:
|
||||
*
|
||||
* http://scopus.mcom.com/bugsplat/show_bug.cgi?id=99232
|
||||
*
|
||||
* eval("function f(){}function g(){}") at top level is an error for JS1.2
|
||||
and above (missing ; between named function expressions), but declares f
|
||||
and g as functions below 1.2.
|
||||
*
|
||||
* Fails to produce error regardless of version:
|
||||
* js> version(100)
|
||||
120
|
||||
js> eval("function f(){}function g(){}")
|
||||
js> version(120);
|
||||
100
|
||||
js> eval("function f(){}function g(){}")
|
||||
js>
|
||||
* Author: christine@netscape.com
|
||||
* Date: 11 August 1998
|
||||
*/
|
||||
var SECTION = "boolean-001.js";
|
||||
var VERSION = "JS1_1";
|
||||
var TITLE = "functions not separated by semicolons are not errors in version 110 ";
|
||||
var BUGNUMBER="99232";
|
||||
|
||||
startTest();
|
||||
writeHeaderToLog( SECTION + " "+ TITLE);
|
||||
|
||||
var testcases = new Array();
|
||||
|
||||
result = "passed";
|
||||
|
||||
testcases[tc++] = new TestCase(
|
||||
SECTION,
|
||||
"eval(\"function f(){}function g(){}\")",
|
||||
void 0,
|
||||
eval("function f(){}function g(){}") );
|
||||
|
||||
test();
|
||||
|
||||
|
||||
function test() {
|
||||
for ( tc=0; tc < testcases.length; tc++ ) {
|
||||
testcases[tc].passed = writeTestCaseResult(
|
||||
testcases[tc].expect,
|
||||
testcases[tc].actual,
|
||||
testcases[tc].description +" = "+
|
||||
testcases[tc].actual );
|
||||
|
||||
testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
|
||||
}
|
||||
stopTest();
|
||||
return ( testcases );
|
||||
}
|
|
@ -0,0 +1,155 @@
|
|||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
var completed = false;
|
||||
var testcases;
|
||||
var tc = 0;
|
||||
|
||||
SECTION = "";
|
||||
VERSION = "";
|
||||
BUGNUMBER = "";
|
||||
|
||||
var GLOBAL = "[object global]";
|
||||
var PASSED = " PASSED!"
|
||||
var FAILED = " FAILED! expected: ";
|
||||
|
||||
function test() {
|
||||
for ( tc=0; tc < testcases.length; tc++ ) {
|
||||
testcases[tc].passed = writeTestCaseResult(
|
||||
testcases[tc].expect,
|
||||
testcases[tc].actual,
|
||||
testcases[tc].description +" = "+
|
||||
testcases[tc].actual );
|
||||
|
||||
testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
|
||||
}
|
||||
stopTest();
|
||||
return ( testcases );
|
||||
}
|
||||
/* wrapper for test cas constructor that doesn't require the SECTION
|
||||
* argument.
|
||||
*/
|
||||
|
||||
function AddTestCase( description, expect, actual ) {
|
||||
testcases[tc++] = new TestCase( SECTION, description, expect, actual );
|
||||
}
|
||||
|
||||
function TestCase( n, d, e, a ) {
|
||||
this.name = n;
|
||||
this.description = d;
|
||||
this.expect = e;
|
||||
this.actual = a;
|
||||
this.passed = true;
|
||||
this.reason = "";
|
||||
|
||||
this.passed = getTestCaseResult( this.expect, this.actual );
|
||||
}
|
||||
function startTest() {
|
||||
/*
|
||||
// JavaScript 1.3 is supposed to be compliant ecma version 1.0
|
||||
if ( VERSION == "ECMA_1" ) {
|
||||
version ( "130" );
|
||||
}
|
||||
if ( VERSION == "JS_1.3" ) {
|
||||
version ( "130" );
|
||||
}
|
||||
if ( VERSION == "JS_1.2" ) {
|
||||
version ( "120" );
|
||||
}
|
||||
if ( VERSION == "JS_1.1" ) {
|
||||
version ( "110" );
|
||||
}
|
||||
// for ecma version 2.0, we will leave the javascript version to
|
||||
// the default ( for now ).
|
||||
*/
|
||||
|
||||
if ( BUGNUMBER ) {
|
||||
writeLineToLog ("BUGNUMBER: " + BUGNUMBER );
|
||||
}
|
||||
|
||||
testcases = new Array();
|
||||
tc = 0;
|
||||
}
|
||||
function getTestCaseResult( expect, actual ) {
|
||||
// because ( NaN == NaN ) always returns false, need to do
|
||||
// a special compare to see if we got the right result.
|
||||
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 both objects are numbers, give a little leeway for rounding.
|
||||
if ( !passed
|
||||
&& typeof(actual) == "number"
|
||||
&& typeof(expect) == "number"
|
||||
) {
|
||||
if ( Math.abs(actual-expect) < 0.0000001 ) {
|
||||
passed = true;
|
||||
}
|
||||
}
|
||||
|
||||
// verify type is the same
|
||||
if ( typeof(expect) != typeof(actual) ) {
|
||||
passed = false;
|
||||
}
|
||||
|
||||
return passed;
|
||||
}
|
||||
/*
|
||||
* Begin printing functions. These functions use the shell's
|
||||
* print function. When running tests in the browser, these
|
||||
* functions, override these functions with functions that use
|
||||
* document.write.
|
||||
*/
|
||||
|
||||
function writeTestCaseResult( expect, actual, string ) {
|
||||
var passed = getTestCaseResult( expect, actual );
|
||||
writeFormattedResult( expect, actual, string, passed );
|
||||
return passed;
|
||||
}
|
||||
function writeFormattedResult( expect, actual, string, passed ) {
|
||||
var s = string ;
|
||||
s += ( passed ) ? PASSED : FAILED + expect;
|
||||
writeLineToLog( s);
|
||||
return passed;
|
||||
}
|
||||
function writeLineToLog( string ) {
|
||||
print( string );
|
||||
}
|
||||
function writeHeaderToLog( string ) {
|
||||
print( string );
|
||||
}
|
||||
/* end of print functions */
|
||||
|
||||
function stopTest() {
|
||||
var gc;
|
||||
if ( gc != undefined ) {
|
||||
gc();
|
||||
}
|
||||
}
|
Загрузка…
Ссылка в новой задаче