Skip to content

Commit 772ebdf

Browse files
committed
Factor out the test environment setup
1 parent 585ceed commit 772ebdf

File tree

7 files changed

+155
-302
lines changed

7 files changed

+155
-302
lines changed

duktape.js

+10-18
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
* $ node duktape.js
99
*/
1010

11-
var fs = require('fs');
1211
var child_process = require('child_process');
1312
var runner_support = require('./runner_support');
1413

@@ -28,23 +27,16 @@ var dukKey = (function () {
2827
})();
2928
console.log('Duktape result key is: test.res.' + dukKey);
3029

31-
function runTest(evalcode) {
32-
var script = 'var evalcode = ' + JSON.stringify(evalcode) + ';\n' +
33-
'try {\n' +
34-
' var res = eval(evalcode);\n' +
35-
' if (res !== true && res !== 1) { throw new Error("failed: " + res); }\n' +
36-
' console.log("[SUCCESS]");\n' +
37-
'} catch (e) {\n' +
38-
' console.log("[FAILURE]", e);\n' +
39-
' /*throw e;*/\n' +
40-
'}\n';
30+
function dukRunner(testFilename) {
31+
try {
32+
var stdout = child_process.execFileSync(dukCommand, [ testFilename ], {
33+
encoding: 'utf-8'
34+
});
4135

42-
fs.writeFileSync('duktest.js', script);
43-
var stdout = child_process.execFileSync(dukCommand, [ 'duktest.js' ], {
44-
encoding: 'utf-8'
45-
});
46-
47-
return /^\[SUCCESS\]$/gm.test(stdout);
36+
return /^\[SUCCESS\]$/m.test(stdout);
37+
} catch (e) {
38+
return false;
39+
}
4840
}
4941

50-
runner_support.runTests(runTest, dukKey, 'Duktape');
42+
runner_support.runTests(dukRunner, dukKey, 'Duktape');

graalvm.js

+12-61
Original file line numberDiff line numberDiff line change
@@ -16,47 +16,21 @@
1616
* $ GRAALVM_NODE=<graalvm>/bin/node node graalvm.js
1717
*/
1818

19-
var fs = require('fs');
2019
var child_process = require('child_process');
2120
var runner_support = require('./runner_support');
2221

2322
var jsCommand = 'js';
2423
var jsArgs = [ '--js.intl-402' ];
25-
var nodeCommand = process.env['GRAALVM_NODE'];
26-
var nodeArgs = [];
27-
28-
var testScriptFilename = 'graalvmtest.js';
2924

3025
var flagsForSuite = {
31-
'data-es5': [],
32-
'data-es6': [ [ '--js.ecmascript-version=6' ] ],
33-
'data-es2016plus': [ [ '--js.ecmascript-version=staging' ] ],
34-
'data-esnext': [ [ '--js.ecmascript-version=staging' ], [ '--experimental-options', '--js.new-set-methods' ] ],
35-
'data-esintl': [],
36-
'data-non-standard': [ [ '--experimental-options', '--js.nashorn-compat' ], [ '--experimental-options', '--js.v8-compat' ], [ '--experimental-options', '--js.global-property' ] ]
26+
'es5': [],
27+
'es6': [ [ '--js.ecmascript-version=6' ] ],
28+
'es2016plus': [ [ '--js.ecmascript-version=staging' ] ],
29+
'esnext': [ [ '--js.ecmascript-version=staging' ], [ '--experimental-options', '--js.new-set-methods' ] ],
30+
'esintl': [],
31+
'non-standard': [ [ '--experimental-options', '--js.nashorn-compat' ], [ '--experimental-options', '--js.v8-compat' ], [ '--experimental-options', '--js.global-property' ] ]
3732
};
3833

39-
var prelude =
40-
'if (typeof global === "undefined") {\n' +
41-
' this.lacksGlobal = true;\n' +
42-
' global = this;\n' +
43-
'}\n' +
44-
'if (typeof globalThis === "undefined") {\n' +
45-
' this.lacksGlobalThis = true;\n' +
46-
' globalThis = this;\n' +
47-
'}\n' +
48-
'var __script_executed = {};\n' +
49-
'global.__script_executed = __script_executed;\n' +
50-
'global.test = function test(expression) {\n' +
51-
' if (expression) {\n' +
52-
' console.log("[SUCCESS]");\n' +
53-
' }\n' +
54-
'}\n' +
55-
'global.asyncTestPassed = function asyncTestPassed() {\n' +
56-
' console.log("[SUCCESS]");\n' +
57-
'}\n' +
58-
runner_support.createIterableHelper;
59-
6034
// Key for .res (e.g. test.res.graalvm), automatic based on GraalVM version.
6135
var graalvmKey = (function () {
6236
var stdout = child_process.execFileSync(jsCommand, [ '--version' ], {
@@ -69,9 +43,9 @@ var graalvmKey = (function () {
6943
})();
7044
console.log('GraalVM result key is: test.res.graalvm' + graalvmKey);
7145

72-
function exec(launcherCommand, launcherArgs, flags) {
46+
function exec(flags, testFilename) {
7347
try {
74-
var stdout = child_process.execFileSync(launcherCommand, launcherArgs.concat(flags, [ testScriptFilename ]), {
48+
var stdout = child_process.execFileSync(jsCommand, jsArgs.concat(flags, [ testFilename ]), {
7549
encoding: 'utf-8',
7650
stdio: ['ignore', 'pipe', 'ignore']
7751
});
@@ -82,14 +56,14 @@ function exec(launcherCommand, launcherArgs, flags) {
8256
}
8357
}
8458

85-
function executeTestScript(launcherCommand, launcherArgs, suite) {
86-
if (exec(launcherCommand, launcherArgs, [])) {
59+
function graalvmRunner(testFilename, suite) {
60+
if (exec([], testFilename)) {
8761
return true;
8862
}
8963

9064
for (var i = 0; i < flagsForSuite[suite].length; i++) {
9165
var flags = flagsForSuite[suite][i];
92-
if (exec(launcherCommand, launcherArgs, flags)) {
66+
if (exec(flags, testFilename)) {
9367
return {
9468
val: 'flagged',
9569
note_id: ('graalvm-' + flags.join('-')).replace(/[=\.]/g, '-').replace(/-+/g, '-'),
@@ -101,29 +75,6 @@ function executeTestScript(launcherCommand, launcherArgs, suite) {
10175
return false;
10276
}
10377

104-
function runTest(evalcode, suite, testPath) {
105-
if (/\bsetTimeout\b/.test(evalcode) && !nodeCommand) {
106-
console.log(testPath + ': could not run test using setTimeout (set GRAALVM_NODE to GraalVM\'s `node` binary and rerun to get results)');
107-
return 'skip';
108-
}
109-
110-
var script =
111-
prelude + '\n' +
112-
'var evalcode = ' + JSON.stringify(evalcode) + ';\n' +
113-
'var result = eval(evalcode);\n' +
114-
'if (result) {\n' +
115-
' console.log("[SUCCESS]");\n' +
116-
'}\n';
117-
118-
fs.writeFileSync(testScriptFilename, script);
119-
120-
if (evalcode.match(/\bsetTimeout\b/)) {
121-
return executeTestScript(nodeCommand, nodeArgs, suite);
122-
} else {
123-
return executeTestScript(jsCommand, jsArgs, suite);
124-
}
125-
}
126-
12778
function resultsMatch(expect, actual) {
12879
if (expect === actual) {
12980
return true;
@@ -134,4 +85,4 @@ function resultsMatch(expect, actual) {
13485
return false;
13586
}
13687

137-
runner_support.runTests(runTest, graalvmKey, 'GraalVM', { resultsMatch: resultsMatch });
88+
runner_support.runTests(graalvmRunner, graalvmKey, 'GraalVM', { resultsMatch: resultsMatch });

hermes.js

+3-86
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
* suitename can be 'all'
1010
*/
1111

12-
var fs = require('fs');
1312
var child_process = require('child_process');
1413
var console = require('console');
1514
var runner_support = require('./runner_support');
@@ -47,7 +46,6 @@ var argv = require('yargs/yargs')(process.argv.slice(2))
4746
var hermesCommand = argv.hermesBin;
4847
var suites = argv.suite;
4948
suites = suites === 'all' ? '' : suites;
50-
var testName = argv.testName;
5149

5250
// Key for .res (e.g. test.res.hermes0_7_0), automatic based on `hermes -version`.
5351
var hermesKey = (function () {
@@ -63,63 +61,6 @@ var hermesKey = (function () {
6361
})();
6462
console.log('Hermes result key is: test.res.' + hermesKey);
6563

66-
var asyncTestHelperHead =
67-
'var asyncPassed = false;\n' +
68-
'\n' +
69-
'function asyncTestPassed() {\n' +
70-
' asyncPassed = true;\n' +
71-
'}\n' +
72-
'\n' +
73-
'function setTimeout(cb, time, cbarg) {\n' +
74-
' if (!jobqueue[time]) {\n' +
75-
' jobqueue[time] = [];\n' +
76-
' }\n' +
77-
' jobqueue[time].push({cb, cbarg, startTime: Date.now(), timeout: time});\n' +
78-
'}\n' +
79-
'\n' +
80-
'var jobqueue = [];\n';
81-
82-
var asyncTestHelperTail =
83-
'const thenCb = job => {\n' +
84-
' job.cb(job.cbarg)\n' +
85-
'}\n' +
86-
'\n' +
87-
'const catchCb = job => {\n' +
88-
' jobRunner(job);\n' +
89-
'}\n' +
90-
'\n' +
91-
'function jobRunner(job){\n' +
92-
' return new Promise((resolve, reject) => {\n' +
93-
' let diff = Date.now() - job.startTime;\n' +
94-
' if (diff >= job.timeout) {\n' +
95-
' if (!job.run) {\n' +
96-
' job.run = true;\n' +
97-
' resolve (job);\n' +
98-
' }\n' +
99-
' } else {\n' +
100-
' reject (job)\n' +
101-
' }\n' +
102-
' })\n' +
103-
' .then(thenCb)\n' +
104-
' .catch(catchCb)\n' +
105-
'}\n' +
106-
'\n' +
107-
'jobqueue.forEach(function(jobs, index) {\n' +
108-
' for (var job of jobs) {\n' +
109-
' jobRunner(job);\n' +
110-
' }\n' +
111-
'});\n' +
112-
'\n' +
113-
'function onCloseAsyncCheck() {\n' +
114-
' if (!asyncPassed) {\n' +
115-
' print("Async[FAILURE]");\n' +
116-
' throw "Async check failed";\n' +
117-
' }\n' +
118-
' print("[SUCCESS]");\n' +
119-
'}\n' +
120-
'\n' +
121-
'Promise.resolve().then(onCloseAsyncCheck);\n';
122-
12364
function getArgs(testFilename) {
12465
var processArgs = [
12566
/*'-enable-eval',*/
@@ -146,39 +87,15 @@ function getArgs(testFilename) {
14687
return processArgs;
14788
}
14889

149-
function runTest(evalcode) {
150-
var testFilename = 'hermestest.js';
90+
function hermesRunner(testFilename) {
15191
var processArgs = getArgs(testFilename);
152-
var script = '';
153-
154-
if (evalcode.includes('__createIterableObject')) {
155-
script += runner_support.createIterableHelper;
156-
} else if (evalcode.includes('global')) {
157-
script += 'var global = this;\n';
158-
}
159-
160-
if (evalcode.includes('asyncTestPassed')) {
161-
script += asyncTestHelperHead + evalcode + asyncTestHelperTail;
162-
} else {
163-
script += 'var evalcode = ' + JSON.stringify(evalcode) + ';\n' +
164-
'try {\n' +
165-
' var res = eval(evalcode);\n' +
166-
' if (!res) { throw new Error("failed: " + res); }\n' +
167-
' print("[SUCCESS]");\n' +
168-
'} catch (e) {\n' +
169-
' print("[FAILURE]", e);\n' +
170-
' /*throw e;*/\n' +
171-
'}\n';
172-
}
173-
174-
fs.writeFileSync(testFilename, script);
17592

17693
try {
17794
var stdout = child_process.execFileSync(hermesCommand, processArgs, {
17895
encoding: 'utf-8'
17996
});
18097

181-
return /^\[SUCCESS\]$/gm.test(stdout);
98+
return /^\[SUCCESS\]$/m.test(stdout);
18299
} catch (e) {
183100
// console.log(e);
184101
return false;
@@ -206,4 +123,4 @@ function resultsMatch(expect, actual) {
206123
return expect === actual;
207124
}
208125

209-
runner_support.runTests(runTest, hermesKey, 'Hermes', { resultsMatch: resultsMatch, suites: suites, testName: testName, bail: argv.bail });
126+
runner_support.runTests(hermesRunner, hermesKey, 'Hermes', { resultsMatch: resultsMatch, suites: suites, testName: argv.testName, bail: argv.bail });

0 commit comments

Comments
 (0)