diff options
Diffstat (limited to 'JSONSchema/validate.js')
-rwxr-xr-x | JSONSchema/validate.js | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/JSONSchema/validate.js b/JSONSchema/validate.js new file mode 100755 index 000000000..1a1a605db --- /dev/null +++ b/JSONSchema/validate.js @@ -0,0 +1,73 @@ +#! /bin/env node + +var fs = require('fs'); +var validate = require('jsonschema').validate; +var readline = require('readline'); + +var schemaFile = process.argv[2]; +var schema = ''; +var testCode = ''; +var success = true; +var numFiles = 0; +var numFailed = 0; +var numSucceeded = 0; +var fileNames = []; + +var rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + terminal: false +}); + +rl.on('line', function(line) { + fileNames.push(line); +}); + +rl.on('close', function() { + schema = JSON.parse(fs.readFileSync(schemaFile)); + + //sort file names alphabetically so that log output ordering is consistent + fileNames.sort(function(a,b) { + if(a<b) { + return -1; + } else { + return 1; + } + + return 0; + }); + + for (var i = 0; i < fileNames.length; i++) { + try { + testCode = JSON.parse(fs.readFileSync(fileNames[i])); + } catch(e) { + console.log('error on file:', fileNames[i]) + console.log(e); + numFailed++; + } + + try { + var x = validate(testCode, schema); + + if (x.errors.length > 0) { + numFailed++; + console.log(fileNames[i]+ ':\n'); + for (var j = 0; j < x.errors.length; j++) { + console.log(' ' + x.errors[j] + '\n') + } + } else { + numSucceeded++; + } + } catch (e) { + console.log(e); + numFailed++; + } + } + + console.log("Valid: "+numSucceeded+"\n"); + console.log("Failed: "+numFailed+"\n"); + + if(numFailed > 0) { + process.exit(-1); + } +}); |