Skip to content
Snippets Groups Projects
Commit d4a3479a authored by Sam Mikes's avatar Sam Mikes
Browse files

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
parent 33c8399d
No related branches found
No related tags found
No related merge requests found
...@@ -91,6 +91,9 @@ function BrowserRunner() { ...@@ -91,6 +91,9 @@ function BrowserRunner() {
currentTest.code = codeString; currentTest.code = codeString;
} }
function isAsyncTest(code) {
return /\$DONE()/.test(code));
}
/* Run the test. */ /* Run the test. */
this.run = function (test, code) { this.run = function (test, code) {
...@@ -208,8 +211,8 @@ function BrowserRunner() { ...@@ -208,8 +211,8 @@ function BrowserRunner() {
//this is mainly applicable for consoles that do not have setTimeout support //this is mainly applicable for consoles that do not have setTimeout support
//idoc.writeln("<script type='text/javascript' src='harness/timer.js' defer>" + "</script>"); //idoc.writeln("<script type='text/javascript' src='harness/timer.js' defer>" + "</script>");
if(setTimeout === undefined && /\$DONE()/.test(code)){ if(setTimeout === undefined && isAsyncTest(code)) {
idoc.writeln("<script type='text/javascript'>"); idoc.writeln("<script type='text/javascript'>");
idoc.writeln(timerContents); idoc.writeln(timerContents);
idoc.writeln("</script>"); idoc.writeln("</script>");
} }
...@@ -225,15 +228,15 @@ function BrowserRunner() { ...@@ -225,15 +228,15 @@ function BrowserRunner() {
idoc.writeln("<script type='text/javascript'>"); idoc.writeln("<script type='text/javascript'>");
if(!/\$DONE()/.test(code)) if (!isAsyncTest(code)) {
//if the test is synchronous - call $DONE immediately //if the test is synchronous - call $DONE immediately
idoc.writeln("if(typeof $DONE === 'function') $DONE()"); idoc.writeln("if(typeof $DONE === 'function') $DONE()");
else{ } else {
//in case the test does not call $DONE asynchronously then //in case the test does not call $DONE asynchronously then
//bailout after 1 min or given bailout time by calling $DONE //bailout after 1 min or given bailout time by calling $DONE
var asyncval = parseInt(test.timeout); var asyncval = parseInt(test.timeout);
var testTimeout = asyncval !== asyncval ? 2000 : asyncval; 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.writeln("</script>");
idoc.close(); idoc.close();
......
...@@ -12,7 +12,7 @@ if(Promise !== undefined && this.setTimeout === undefined) ...@@ -12,7 +12,7 @@ if(Promise !== undefined && this.setTimeout === undefined)
var end = start + delay; var end = start + delay;
function check(){ function check(){
var timeLeft = end - Date.now(); var timeLeft = end - Date.now();
if(timeLeft) if(timeLeft > 0)
p.then(check); p.then(check);
else else
callback(); callback();
......
...@@ -260,11 +260,14 @@ class TestCase(object): ...@@ -260,11 +260,14 @@ class TestCase(object):
# "var testDescrip = " + str(self.testRecord) + ';\n\n' + \ # "var testDescrip = " + str(self.testRecord) + ';\n\n' + \
source = self.suite.GetInclude("cth.js") + \ source = self.suite.GetInclude("cth.js") + \
self.suite.GetInclude("sta.js") + \ self.suite.GetInclude("sta.js") + \
self.suite.GetInclude("ed.js") + \ self.suite.GetInclude("ed.js")
self.suite.GetInclude("testBuiltInObject.js") + \
self.suite.GetInclude("testIntl.js") + \ if self.IsAsyncTest():
self.suite.GetInclude("timer.js") + \ source = source + \
self.suite.GetInclude("doneprintHandle.js").replace('print', self.suite.print_handle) + \ self.suite.GetInclude("timer.js") + \
self.suite.GetInclude("doneprintHandle.js").replace('print', self.suite.print_handle)
source = source + \
self.GetAdditionalIncludes() + \ self.GetAdditionalIncludes() + \
self.test + '\n' self.test + '\n'
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment