test262.py: only include helper scripts when needed

test262.py: only supply async helper scripts when test is async
sth.js: factor out function isAsyncTest()
timer.js: improve workaround for async tests when Promise is defined but setTimeout is noot

timer.js emulates setTimeout using Promise by doing a busy loop that checks
if `timeout` milliseconds have elapsed.  Modified check to (timeLeft > 0) instead
of (!timeLeft) to prevent infinite loop when check does not happen to run
at precise millisecond timeout expires.

Because test262.py did not support the $INCLUDE directive, some helper
scripts were added to every test -- notably testIntl, timer, and donePrintHandle
Now that $INCLUDE is supported, these can be dropped, speeding overall test run time
This commit is contained in:
Sam Mikes 2014-07-21 15:15:04 +01:00
parent 33c8399de8
commit d4a3479a1e
3 changed files with 20 additions and 14 deletions

View File

@ -91,6 +91,9 @@ function BrowserRunner() {
currentTest.code = codeString;
}
function isAsyncTest(code) {
return /\$DONE()/.test(code));
}
/* Run the test. */
this.run = function (test, code) {
@ -208,8 +211,8 @@ function BrowserRunner() {
//this is mainly applicable for consoles that do not have setTimeout support
//idoc.writeln("<script type='text/javascript' src='harness/timer.js' defer>" + "</script>");
if(setTimeout === undefined && /\$DONE()/.test(code)){
idoc.writeln("<script type='text/javascript'>");
if(setTimeout === undefined && isAsyncTest(code)) {
idoc.writeln("<script type='text/javascript'>");
idoc.writeln(timerContents);
idoc.writeln("</script>");
}
@ -225,15 +228,15 @@ function BrowserRunner() {
idoc.writeln("<script type='text/javascript'>");
if(!/\$DONE()/.test(code))
//if the test is synchronous - call $DONE immediately
if (!isAsyncTest(code)) {
//if the test is synchronous - call $DONE immediately
idoc.writeln("if(typeof $DONE === 'function') $DONE()");
else{
//in case the test does not call $DONE asynchronously then
//bailout after 1 min or given bailout time by calling $DONE
} else {
//in case the test does not call $DONE asynchronously then
//bailout after 1 min or given bailout time by calling $DONE
var asyncval = parseInt(test.timeout);
var testTimeout = asyncval !== asyncval ? 2000 : asyncval;
idoc.writeln("setTimeout(function() {$ERROR(\" Test Timed Out at " + testTimeout +"\" )} ," + testTimeout + ")");
idoc.writeln("setTimeout(function() {$ERROR(\" Test Timed Out at " + testTimeout +"\" )} ," + testTimeout + ")");
}
idoc.writeln("</script>");
idoc.close();

View File

@ -12,7 +12,7 @@ if(Promise !== undefined && this.setTimeout === undefined)
var end = start + delay;
function check(){
var timeLeft = end - Date.now();
if(timeLeft)
if(timeLeft > 0)
p.then(check);
else
callback();

View File

@ -260,11 +260,14 @@ class TestCase(object):
# "var testDescrip = " + str(self.testRecord) + ';\n\n' + \
source = self.suite.GetInclude("cth.js") + \
self.suite.GetInclude("sta.js") + \
self.suite.GetInclude("ed.js") + \
self.suite.GetInclude("testBuiltInObject.js") + \
self.suite.GetInclude("testIntl.js") + \
self.suite.GetInclude("timer.js") + \
self.suite.GetInclude("doneprintHandle.js").replace('print', self.suite.print_handle) + \
self.suite.GetInclude("ed.js")
if self.IsAsyncTest():
source = source + \
self.suite.GetInclude("timer.js") + \
self.suite.GetInclude("doneprintHandle.js").replace('print', self.suite.print_handle)
source = source + \
self.GetAdditionalIncludes() + \
self.test + '\n'