Skip to content

Commit

Permalink
Add support for validating all file types supported by any-json
Browse files Browse the repository at this point in the history
  • Loading branch information
adamvoss committed Jun 29, 2017
1 parent 178f313 commit 31f91be
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 36 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Polyglottal [Another] JSON Schema Validator

Command line interface for [ajv](https://github.com/epoberezkin/ajv) that utilizes [any-json](https://github.com/laktak/any-json/) to provide validation against many data formats.
Command line interface for [ajv](https://github.com/epoberezkin/ajv) that utilizes [any-json](https://github.com/laktak/any-json/) to provide validation against many data formats. `pjsv` can validate: **[CSON](https://github.com/bevry/cson), [Hjson](http://hjson.org/), [JSON](http://json.org/), [JSON5](http://json5.org/), and [YAML](http://yaml.org/)** files using JSON Schema. pjsv is a fork of [ajv-cli](https://github.com/jessedc/ajv-cli).

[![Build Status](https://travis-ci.org/json-schema-everywhere/pajv.svg?branch=master)](https://travis-ci.org/json-schema-everywhere/pajv)
[![npm version](https://badge.fury.io/js/pajv.svg)](https://www.npmjs.com/package/pajv)
Expand Down
10 changes: 3 additions & 7 deletions commands/util.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';

var anyjson = require('any-json');
var glob = require('glob');
var path = require('path');
var fs = require('fs');
Expand Down Expand Up @@ -31,19 +32,14 @@ function getFiles(args) {


function openFile(filename, suffix){
var json = null;
var file = path.resolve(process.cwd(), filename);
try {
try {
json = JSON.parse(fs.readFileSync(file).toString());
} catch(JSONerr) {
json = require(file);
}
var contents = fs.readFileSync(file).toString();
return anyjson.convert(contents, path.extname(filename));
} catch(err) {
console.error('error: ' + err.message.replace(' module', ' ' + suffix));
process.exit(2);
}
return json;
}


Expand Down
17 changes: 17 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,22 @@
"pajv": "index.js"
},
"preferGlobal": true,
"keywords": [
"JSON",
"schema",
"validator",
"validation",
"jsonschema",
"json-schema",
"json-schema-validator",
"json-schema-validation",
"cson",
"hjson",
"ini",
"json5",
"xml",
"yaml"
],
"author": "Adam Voss",
"contributors": [
{
Expand All @@ -38,6 +54,7 @@
},
"dependencies": {
"ajv": "^5.0.0",
"any-json": "^2.2.0",
"fast-json-patch": "^0.5.6",
"glob": "^7.0.3",
"minimist": "^1.2.0",
Expand Down
22 changes: 11 additions & 11 deletions test/test.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ describe('test', function() {

describe('test valid data', function() {
it('should pass if expected result is valid', function (done) {
cli('test -s test/schema -d test/valid_data --valid', function (error, stdout, stderr) {
cli('test -s test/schema.json -d test/valid_data.json --valid', function (error, stdout, stderr) {
assert.strictEqual(error, null);
assertNoErrors(stdout, 1, /\spassed/);
assert.equal(stderr, '');
Expand All @@ -18,7 +18,7 @@ describe('test', function() {
});

it('should pass multiple files if expected result is valid', function (done) {
cli('test -s test/schema -d "test/valid*.json" --valid', function (error, stdout, stderr) {
cli('test -s test/schema.json -d "test/valid*.json" --valid', function (error, stdout, stderr) {
assert.strictEqual(error, null);
assertNoErrors(stdout, 2, /\spassed/);
assert.equal(stderr, '');
Expand All @@ -27,7 +27,7 @@ describe('test', function() {
});

it('should fail if expected result is invalid', function (done) {
cli('test -s test/schema -d test/valid_data --invalid', function (error, stdout, stderr) {
cli('test -s test/schema.json -d test/valid_data.json --invalid', function (error, stdout, stderr) {
assert(error instanceof Error);
assertNoErrors(stderr, 1, /\sfailed/);
assert.equal(stdout, '');
Expand All @@ -36,7 +36,7 @@ describe('test', function() {
});

it('should fail multiple files if expected result is invalid', function (done) {
cli('test -s test/schema -d "test/valid*.json" --invalid', function (error, stdout, stderr) {
cli('test -s test/schema.json -d "test/valid*.json" --invalid', function (error, stdout, stderr) {
assert(error instanceof Error);
assertNoErrors(stderr, 2, /\sfailed/);
assert.equal(stdout, '');
Expand All @@ -48,7 +48,7 @@ describe('test', function() {

describe('test invalid data', function() {
it('should pass if expected result is invalid', function (done) {
cli('test -s test/schema -d test/invalid_data --invalid --errors=line', function (error, stdout, stderr) {
cli('test -s test/schema.json -d test/invalid_data.json --invalid --errors=line', function (error, stdout, stderr) {
assert.strictEqual(error, null);
assertRequiredErrors(stdout, 1, /\spassed/);
assert.equal(stderr, '');
Expand All @@ -57,7 +57,7 @@ describe('test', function() {
});

it('should pass if expected result is invalid (valid=false)', function (done) {
cli('test -s test/schema -d test/invalid_data --valid=false --errors=line', function (error, stdout, stderr) {
cli('test -s test/schema.json -d test/invalid_data.json --valid=false --errors=line', function (error, stdout, stderr) {
assert.strictEqual(error, null);
assertRequiredErrors(stdout, 1, /\spassed/);
assert.equal(stderr, '');
Expand All @@ -67,7 +67,7 @@ describe('test', function() {


it('should pass multiple files if expected result is invalid', function (done) {
cli('test -s test/schema -d "test/invalid*.json" --invalid --errors=line', function (error, stdout, stderr) {
cli('test -s test/schema.json -d "test/invalid*.json" --invalid --errors=line', function (error, stdout, stderr) {
assert.strictEqual(error, null);
assertRequiredErrors(stdout, 2, /\spassed/);
assert.equal(stderr, '');
Expand All @@ -76,7 +76,7 @@ describe('test', function() {
});

it('should fail if expected result is valid', function (done) {
cli('test -s test/schema -d test/invalid_data --valid --errors=line', function (error, stdout, stderr) {
cli('test -s test/schema.json -d test/invalid_data.json --valid --errors=line', function (error, stdout, stderr) {
assert(error instanceof Error);
assertRequiredErrors(stderr, 1, /\sfailed/);
assert.equal(stdout, '');
Expand All @@ -85,7 +85,7 @@ describe('test', function() {
});

it('should fail multiple files if expected result is valid', function (done) {
cli('test -s test/schema -d "test/invalid*.json" --valid --errors=line', function (error, stdout, stderr) {
cli('test -s test/schema.json -d "test/invalid*.json" --valid --errors=line', function (error, stdout, stderr) {
assert(error instanceof Error);
assertRequiredErrors(stderr, 2, /\sfailed/);
assert.equal(stdout, '');
Expand All @@ -97,7 +97,7 @@ describe('test', function() {

describe('test valid and invalid data', function() {
it('should pass valid, fail invalid and return error if expected result is valid', function (done) {
cli('test -s test/schema -d test/valid_data -d test/invalid_data --valid --errors=line', function (error, stdout, stderr) {
cli('test -s test/schema.json -d test/valid_data.json -d test/invalid_data.json --valid --errors=line', function (error, stdout, stderr) {
assert(error instanceof Error);
assertNoErrors(stdout, 1, /\spassed/);
assertRequiredErrors(stderr, 1, /\sfailed/);
Expand All @@ -106,7 +106,7 @@ describe('test', function() {
});

it('should fail valid, pass invalid and return error if expected result is invalid', function (done) {
cli('test -s test/schema -d test/valid_data -d test/invalid_data --invalid --errors=line', function (error, stdout, stderr) {
cli('test -s test/schema.json -d test/valid_data.json -d test/invalid_data.json --invalid --errors=line', function (error, stdout, stderr) {
assert(error instanceof Error);
assertNoErrors(stderr, 1, /\sfailed/);
assertRequiredErrors(stdout, 1, /\spassed/);
Expand Down
34 changes: 17 additions & 17 deletions test/validate.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ describe('validate', function() {

describe('single file validation', function() {
it('should validate valid data', function (done) {
cli('-s test/schema -d test/valid_data', function (error, stdout, stderr) {
cli('-s test/schema.json -d test/valid_data.json', function (error, stdout, stderr) {
assert.strictEqual(error, null);
assertValid(stdout, 1);
assert.equal(stderr, '');
Expand All @@ -27,7 +27,7 @@ describe('validate', function() {
});

it('should print usage if syntax is invalid', function (done) {
cli('-d test/valid_data', function (error, stdout, stderr) {
cli('-d test/valid_data.json', function (error, stdout, stderr) {
assert(error instanceof Error);
assert.equal(stdout, '');
assert(/usage/.test(stderr));
Expand All @@ -42,7 +42,7 @@ describe('validate', function() {
describe('multiple file validation', function() {
describe('with glob', function() {
it('should exit without error if all files are valid', function (done) {
cli('-s test/schema -d "test/valid*.json"', function (error, stdout, stderr) {
cli('-s test/schema.json -d "test/valid*.json"', function (error, stdout, stderr) {
assert.strictEqual(error, null);
assertValid(stdout, 2);
assert.equal(stderr, '');
Expand All @@ -51,7 +51,7 @@ describe('validate', function() {
});

it('should exit with error if some files are invalid', function (done) {
cli('-s test/schema -d "test/{valid,invalid}*.json" --errors=line', function (error, stdout, stderr) {
cli('-s test/schema.json -d "test/{valid,invalid}*.json" --errors=line', function (error, stdout, stderr) {
assert(error instanceof Error);
assertValid(stdout, 2);
assertRequiredErrors(stderr, '#', 2);
Expand All @@ -62,7 +62,7 @@ describe('validate', function() {

describe('with multiple files or patterns', function() {
it('should exit without error if all files are valid', function (done) {
cli('-s test/schema -d test/valid_data.json -d test/valid_data2.json', function (error, stdout, stderr) {
cli('-s test/schema.json -d test/valid_data.json -d test/valid_data2.json', function (error, stdout, stderr) {
assert.strictEqual(error, null);
assertValid(stdout, 2);
assert.equal(stderr, '');
Expand All @@ -71,7 +71,7 @@ describe('validate', function() {
});

it('should exit with error if some files are invalid', function (done) {
cli('-s test/schema -d test/valid_data.json -d test/valid_data2.json -d test/invalid_data.json --errors=line', function (error, stdout, stderr) {
cli('-s test/schema.json -d test/valid_data.json -d test/valid_data2.json -d test/invalid_data.json --errors=line', function (error, stdout, stderr) {
assert(error instanceof Error);
assertValid(stdout, 2);
assertRequiredErrors(stderr);
Expand All @@ -80,7 +80,7 @@ describe('validate', function() {
});

it('should exit with error if some files are invalid (multiple patterns)', function (done) {
cli('-s test/schema -d "test/valid*.json" -d "test/invalid*.json" --errors=line', function (error, stdout, stderr) {
cli('-s test/schema.json -d "test/valid*.json" -d "test/invalid*.json" --errors=line', function (error, stdout, stderr) {
assert(error instanceof Error);
assertValid(stdout, 2);
assertRequiredErrors(stderr, '#', 2);
Expand All @@ -93,7 +93,7 @@ describe('validate', function() {

describe('validate schema with $ref', function() {
it('should resolve reference and validate', function (done) {
cli('-s test/schema_with_ref -r test/schema -d test/valid_data', function (error, stdout, stderr) {
cli('-s test/schema_with_ref.json -r test/schema.json -d test/valid_data.json', function (error, stdout, stderr) {
assert.strictEqual(error, null);
assertValid(stdout, 1);
assert.equal(stderr, '');
Expand All @@ -102,7 +102,7 @@ describe('validate', function() {
});

it('should resolve reference and validate invalide data', function (done) {
cli('-s test/schema_with_ref -r test/schema -d test/invalid_data --errors=line', function (error, stdout, stderr) {
cli('-s test/schema_with_ref.json -r test/schema.json -d test/invalid_data.json --errors=line', function (error, stdout, stderr) {
assert(error instanceof Error);
assert.equal(stdout, '');
assertRequiredErrors(stderr, 'schema.json');
Expand All @@ -114,7 +114,7 @@ describe('validate', function() {

describe('validate with schema using added meta-schema', function() {
it('should validate valid data', function (done) {
cli('-s test/meta/schema -d test/meta/valid_data -m test/meta/meta_schema', function (error, stdout, stderr) {
cli('-s test/meta/schema.json -d test/meta/valid_data.json -m test/meta/meta_schema.json', function (error, stdout, stderr) {
assert.strictEqual(error, null);
assertValid(stdout, 1);
assert.equal(stderr, '');
Expand All @@ -123,7 +123,7 @@ describe('validate', function() {
});

it('should validate invalid data', function (done) {
cli('-s test/meta/schema -d test/meta/invalid_data -m test/meta/meta_schema --errors=line', function (error, stdout, stderr) {
cli('-s test/meta/schema.json -d test/meta/invalid_data.json -m test/meta/meta_schema.json --errors=line', function (error, stdout, stderr) {
assert(error instanceof Error);
assert.equal(stdout, '');
var results = assertErrors(stderr);
Expand All @@ -137,7 +137,7 @@ describe('validate', function() {
});

it('should fail on invalid schema', function (done) {
cli('-s test/meta/invalid_schema -d test/meta/valid_data -m test/meta/meta_schema --errors=line', function (error, stdout, stderr) {
cli('-s test/meta/invalid_schema.json -d test/meta/valid_data.json -m test/meta/meta_schema.json --errors=line', function (error, stdout, stderr) {
assert(error instanceof Error);
assert.equal(stdout, '');
var lines = stderr.split('\n');
Expand All @@ -154,7 +154,7 @@ describe('validate', function() {

describe('option "changes"', function() {
it('should log changes in the object after validation', function (done) {
cli('-s test/schema -d test/data_with_additional --remove-additional --changes=line', function (error, stdout, stderr) {
cli('-s test/schema.json -d test/data_with_additional.json --remove-additional --changes=line', function (error, stdout, stderr) {
assert.strictEqual(error, null);
var lines = assertValid(stdout, 1, 2);
assert(/changes/.test(lines[1]));
Expand All @@ -172,7 +172,7 @@ describe('validate', function() {

describe('custom keywords', function() {
it('should validate valid data; custom keyword definition in file', function (done) {
cli('validate -s test/custom/schema -c ./test/custom/typeof.js -d test/custom/valid_data', function (error, stdout, stderr) {
cli('validate -s test/custom/schema.json -c ./test/custom/typeof.js -d test/custom/valid_data.json', function (error, stdout, stderr) {
assert.strictEqual(error, null);
assertValid(stdout, 1);
assert.equal(stderr, '');
Expand All @@ -181,7 +181,7 @@ describe('validate', function() {
});

it('should validate valid data; custom keyword definition in package', function (done) {
cli('validate -s test/custom/schema -c ajv-keywords/keywords/typeof -d test/custom/valid_data', function (error, stdout, stderr) {
cli('validate -s test/custom/schema.json -c ajv-keywords/keywords/typeof -d test/custom/valid_data.json', function (error, stdout, stderr) {
assert.strictEqual(error, null);
assertValid(stdout, 1);
assert.equal(stderr, '');
Expand All @@ -190,7 +190,7 @@ describe('validate', function() {
});

it('should validate invalid data; custom keyword definition in file', function (done) {
cli('validate -s test/custom/schema -c ./test/custom/typeof.js -d test/custom/invalid_data --errors=line', function (error, stdout, stderr) {
cli('validate -s test/custom/schema.json -c ./test/custom/typeof.js -d test/custom/invalid_data.json --errors=line', function (error, stdout, stderr) {
assert(error instanceof Error);
assert.equal(stdout, '');
var results = assertErrors(stderr);
Expand All @@ -204,7 +204,7 @@ describe('validate', function() {
});

it('should validate invalid data; custom keyword definition in package', function (done) {
cli('validate -s test/custom/schema -c ajv-keywords/keywords/typeof -d test/custom/invalid_data --errors=line', function (error, stdout, stderr) {
cli('validate -s test/custom/schema.json -c ajv-keywords/keywords/typeof -d test/custom/invalid_data.json --errors=line', function (error, stdout, stderr) {
assert(error instanceof Error);
assert.equal(stdout, '');
var results = assertErrors(stderr);
Expand Down

0 comments on commit 31f91be

Please sign in to comment.