Spaces:
Sleeping
Sleeping
| /* | |
| * a node.js test runner that executes all conformance | |
| * tests and outputs results to console. | |
| * Process returns zero on success, non-zero on failure. | |
| */ | |
| const fs = require('fs'), | |
| path = require('path'), | |
| jsonselect = require('../jsonselect.js'), | |
| sys = require('sys'); | |
| var pathToTests = path.join(__dirname, "tests"); | |
| // a map: document nametest name -> list of se | |
| var numTests = 0; | |
| var numPassed = 0; | |
| var tests = {}; | |
| function runOneSync(name, selname, p) { | |
| var testDocPath = path.join(p, name + ".json"); | |
| var selDocPath = path.join(p, name + '_' + | |
| selname + ".selector"); | |
| var outputDocPath = selDocPath.replace(/selector$/, "output"); | |
| // take `obj`, apply `sel, get `got`, is it what we `want`? | |
| var obj = JSON.parse(fs.readFileSync(testDocPath)); | |
| var want = String(fs.readFileSync(outputDocPath)).trim(); | |
| var got = ""; | |
| var sel = String(fs.readFileSync(selDocPath)).trim(); | |
| try { | |
| jsonselect.forEach(sel, obj, function(m) { | |
| got += JSON.stringify(m, undefined, 4) + "\n"; | |
| }); | |
| } catch(e) { | |
| got = e.toString(); | |
| if (want.trim() != got.trim()) throw e; | |
| } | |
| if (want.trim() != got.trim()) throw "mismatch"; | |
| } | |
| function runTests() { | |
| console.log("Running Tests:"); | |
| for (var l in tests) { | |
| for (var d in tests[l]) { | |
| console.log(" level " + l + " tests against \"" + d + ".json\":"); | |
| for (var i = 0; i < tests[l][d].length; i++) { | |
| sys.print(" " + tests[l][d][i][0] + ": "); | |
| try { | |
| runOneSync(d, tests[l][d][i][0], tests[l][d][i][1]); | |
| numPassed++; | |
| console.log("pass"); | |
| } catch (e) { | |
| console.log("fail (" + e.toString() + ")"); | |
| } | |
| } | |
| } | |
| } | |
| console.log(numPassed + "/" + numTests + " passed"); | |
| process.exit(numPassed == numTests ? 0 : 1); | |
| } | |
| // discover all tests | |
| var pathToTests = path.join(__dirname, "tests"); | |
| fs.readdirSync(pathToTests).forEach(function(subdir) { | |
| var p = path.join(pathToTests, subdir); | |
| if (!fs.statSync(p).isDirectory()) return; | |
| var l = /^level_([\d+])$/.exec(subdir); | |
| if (!l) return; | |
| l = l[1]; | |
| var files = fs.readdirSync(p); | |
| for (var i = 0; i < files.length; i++) { | |
| var f = files[i]; | |
| var m = /^([A-Za-z]+)_(.+)\.selector$/.exec(f); | |
| if (m) { | |
| if (!tests.hasOwnProperty(l)) tests[l] = []; | |
| if (!tests[l].hasOwnProperty(m[1])) tests[l][m[1]] = []; | |
| numTests++; | |
| tests[l][m[1]].push([m[2], p]); | |
| } | |
| } | |
| }); | |
| runTests(); | |