mirror of
https://github.com/tc39/test262.git
synced 2025-04-08 19:35:28 +02:00
Reformatted to 80 columns. Inserted missing semicolons. Removed one
bogus semicolon. Except for the bogud semicolon, nothing should have changed the meaning of the programs.
This commit is contained in:
parent
68d44bb52a
commit
bba34a262e
@ -1,14 +1,14 @@
|
||||
/// Copyright (c) 2009 Microsoft Corporation
|
||||
///
|
||||
/// Copyright (c) 2009 Microsoft Corporation
|
||||
///
|
||||
/// Redistribution and use in source and binary forms, with or without modification, are permitted provided
|
||||
/// that the following conditions are met:
|
||||
/// that the following conditions are met:
|
||||
/// * Redistributions of source code must retain the above copyright notice, this list of conditions and
|
||||
/// the following disclaimer.
|
||||
/// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
|
||||
/// the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
/// the following disclaimer.
|
||||
/// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
|
||||
/// the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
/// * Neither the name of Microsoft nor the names of its contributors may be used to
|
||||
/// endorse or promote products derived from this software without specific prior written permission.
|
||||
///
|
||||
///
|
||||
/// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||
/// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
/// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
||||
@ -16,7 +16,7 @@
|
||||
/// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
/// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
/// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
/// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
/// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
/* Handles updating the page with information from the runner. */
|
||||
function Presenter() {
|
||||
@ -31,11 +31,12 @@ function Presenter() {
|
||||
globalSection = new Section(null, "0", "ECMA-262"),
|
||||
currentSection = globalSection,
|
||||
tests = {},
|
||||
totalTests = 0;
|
||||
totalTests = 0,
|
||||
|
||||
TOCFILEPATH = "resources/scripts/global/ecma-262-toc.xml",
|
||||
activityBar;
|
||||
|
||||
TOCFILEPATH = "resources/scripts/global/ecma-262-toc.xml";
|
||||
|
||||
|
||||
/* Load the table of contents xml to populate the sections. */
|
||||
function loadSections() {
|
||||
var sectionsLoader = new XMLHttpRequest();
|
||||
@ -54,8 +55,11 @@ function Presenter() {
|
||||
|
||||
for (var i = 0; i < nodes.length; i++) {
|
||||
if (nodes[i].nodeName === "sec") {
|
||||
subsection = new Section(parentSection, nodes[i].getAttribute('id'), nodes[i].getAttribute('name'));
|
||||
parentSection.subsections[subsection.id.match(/\d+$/)] = subsection;
|
||||
subsection = new Section(parentSection,
|
||||
nodes[i].getAttribute('id'),
|
||||
nodes[i].getAttribute('name'));
|
||||
parentSection.subsections[subsection.id.match(/\d+$/)] =
|
||||
subsection;
|
||||
addSectionsFromXML(nodes[i].childNodes, subsection);
|
||||
}
|
||||
}
|
||||
@ -93,7 +97,8 @@ function Presenter() {
|
||||
var current = currentSection;
|
||||
|
||||
// Walk backwards until we reach the global section.
|
||||
while(current !== globalSection && current.parentSection !== globalSection) {
|
||||
while(current !== globalSection &&
|
||||
current.parentSection !== globalSection) {
|
||||
sectionChain.push(current);
|
||||
current = current.parentSection;
|
||||
}
|
||||
@ -106,12 +111,14 @@ function Presenter() {
|
||||
|
||||
// Static first link to go back to the root.
|
||||
var link = $("<a href='#0' class='setBlack'>Test Sections > </a>");
|
||||
link.bind('click', {sectionId: 0}, sectionSelected)
|
||||
link.bind('click', {sectionId: 0}, sectionSelected);
|
||||
container.append(link);
|
||||
|
||||
for(var i = 0; i < sectionChain.length;i++) {
|
||||
link = $("<a href='#" + sectionChain[i].id + "' class='setBlack'>" + sectionChain[i].id + ": " + sectionChain[i].name + " > </a>");
|
||||
link.bind('click', sectionSelected)
|
||||
link = $("<a href='#" + sectionChain[i].id + "' class='setBlack'>" +
|
||||
sectionChain[i].id + ": " + sectionChain[i].name +
|
||||
" > </a>");
|
||||
link.bind('click', sectionSelected);
|
||||
container.append(link);
|
||||
}
|
||||
|
||||
@ -134,7 +141,9 @@ function Presenter() {
|
||||
|
||||
if (test.description) {
|
||||
innerHTML += '<b>Description</b>';
|
||||
innerHTML += '<pre>' + test.description.replace(/</g, '<').replace(/>/g, '>'); +' </pre>';
|
||||
innerHTML += '<pre>' +
|
||||
test.description.replace(/</g, '<').replace(/>/g, '>') +
|
||||
' </pre>';
|
||||
}
|
||||
|
||||
innerHTML += '<br /><br /><br /><b>Testcase</b>';
|
||||
@ -150,30 +159,34 @@ function Presenter() {
|
||||
|
||||
popWnd.document.write(innerHTML);
|
||||
}
|
||||
|
||||
|
||||
/* Pops up a window with an xml dump of the results of a test. */
|
||||
function createXMLReportWindow() {
|
||||
var reportWindow; //window that will output the xml data
|
||||
var xmlData; //array instead of string concatenation
|
||||
var dateNow;
|
||||
var xml; // stop condition of for loop stored in a local variable to improve performance
|
||||
var xml; // stop condition of for loop stored in a local
|
||||
// variable to improve performance
|
||||
|
||||
dateNow = new Date();
|
||||
|
||||
xml = '<testRun>\r\n' +
|
||||
'<userAgent>' + window.navigator.userAgent + '</userAgent>\r\n' +
|
||||
'<Date>' + dateNow.toDateString() + '</Date>\r\n' +
|
||||
'<targetTestSuiteName>ECMAScript Test262 Site</targetTestSuiteName>\r\n' +
|
||||
'<targetTestSuiteVersion>' + version + '</targetTestSuiteVersion>\r\n' +
|
||||
'<targetTestSuiteDate>' + date + '</targetTestSuiteDate>\r\n' +
|
||||
' <Tests>\r\n\r\n';
|
||||
'<Date>' + dateNow.toDateString() + '</Date>\r\n' +
|
||||
'<targetTestSuiteName>ECMAScript Test262 Site' +
|
||||
'</targetTestSuiteName>\r\n' +
|
||||
'<targetTestSuiteVersion>' + version + '</targetTestSuiteVersion>\r\n' +
|
||||
'<targetTestSuiteDate>' + date + '</targetTestSuiteDate>\r\n' +
|
||||
' <Tests>\r\n\r\n';
|
||||
|
||||
reportWindow = window.open();
|
||||
reportWindow.document.writeln("<title>ECMAScript Test262 XML</title>");
|
||||
reportWindow.document.write("<textarea id='results' style='width: 100%; height: 800px;'>");
|
||||
reportWindow.document.write(
|
||||
"<textarea id='results' style='width: 100%; height: 800px;'>");
|
||||
reportWindow.document.write(xml);
|
||||
reportWindow.document.write(globalSection.toXML());
|
||||
reportWindow.document.write('</Tests>\r\n</testRun>\r\n</textarea>\r\n');
|
||||
reportWindow.document.write(
|
||||
'</Tests>\r\n</testRun>\r\n</textarea>\r\n');
|
||||
reportWindow.document.close();
|
||||
}
|
||||
|
||||
@ -194,7 +207,8 @@ function Presenter() {
|
||||
|
||||
currentSection = currentSection.parentSection;
|
||||
|
||||
// Since users click directly on sub-chapters of the main chapters, don't go back to main
|
||||
// Since users click directly on sub-chapters of the main
|
||||
// chapters, don't go back to main
|
||||
// chapters.
|
||||
if(currentSection.parentSection === globalSection)
|
||||
currentSection = globalSection;
|
||||
@ -202,7 +216,9 @@ function Presenter() {
|
||||
renderCurrentSection();
|
||||
}
|
||||
|
||||
/* Returns the section object for the specified section id (eg. "7.1" or "15.4.4.12"). */
|
||||
/* Returns the section object for the specified section id
|
||||
* (eg. "7.1" or "15.4.4.12").
|
||||
*/
|
||||
function getSectionById(id) {
|
||||
if(id == 0)
|
||||
return globalSection;
|
||||
@ -235,7 +251,11 @@ function Presenter() {
|
||||
/* Append a result to the run page's result log. */
|
||||
function logResult(test) {
|
||||
altStyle = (altStyle !== ' ') ? ' ' : 'alternate';
|
||||
var appendStr = '<tbody><tr class=\"' + altStyle + '\"><td width=\"20%\">' + "<a class='showSource' href='#" + test.id + "'>" + test.id + "</a>" + '</td><td>' + test.description + '</td><td align="right"><span class=\"Fail\">' + test.result + '</span></td></tr></tbody>';
|
||||
var appendStr = '<tbody><tr class=\"' + altStyle +
|
||||
'\"><td width=\"20%\">' + "<a class='showSource' href='#" +
|
||||
test.id + "'>" + test.id + "</a>" + '</td><td>' +
|
||||
test.description + '</td><td align="right"><span class=\"Fail\">' +
|
||||
test.result + '</span></td></tr></tbody>';
|
||||
logger.append(appendStr);
|
||||
logger.parent().attr("scrollTop", logger.parent().attr("scrollHeight"));
|
||||
}
|
||||
@ -246,19 +266,21 @@ function Presenter() {
|
||||
this.setTotalTests = function(tests) {
|
||||
totalTests = tests;
|
||||
$('#testsToRun').text(tests);
|
||||
}
|
||||
};
|
||||
|
||||
this.setVersion = function(v) {
|
||||
version = v;
|
||||
$(".targetTestSuiteVersion").text(v);
|
||||
}
|
||||
};
|
||||
|
||||
this.setDate = function(d) {
|
||||
date = d;
|
||||
$(".targetTestSuiteDate").text(d);
|
||||
}
|
||||
};
|
||||
|
||||
/* Updates progress with the given test, which should have its results in it as well. */
|
||||
/* Updates progress with the given test, which should have its
|
||||
* results in it as well.
|
||||
*/
|
||||
this.addTestResult = function(test) {
|
||||
tests[test.id] = test;
|
||||
getSectionById(test.id).addTest(test);
|
||||
@ -268,15 +290,15 @@ function Presenter() {
|
||||
if(test.result === 'fail')
|
||||
logResult(test);
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
this.started = function () {
|
||||
$('.button-start').attr('src', 'resources/images/pause.png');
|
||||
}
|
||||
};
|
||||
|
||||
this.paused = function () {
|
||||
$('.button-start').attr('src', 'resources/images/resume.png');
|
||||
}
|
||||
};
|
||||
|
||||
this.reset = function() {
|
||||
globalSection.reset();
|
||||
@ -285,7 +307,7 @@ function Presenter() {
|
||||
|
||||
currentSection = globalSection;
|
||||
renderCurrentSection();
|
||||
}
|
||||
};
|
||||
|
||||
this.finished = function(elapsed) {
|
||||
$('.button-start').attr('src', 'resources/images/start.png');
|
||||
@ -294,17 +316,17 @@ function Presenter() {
|
||||
} else {
|
||||
activityBar.text('');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/* Refresh display of the report */
|
||||
this.refresh = function() {
|
||||
renderCurrentSection();
|
||||
}
|
||||
};
|
||||
|
||||
/* Write status to the activity bar. */
|
||||
this.updateStatus = function(str) {
|
||||
activityBar.text(str);
|
||||
}
|
||||
};
|
||||
|
||||
/* Do some setup tasks. */
|
||||
this.setup = function() {
|
||||
@ -316,7 +338,7 @@ function Presenter() {
|
||||
activityBar = $('#nextActivity');
|
||||
$('a.showSource', logger).live("click", openSourceWindow);
|
||||
$('#ancGenXMLReport').click(createXMLReportWindow);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
var presenter = new Presenter();
|
||||
|
@ -1,14 +1,14 @@
|
||||
/// Copyright (c) 2009 Microsoft Corporation
|
||||
///
|
||||
/// Copyright (c) 2009 Microsoft Corporation
|
||||
///
|
||||
/// Redistribution and use in source and binary forms, with or without modification, are permitted provided
|
||||
/// that the following conditions are met:
|
||||
/// that the following conditions are met:
|
||||
/// * Redistributions of source code must retain the above copyright notice, this list of conditions and
|
||||
/// the following disclaimer.
|
||||
/// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
|
||||
/// the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
/// the following disclaimer.
|
||||
/// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
|
||||
/// the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
/// * Neither the name of Microsoft nor the names of its contributors may be used to
|
||||
/// endorse or promote products derived from this software without specific prior written permission.
|
||||
///
|
||||
///
|
||||
/// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||
/// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
/// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
||||
@ -16,7 +16,7 @@
|
||||
/// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
/// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
/// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
/// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
/// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
/* A section of the spec. Stores test results and subsections and some rolled up stats on how many tests passed or
|
||||
* failed under that section
|
||||
@ -57,16 +57,20 @@ function Section(parentSection, id, name) {
|
||||
}
|
||||
|
||||
return Math.round((this.totalPassed / this.totalTests) * 100);
|
||||
}
|
||||
};
|
||||
|
||||
/* Add a test result to this section. Pushes the result to the test array and passes the result to addTestResult to
|
||||
* tabulate pass/fail numbers*/
|
||||
/* Add a test result to this section. Pushes the result to the
|
||||
* test array and passes the result to addTestResult to tabulate
|
||||
* pass/fail numbers
|
||||
*/
|
||||
this.addTest = function(test) {
|
||||
this.tests.push(test);
|
||||
this.addTestResult(test);
|
||||
}
|
||||
};
|
||||
|
||||
/* Increments the various rollup counters for this section and all parent sections */
|
||||
/* Increments the various rollup counters for this section and all
|
||||
* parent sections
|
||||
*/
|
||||
this.addTestResult = function(test) {
|
||||
this.totalTests++;
|
||||
|
||||
@ -80,7 +84,7 @@ function Section(parentSection, id, name) {
|
||||
|
||||
if(this.parentSection !== null)
|
||||
this.parentSection.addTestResult(test);
|
||||
}
|
||||
};
|
||||
|
||||
/* Renders this section as HTML. Used for the report page.*/
|
||||
this.toHTML = function(options) {
|
||||
@ -93,7 +97,7 @@ function Section(parentSection, id, name) {
|
||||
}
|
||||
|
||||
var html = '<tbody id="section_' + this.id.replace(/\./g, "_") + '">';
|
||||
|
||||
|
||||
if(options.header) {
|
||||
html += "<tr><td class='tblHeader' colspan='3'>Chapter " + this.id + " - " + this.name + "</td>" +
|
||||
"<td class='" + rollupCellClass(this.passPercent()) + "'>" + this.passPercent() + "%</td></tr>";
|
||||
@ -103,31 +107,40 @@ function Section(parentSection, id, name) {
|
||||
test = this.tests[i];
|
||||
html += "<tr><td>" + test.id + "</td>" +
|
||||
"<td>" + test.description + "</td>" +
|
||||
"<td><a class='showSource' href='#" + test.id + "'>[source]</a></td>" +
|
||||
"<td class='" + test.result + "'>" + test.result + "</td></tr>"
|
||||
"<td><a class='showSource' href='#" + test.id +
|
||||
"'>[source]</a></td>" +
|
||||
"<td class='" + test.result + "'>" + test.result +
|
||||
"</td></tr>";
|
||||
}
|
||||
|
||||
|
||||
for(var sectionId in this.subsections) {
|
||||
var section = this.subsections[sectionId];
|
||||
|
||||
if(section.totalTests > 0) {
|
||||
if(options.renderSubsections) {
|
||||
html += section.toHTML({header: true, renderSubsections: false})
|
||||
html += section.toHTML({
|
||||
header: true,
|
||||
renderSubsections: false});
|
||||
} else {
|
||||
html += "<tr><td colspan='3'><a class='section' href='#" + section.id + "'>Chapter " + section.id + " - " + section.name + "</a></td>" +
|
||||
"<td class='" + rollupCellClass(section.passPercent()) + "'>" + section.passPercent() + "%</td></tr>";
|
||||
html += "<tr><td colspan='3'><a class='section' href='#" +
|
||||
section.id + "'>Chapter " + section.id + " - " +
|
||||
section.name + "</a></td>" +
|
||||
"<td class='" +
|
||||
rollupCellClass(section.passPercent()) + "'>" +
|
||||
section.passPercent() + "%</td></tr>";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return html + "</tbody>";
|
||||
}
|
||||
};
|
||||
|
||||
/* Render this section as XML. Used for the report page. */
|
||||
this.toXML = function() {
|
||||
var xml = "";
|
||||
if(this.id != 0) {
|
||||
xml += "<section id='" + this.id + "' name='" + this.name + "'>\r\n";
|
||||
xml += "<section id='" + this.id + "' name='" + this.name +
|
||||
"'>\r\n";
|
||||
|
||||
for (var i = 0; i < this.tests.length; i++) {
|
||||
xml += '<test>\r\n' +
|
||||
@ -146,7 +159,7 @@ function Section(parentSection, id, name) {
|
||||
}
|
||||
|
||||
return xml;
|
||||
}
|
||||
};
|
||||
|
||||
/* Reset counts and remove tests. */
|
||||
this.reset = function() {
|
||||
@ -159,5 +172,5 @@ function Section(parentSection, id, name) {
|
||||
for(var subsection in this.subsections) {
|
||||
this.subsections[subsection].reset();
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -37,7 +37,8 @@ function $FAIL(message) {
|
||||
|
||||
|
||||
//Sputnik library definitions
|
||||
//Ultimately these should be namespaced some how and only made available to tests that explicitly include them.
|
||||
//Ultimately these should be namespaced some how and only made
|
||||
//available to tests that explicitly include them.
|
||||
//For now, we just define the globally
|
||||
|
||||
//math_precision.js
|
||||
@ -435,12 +436,14 @@ function ConstructDate(year, month, date, hours, minutes, seconds, ms){
|
||||
* 5. If minutes is supplied use ToNumber(minutes); else use 0
|
||||
* 6. If seconds is supplied use ToNumber(seconds); else use 0
|
||||
* 7. If ms is supplied use ToNumber(ms); else use 0
|
||||
* 8. If Result(1) is not NaN and 0 <= ToInteger(Result(1)) <= 99, Result(8) is
|
||||
* 1900+ToInteger(Result(1)); otherwise, Result(8) is Result(1)
|
||||
* 8. If Result(1) is not NaN and 0 <= ToInteger(Result(1)) <= 99,
|
||||
* Result(8) is 1900+ToInteger(Result(1));
|
||||
* otherwise, Result(8) is Result(1)
|
||||
* 9. Compute MakeDay(Result(8), Result(2), Result(3))
|
||||
* 10. Compute MakeTime(Result(4), Result(5), Result(6), Result(7))
|
||||
* 11. Compute MakeDate(Result(9), Result(10))
|
||||
* 12. Set the [[Value]] property of the newly constructed object to TimeClip(UTC(Result(11)))
|
||||
* 12. Set the [[Value]] property of the newly constructed object to
|
||||
* TimeClip(UTC(Result(11)))
|
||||
*/
|
||||
var r1 = Number(year);
|
||||
var r2 = Number(month);
|
||||
|
@ -158,13 +158,22 @@ function fnSupportsStrict() {
|
||||
SimpleTestAPIs.push(fnSupportsStrict);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//Verify all attributes specified data property of given object: value, writable, enumerable, configurable
|
||||
//Verify all attributes specified data property of given object:
|
||||
//value, writable, enumerable, configurable
|
||||
//If all attribute values are expected, return true, otherwise, return false
|
||||
function dataPropertyAttributesAreCorrect(obj, name, value, writable, enumerable, configurable) {
|
||||
function dataPropertyAttributesAreCorrect(obj,
|
||||
name,
|
||||
value,
|
||||
writable,
|
||||
enumerable,
|
||||
configurable) {
|
||||
var attributesCorrect = true;
|
||||
|
||||
if (obj[name] !== value) {
|
||||
if (typeof obj[name] === "number" && isNaN(obj[name]) && typeof value === "number" && isNaN(value)) {
|
||||
if (typeof obj[name] === "number" &&
|
||||
isNaN(obj[name]) &&
|
||||
typeof value === "number" &&
|
||||
isNaN(value)) {
|
||||
// keep empty
|
||||
} else {
|
||||
attributesCorrect = false;
|
||||
@ -182,7 +191,10 @@ function dataPropertyAttributesAreCorrect(obj, name, value, writable, enumerable
|
||||
|
||||
var overwrited = false;
|
||||
if (obj[name] !== value) {
|
||||
if (typeof obj[name] === "number" && isNaN(obj[name]) && typeof value === "number" && isNaN(value)) {
|
||||
if (typeof obj[name] === "number" &&
|
||||
isNaN(obj[name]) &&
|
||||
typeof value === "number" &&
|
||||
isNaN(value)) {
|
||||
// keep empty
|
||||
} else {
|
||||
overwrited = true;
|
||||
@ -222,14 +234,24 @@ function dataPropertyAttributesAreCorrect(obj, name, value, writable, enumerable
|
||||
SimpleTestAPIs.push(dataPropertyAttributesAreCorrect);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//Verify all attributes specified accessor property of given object: get, set, enumerable, configurable
|
||||
//Verify all attributes specified accessor property of given object:
|
||||
//get, set, enumerable, configurable
|
||||
//If all attribute values are expected, return true, otherwise, return false
|
||||
function accessorPropertyAttributesAreCorrect(obj, name, get, set, setVerifyHelpProp, enumerable, configurable) {
|
||||
function accessorPropertyAttributesAreCorrect(obj,
|
||||
name,
|
||||
get,
|
||||
set,
|
||||
setVerifyHelpProp,
|
||||
enumerable,
|
||||
configurable) {
|
||||
var attributesCorrect = true;
|
||||
|
||||
if (get !== undefined) {
|
||||
if (obj[name] !== get()) {
|
||||
if (typeof obj[name] === "number" && isNaN(obj[name]) && typeof get() === "number" && isNaN(get())) {
|
||||
if (typeof obj[name] === "number" &&
|
||||
isNaN(obj[name]) &&
|
||||
typeof get() === "number" &&
|
||||
isNaN(get())) {
|
||||
// keep empty
|
||||
} else {
|
||||
attributesCorrect = false;
|
||||
|
@ -19,7 +19,8 @@
|
||||
/// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
//Do not cache any JSON files - see https://bugs.ecmascript.org/show_bug.cgi?id=87
|
||||
// Do not cache any JSON files - see
|
||||
// https://bugs.ecmascript.org/show_bug.cgi?id=87
|
||||
$.ajaxSetup( {cache:false});
|
||||
|
||||
/*
|
||||
@ -29,22 +30,26 @@ $.ajaxSetup( {cache:false});
|
||||
* * run(id, test): Runs the test specified.
|
||||
*
|
||||
* Callbacks:
|
||||
* * onComplete(test): Called when the test is run. Test object contains result and error strings describing how the
|
||||
* * onComplete(test): Called when the test is run. Test object
|
||||
* contains result and error strings describing how the
|
||||
* test ran.
|
||||
*/
|
||||
function BrowserRunner() {
|
||||
var iframe, // injected iframe
|
||||
currentTest, // Current test being run.
|
||||
scriptCache = {}, // Holds the various includes required to run certain sputnik tests.
|
||||
scriptCache = {}, // Holds the various includes required to
|
||||
// run certain sputnik tests.
|
||||
instance = this;
|
||||
|
||||
/* Called by the child window to notify that the test has finished. This function call is put in a separate script
|
||||
* block at the end of the page so errors in the test script block should not prevent this function from being
|
||||
* called.
|
||||
/* Called by the child window to notify that the test has
|
||||
* finished. This function call is put in a separate script block
|
||||
* at the end of the page so errors in the test script block
|
||||
* should not prevent this function from being called.
|
||||
*/
|
||||
function testFinished() {
|
||||
if(typeof currentTest.result === "undefined") {
|
||||
// We didn't get a call to testRun, which likely means the test failed to load.
|
||||
// We didn't get a call to testRun, which likely means the
|
||||
// test failed to load.
|
||||
currentTest.result = "fail";
|
||||
currentTest.error = "Failed to Load";
|
||||
} else if(typeof currentTest.error !== "undefined") {
|
||||
@ -52,7 +57,8 @@ function BrowserRunner() {
|
||||
if(currentTest.error instanceof Test262Error) {
|
||||
currentTest.error = currentTest.message;
|
||||
} else {
|
||||
currentTest.error = currentTest.error.name + ": " + currentTest.error.message;
|
||||
currentTest.error = currentTest.error.name + ": " +
|
||||
currentTest.error.message;
|
||||
}
|
||||
}
|
||||
|
||||
@ -75,10 +81,12 @@ function BrowserRunner() {
|
||||
|
||||
/* Run the test. */
|
||||
this.run = function(id, code) {
|
||||
var includes = code.match(/\$INCLUDE\(([^\)]+)\)/g), // find all of the $INCLUDE statements
|
||||
// find all of the $INCLUDE statements
|
||||
var includes = code.match(/\$INCLUDE\(([^\)]+)\)/g),
|
||||
include;
|
||||
|
||||
currentTest = {id: id}; // default test, in case it doesn't get registered.
|
||||
// default test, in case it doesn't get registered.
|
||||
currentTest = {id: id};
|
||||
|
||||
iframe = document.createElement("iframe");
|
||||
iframe.setAttribute("style", "display:none");
|
||||
@ -103,11 +111,13 @@ function BrowserRunner() {
|
||||
win.$INCLUDE = function() {};
|
||||
|
||||
if(includes !== null) {
|
||||
// We have some includes, so loop through each include and pull in the dependencies.
|
||||
// We have some includes, so loop through each include and
|
||||
// pull in the dependencies.
|
||||
for(var i = 0; i < includes.length; i++) {
|
||||
include = includes[i].replace(/.*\(('|")(.*)('|")\)/, "$2");
|
||||
|
||||
// First check to see if we have this script cached already, and if not, grab it.
|
||||
// First check to see if we have this script cached
|
||||
// already, and if not, grab it.
|
||||
if(typeof scriptCache[include] === "undefined") {
|
||||
$.ajax({
|
||||
async: false,
|
||||
@ -117,12 +127,14 @@ function BrowserRunner() {
|
||||
}
|
||||
|
||||
// Finally, write the required script to the window.
|
||||
doc.writeln("<script type='text/javascript'>" + scriptCache[include] + "</script>");
|
||||
doc.writeln("<script type='text/javascript'>" +
|
||||
scriptCache[include] + "</script>");
|
||||
}
|
||||
}
|
||||
|
||||
//Write out all of our helper functions
|
||||
doc.writeln("<script type='text/javascript'>" + PickledSimpleTestAPIs + "</script>");
|
||||
doc.writeln("<script type='text/javascript'>" +
|
||||
PickledSimpleTestAPIs + "</script>");
|
||||
|
||||
|
||||
|
||||
@ -134,51 +146,126 @@ function BrowserRunner() {
|
||||
var testDescrip = GlobalScopeTests[id];
|
||||
|
||||
//Add an error handler
|
||||
doc.writeln("<script type='text/javascript'>window.onerror = function(errorMsg, url, lineNumber) {window.iframeError = errorMsg;};" + "</script>");
|
||||
doc.writeln("<script type='text/javascript'>" +
|
||||
"window.onerror = function(errorMsg, url, lineNumber)"+
|
||||
" {window.iframeError = errorMsg;};" +
|
||||
"</script>");
|
||||
//Parse and execute the code
|
||||
doc.writeln("<script type='text/javascript'>onErrorHack = true;try{" + code + "}catch(test262RuntimeError){window.iframeError=test262RuntimeError.message || \"None\";}</script>");
|
||||
doc.writeln("<script type='text/javascript'>" +
|
||||
"onErrorHack = true;try{" +
|
||||
code +
|
||||
"}catch(test262RuntimeError){" +
|
||||
"window.iframeError=test262RuntimeError.message || " +
|
||||
"'None';" +
|
||||
"}</script>");
|
||||
|
||||
//validation
|
||||
if (testDescrip.negative!==undefined) { //An exception is expected
|
||||
if (win.onErrorHack===undefined) { //Hack for browsers not supporting window.onerror WRT early parse errors
|
||||
testRun(testDescrip.id, testDescrip.path, testDescrip.description, code, typeof testDescrip.precondition !== 'undefined' ? testDescrip.precondition.toString() : '',
|
||||
'pass', 'Not parsable');
|
||||
if (testDescrip.negative!==undefined) {
|
||||
//An exception is expected
|
||||
if (win.onErrorHack===undefined) {
|
||||
//Hack for browsers not supporting window.onerror
|
||||
//WRT early parse errors
|
||||
testRun(testDescrip.id,
|
||||
testDescrip.path,
|
||||
testDescrip.description,
|
||||
code,
|
||||
typeof testDescrip.precondition !== 'undefined' ?
|
||||
testDescrip.precondition.toString() : '',
|
||||
'pass',
|
||||
'Not parsable');
|
||||
}
|
||||
else if (win.iframeError===undefined) { //no exception was thrown
|
||||
testRun(testDescrip.id, testDescrip.path, testDescrip.description, code, typeof testDescrip.precondition !== 'undefined' ? testDescrip.precondition.toString() : '',
|
||||
'fail', 'No Exception Thrown');
|
||||
} else if(! (new RegExp(testDescrip.negative, "i").test(win.iframeError))) { //wrong type of exception thrown
|
||||
testRun(testDescrip.id, testDescrip.path, testDescrip.description, code, typeof testDescrip.precondition !== 'undefined' ? testDescrip.precondition.toString() : '',
|
||||
'fail', 'Wrong Type of Exception Thrown');
|
||||
else if (win.iframeError===undefined) {
|
||||
//no exception was thrown
|
||||
testRun(testDescrip.id,
|
||||
testDescrip.path,
|
||||
testDescrip.description,
|
||||
code,
|
||||
typeof testDescrip.precondition !== 'undefined' ?
|
||||
testDescrip.precondition.toString() : '',
|
||||
'fail',
|
||||
'No Exception Thrown');
|
||||
} else if (! (new RegExp(testDescrip.negative, "i").test(
|
||||
win.iframeError))) {
|
||||
//wrong type of exception thrown
|
||||
testRun(testDescrip.id,
|
||||
testDescrip.path,
|
||||
testDescrip.description,
|
||||
code,
|
||||
typeof testDescrip.precondition !== 'undefined' ?
|
||||
testDescrip.precondition.toString() : '',
|
||||
'fail',
|
||||
'Wrong Type of Exception Thrown');
|
||||
} else {
|
||||
testRun(testDescrip.id, testDescrip.path, testDescrip.description, code, typeof testDescrip.precondition !== 'undefined' ? testDescrip.precondition.toString() : '',
|
||||
'pass', undefined);
|
||||
testRun(testDescrip.id,
|
||||
testDescrip.path,
|
||||
testDescrip.description,
|
||||
code,
|
||||
typeof testDescrip.precondition !== 'undefined' ?
|
||||
testDescrip.precondition.toString() : '',
|
||||
'pass',
|
||||
undefined);
|
||||
}
|
||||
} else if (win.iframeError!==undefined) { //Exception was not expected to be thrown
|
||||
testRun(testDescrip.id, testDescrip.path, testDescrip.description, code, typeof testDescrip.precondition !== 'undefined' ? testDescrip.precondition.toString() : '',
|
||||
'fail', 'Unexpected Exception');
|
||||
} else if (win.iframeError!==undefined) {
|
||||
//Exception was not expected to be thrown
|
||||
testRun(testDescrip.id,
|
||||
testDescrip.path,
|
||||
testDescrip.description,
|
||||
code,
|
||||
typeof testDescrip.precondition !== 'undefined' ?
|
||||
testDescrip.precondition.toString() : '',
|
||||
'fail',
|
||||
'Unexpected Exception');
|
||||
} else {
|
||||
testRun(testDescrip.id, testDescrip.path, testDescrip.description, code, typeof testDescrip.precondition !== 'undefined' ? testDescrip.precondition.toString() : '',
|
||||
'pass', undefined);
|
||||
testRun(testDescrip.id,
|
||||
testDescrip.path,
|
||||
testDescrip.description,
|
||||
code,
|
||||
typeof testDescrip.precondition !== 'undefined' ?
|
||||
testDescrip.precondition.toString() : '',
|
||||
'pass',
|
||||
undefined);
|
||||
}
|
||||
}
|
||||
//--Scenario 2: we're dealing with a normal positive(?) test case
|
||||
else {
|
||||
|
||||
// Write ES5Harness.registerTest and fnGlobalObject, which returns the global object, and the testFinished call.
|
||||
doc.writeln("<script type='text/javascript'>ES5Harness = {};" +
|
||||
"ES5Harness.registerTest = function(test) {" +
|
||||
" var error;" +
|
||||
" if(test.precondition && !test.precondition()) {" +
|
||||
" testRun(test.id, test.path, test.description, test.test.toString(),typeof test.precondition !== 'undefined' ? test.precondition.toString() : '', 'fail', 'Precondition Failed');" +
|
||||
" } else {" +
|
||||
" var testThis = test.strict===undefined ? window : undefined;" +
|
||||
" try { var res = test.test.call(testThis); } catch(e) { res = 'fail'; error = e; }" +
|
||||
" var retVal = /^s/i.test(test.id) ? (res === true || typeof res === 'undefined' ? 'pass' : 'fail') : (res === true ? 'pass' : 'fail');" +
|
||||
" testRun(test.id, test.path, test.description, test.test.toString(), typeof test.precondition !== 'undefined' ? test.precondition.toString() : '', retVal, error);" +
|
||||
" }" +
|
||||
"}</script>" +
|
||||
"<script type='text/javascript'>" + code + "</script>");
|
||||
// Write ES5Harness.registerTest and fnGlobalObject, which
|
||||
// returns the global object, and the testFinished call.
|
||||
doc.writeln(
|
||||
"<script type='text/javascript'>" +
|
||||
"ES5Harness = {};" +
|
||||
"ES5Harness.registerTest = function(test) {" +
|
||||
" var error;" +
|
||||
" if(test.precondition && !test.precondition()) {" +
|
||||
" testRun(test.id, " +
|
||||
"test.path, " +
|
||||
"test.description, " +
|
||||
"test.test.toString()," +
|
||||
"typeof test.precondition !== 'undefined' ? " +
|
||||
"test.precondition.toString() : '', " +
|
||||
"'fail', " +
|
||||
"'Precondition Failed');" +
|
||||
" } else {" +
|
||||
" var testThis = " +
|
||||
"test.strict===undefined ? window : undefined;" +
|
||||
" try { " +
|
||||
"var res = test.test.call(testThis); " +
|
||||
"} catch(e) { res = 'fail'; error = e; }" +
|
||||
" var retVal = /^s/i.test(test.id) ? " +
|
||||
"(res === true || typeof res === 'undefined' ? " +
|
||||
"'pass' : 'fail') : " +
|
||||
"(res === true ? 'pass' : 'fail');" +
|
||||
" testRun(test.id, " +
|
||||
"test.path, " +
|
||||
"test.description, " +
|
||||
"test.test.toString(), " +
|
||||
"typeof test.precondition !== 'undefined' ? " +
|
||||
"test.precondition.toString() : '', " +
|
||||
"retVal, " +
|
||||
"error);" +
|
||||
" }" +
|
||||
"}</script>" +
|
||||
"<script type='text/javascript'>" + code + "</script>");
|
||||
}
|
||||
doc.writeln("<script type='text/javascript'>testFinished();</script>");
|
||||
doc.close();
|
||||
@ -191,9 +278,12 @@ function BrowserRunner() {
|
||||
* * reset() - Start over at the first test.
|
||||
*
|
||||
* Callbacks:
|
||||
* * onLoadingNextSection(path): Called after a request is sent for the next section xml, with the path to that xml.
|
||||
* * onInitialized(totalTests, version, date): Called after the testcaseslist.xml is loaded and parsed.
|
||||
* * onTestReady(id, code): Called when a test is ready with the test's id and code.
|
||||
* * onLoadingNextSection(path): Called after a request is sent for
|
||||
* the next section xml, with the path to that xml.
|
||||
* * onInitialized(totalTests, version, date): Called after the
|
||||
* testcaseslist.xml is loaded and parsed.
|
||||
* * onTestReady(id, code): Called when a test is ready with the
|
||||
* test's id and code.
|
||||
* * onTestsExhausted(): Called when there are no more tests to run.
|
||||
*/
|
||||
function TestLoader() {
|
||||
@ -246,7 +336,9 @@ function TestLoader() {
|
||||
tests: []
|
||||
};
|
||||
}
|
||||
loader.onInitialized(loader.totalTests, loader.version, loader.date);
|
||||
loader.onInitialized(loader.totalTests,
|
||||
loader.version,
|
||||
loader.date);
|
||||
getNextXML();
|
||||
}});
|
||||
}
|
||||
@ -260,11 +352,13 @@ function TestLoader() {
|
||||
// We have tests left in this test group.
|
||||
var test = testGroups[testGroupIndex].tests[currentTestIndex++];
|
||||
var scriptCode = test.code;
|
||||
//var scriptCode = (test.firstChild.text != undefined) ? test.firstChild.text : test.firstChild.textContent;
|
||||
//var scriptCode = (test.firstChild.text != undefined) ?
|
||||
// test.firstChild.text : test.firstChild.textContent;
|
||||
|
||||
loader.onTestReady(test.id, $.base64Decode(scriptCode));
|
||||
} else if(testGroupIndex < testGroups.length - 1) {
|
||||
// We don't have tests left in this test group, so move on to the next.
|
||||
// We don't have tests left in this test group, so move on
|
||||
// to the next.
|
||||
testGroupIndex++;
|
||||
getNextXML();
|
||||
} else {
|
||||
@ -368,9 +462,11 @@ $(function () {
|
||||
presenter.setup();
|
||||
|
||||
$('.content-home').show();
|
||||
// Adding attribute to the tabs (e.g. Home, Run etc.) and attaching the click event on buttons (e.g. Reset, Start etc.)
|
||||
// Adding attribute to the tabs (e.g. Home, Run etc.) and
|
||||
// attaching the click event on buttons (e.g. Reset, Start etc.)
|
||||
$('.nav-link').each(function (index) {
|
||||
//Adding "targetDiv" attribute to the header tab and on that basis the div related to header tabs are displayed
|
||||
//Adding "targetDiv" attribute to the header tab and on that
|
||||
//basis the div related to header tabs are displayed
|
||||
if (index === 0) {
|
||||
$(this).attr('targetDiv', '.content-home');
|
||||
} else if (index === 1) {
|
||||
@ -385,7 +481,8 @@ $(function () {
|
||||
$(this).attr('targetDiv', '.content-browsers');
|
||||
}
|
||||
|
||||
//Attaching the click event to the header tab that shows the respective div of header
|
||||
//Attaching the click event to the header tab that shows the
|
||||
//respective div of header
|
||||
$(this).click(function () {
|
||||
var target = $(this).attr('targetDiv');
|
||||
$('#contentContainer > div:visible').hide();
|
||||
@ -400,12 +497,14 @@ $(function () {
|
||||
});
|
||||
});
|
||||
|
||||
//Attach the click event to the start button. It starts, stops and pauses the tests
|
||||
//Attach the click event to the start button. It starts, stops and
|
||||
//pauses the tests
|
||||
$('.button-start').click(function () {
|
||||
controller.toggle();
|
||||
});
|
||||
|
||||
//Attach the click event to the reset button. It reset all the test to zero
|
||||
//Attach the click event to the reset button. It reset all the
|
||||
//test to zero
|
||||
$('.button-reset').click(function () {
|
||||
controller.reset();
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user