Skip to content

Commit c08c4db

Browse files
committed
Fix unit testing harness to properly run tests sequentially.
1 parent a67a171 commit c08c4db

File tree

1 file changed

+65
-49
lines changed

1 file changed

+65
-49
lines changed

test/testunit.js

Lines changed: 65 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ const program = require('commander');
44

55
function test (python3, opt) {
66
var startime, endtime, elapsed;
7-
7+
88
// Import Skulpt
99
var skulptname = 'skulpt.js';
1010
if (opt) {
11-
skulptname = 'skulpt.min.js';
11+
skulptname = 'skulpt.min.js';
1212
}
1313
require('../dist/' + skulptname);
1414
Sk.js_beautify = require('js-beautify').js;
@@ -17,65 +17,81 @@ function test (python3, opt) {
1717
var dir, pyver;
1818

1919
if (python3) {
20-
dir = "test/unit3";
21-
pyver = Sk.python3;
20+
dir = "test/unit3";
21+
pyver = Sk.python3;
2222
} else {
23-
dir = "test/unit";
24-
pyver = Sk.python2;
23+
dir = "test/unit";
24+
pyver = Sk.python2;
2525
}
2626

27-
var passTot = 0;
28-
var failTot = 0;
29-
var buf, found;
30-
31-
var regexp = /.*Ran.*passed:\s+(\d+)\s+failed:\s+(\d+)/g;
27+
const regexp = /.*Ran.*passed:\s+(\d+)\s+failed:\s+(\d+)/g;
3228

3329
// Configure Skulpt to run unit tests
3430
Sk.configure({
35-
syspath: [dir],
36-
read: (fname) => { return fs.readFileSync(fname, "utf8"); },
37-
output: (args) => { buf += args; },
38-
__future__: pyver
31+
syspath: [dir],
32+
read: (fname) => { return fs.readFileSync(fname, "utf8"); },
33+
output: (args) => { Sk.buf += args; },
34+
__future__: pyver
3935
});
4036

4137
// Test each existing unit test file
4238
var files = fs.readdirSync(dir);
39+
var modules = [];
40+
41+
for (var idx = 0; idx < files.length; idx++) {
42+
let file = dir + '/' + files[idx];
43+
let stat = fs.statSync(file);
44+
let basename = path.basename(file, ".py");
45+
46+
if (stat.isFile() && basename.startsWith("test_") && (path.extname(file) == ".py")) {
47+
modules.push([file, basename]);
48+
}
49+
}
50+
4351
starttime = Date.now();
44-
files.forEach((file) => {
45-
let fullname = dir + "/" + file;
46-
let stat = fs.statSync(fullname);
47-
let basename = path.basename(file, ".py");
48-
49-
if (stat.isFile() && basename.startsWith("test_") && (path.extname(file) == ".py")) {
50-
buf = "";
51-
console.log(fullname);
52-
53-
// Run Skulpt
54-
Sk.misceval.asyncToPromise(function() {
55-
return Sk.importMain(basename, false, true);
56-
}).then(function () {}, function(e) {
57-
failTot += 1;
58-
console.log("UNCAUGHT EXCEPTION: " + e);
59-
console.log(e.stack);
60-
process.exit(1);
61-
});
62-
63-
// Print results
64-
console.log(buf);
65-
66-
// Update results
67-
while ((found = regexp.exec(buf)) !== null) {
68-
passTot += parseInt(found[1]);
69-
failTot += parseInt(found[2]);
70-
}
71-
}
72-
});
7352

74-
endtime = Date.now();
75-
console.log("Summary");
76-
console.log("Passed: " + passTot + " Failed: " + failTot);
77-
elapsed = (endtime - starttime) / 1000;
78-
console.log("Total run time for all unit tests: " + elapsed.toString() + "s");
53+
function runtest (tests, passed, failed) {
54+
if (tests.length == 0) {
55+
endtime = Date.now();
56+
elapsed = (endtime - starttime) / 1000;
57+
console.log("Summary");
58+
console.log("Passed: " + passed + " Failed: " + failed);
59+
console.log("Total run time for all unit tests: " + elapsed.toString() + "s");
60+
return;
61+
}
62+
63+
var test = tests.shift();
64+
65+
// Clear output buffer
66+
Sk.buf = "";
67+
68+
// Print test name
69+
console.log(test[0] + "\n");
70+
71+
// Run test
72+
Sk.misceval.asyncToPromise(function() {
73+
return Sk.importMain(test[1], false, true);
74+
}).then(function () {
75+
var found;
76+
77+
// Print results
78+
console.log(Sk.buf);
79+
80+
// Update results
81+
while ((found = regexp.exec(Sk.buf)) !== null) {
82+
passed += parseInt(found[1]);
83+
failed += parseInt(found[2]);
84+
}
85+
}).catch(function (err) {
86+
failed += 1;
87+
console.log("UNCAUGHT EXCEPTION: " + err);
88+
console.log(err.stack);
89+
}).then(function () {
90+
runtest(tests, passed, failed)
91+
});
92+
}
93+
94+
runtest(modules, 0, 0);
7995
}
8096

8197
program

0 commit comments

Comments
 (0)