blob: 9d90ac0a0e1d6498a30abc0ae06914799e0ce3b2 [file] [log] [blame]
/* node runner for the JSONSelect conformance tests
https://github.com/lloyd/JSONSelectTests */
var assert = require("assert"),
fs = require("fs"),
path = require("path"),
colors = require("colors"),
traverse = require("traverse")
select = require("../index");
var options = require("nomnom").opts({
directory: {
abbr: 'd',
help: 'directory of tests to run',
metavar: 'PATH',
default: __dirname + "/level_1"
}
}).parseArgs();
var directory = options.directory,
files = fs.readdirSync(directory);
var jsonFiles = files.filter(function(file) {
return path.extname(file) == ".json";
});
jsonFiles.forEach(function(file) {
var jsonName = file.replace(/\..*$/, ""),
json = JSON.parse(fs.readFileSync(path.join(directory, file), "utf-8"));
var selFiles = files.filter(function(file) {
return file.indexOf(jsonName) == 0 && path.extname(file) == ".selector"
})
selFiles.forEach(function(file) {
var test = file.replace(/\..*$/, "");
var selector = fs.readFileSync(path.join(directory, file), "utf-8");
var output = fs.readFileSync(path.join(directory, test + ".output"), "utf-8");
var expected = JSON.parse(output).sort(sort);
var got = select(json, selector).nodes().sort(sort);
try {
assert.deepEqual(got, expected);
}
catch(AssertionError) {
console.log("\nfail".red + " " + test + "\ngot: ".blue + JSON.stringify(got)
+ "\n\expected: ".blue + JSON.stringify(expected) + "\n")
};
console.log("pass".green + " " + test);
});
});
function sort(a, b) {
if (JSON.stringify(a) < JSON.stringify(b)) {
return -1;
}
return 1;
}