Skip to content
This repository was archived by the owner on Nov 2, 2023. It is now read-only.

Commit 0a52e1e

Browse files
committed
Add vows-based unit tests.
These tests demonstrate the problems reported in more comprehensive unit tests.
1 parent 7000235 commit 0a52e1e

File tree

2 files changed

+99
-2
lines changed

2 files changed

+99
-2
lines changed

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,7 @@
2020
"type":"git",
2121
"url":"http://github.com/kriszyp/json-schema"
2222
},
23-
"directories": { "lib": "./lib" }
24-
}
23+
"directories": { "lib": "./lib" },
24+
"devDependencies": { "vows": "*" },
25+
"scripts": { "test": "echo TESTS DISABLED vows --spec test/*.js" }
26+
}

test/tests.js

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
var assert = require('assert');
2+
var vows = require('vows');
3+
var path = require('path');
4+
var fs = require('fs');
5+
6+
var validate = require('../lib/validate').validate;
7+
8+
9+
var revision = 'draft-03';
10+
var schemaRoot = path.join(__dirname, '..', revision);
11+
var schemaNames = ['schema', 'hyper-schema', 'links', 'json-ref' ];
12+
var schemas = {};
13+
14+
schemaNames.forEach(function(name) {
15+
var file = path.join(schemaRoot, name);
16+
schemas[name] = loadSchema(file);
17+
});
18+
19+
schemaNames.forEach(function(name) {
20+
var s, n = name+'-nsd', f = path.join(schemaRoot, name);
21+
schemas[n] = loadSchema(f);
22+
s = schemas[n];
23+
delete s['$schema'];
24+
});
25+
26+
function loadSchema(path) {
27+
var data = fs.readFileSync(path, 'utf-8');
28+
var schema = JSON.parse(data);
29+
return schema;
30+
}
31+
32+
function resultIsValid() {
33+
return function(result) {
34+
assert.isObject(result);
35+
//assert.isBoolean(result.valid);
36+
assert.equal(typeof(result.valid), 'boolean');
37+
assert.isArray(result.errors);
38+
for (var i = 0; i < result.errors.length; i++) {
39+
assert.notEqual(result.errors[i], null, 'errors['+i+'] is null');
40+
}
41+
}
42+
}
43+
44+
function assertValidates(doc, schema) {
45+
var context = {};
46+
47+
context[': validate('+doc+', '+schema+')'] = {
48+
topic: validate(schemas[doc], schemas[schema]),
49+
'returns valid result': resultIsValid(),
50+
'with valid=true': function(result) { assert.equal(result.valid, true); },
51+
'and no errors': function(result) {
52+
// XXX work-around for bug in vows: [null] chokes it
53+
if (result.errors[0] == null) assert.fail('(errors contains null)');
54+
assert.length(result.errors, 0);
55+
}
56+
};
57+
58+
return context;
59+
}
60+
61+
function assertSelfValidates(doc) {
62+
var context = {};
63+
64+
context[': validate('+doc+')'] = {
65+
topic: validate(schemas[doc]),
66+
'returns valid result': resultIsValid(),
67+
'with valid=true': function(result) { assert.equal(result.valid, true); },
68+
'and no errors': function(result) { assert.length(result.errors, 0); }
69+
};
70+
71+
return context;
72+
}
73+
74+
var suite = vows.describe('JSON Schema').addBatch({
75+
'Core-NSD self-validates': assertSelfValidates('schema-nsd'),
76+
'Core-NSD/Core-NSD': assertValidates('schema-nsd', 'schema-nsd'),
77+
'Core-NSD/Core': assertValidates('schema-nsd', 'schema'),
78+
79+
'Core self-validates': assertSelfValidates('schema'),
80+
'Core/Core': assertValidates('schema', 'schema'),
81+
82+
'Hyper-NSD self-validates': assertSelfValidates('hyper-schema-nsd'),
83+
'Hyper self-validates': assertSelfValidates('hyper-schema'),
84+
'Hyper/Hyper': assertValidates('hyper-schema', 'hyper-schema'),
85+
'Hyper/Core': assertValidates('hyper-schema', 'schema'),
86+
87+
'Links-NSD self-validates': assertSelfValidates('links-nsd'),
88+
'Links self-validates': assertSelfValidates('links'),
89+
'Links/Hyper': assertValidates('links', 'hyper-schema'),
90+
'Links/Core': assertValidates('links', 'schema'),
91+
92+
'Json-Ref self-validates': assertSelfValidates('json-ref'),
93+
'Json-Ref/Hyper': assertValidates('json-ref', 'hyper-schema'),
94+
'Json-Ref/Core': assertValidates('json-ref', 'schema')
95+
}).export(module);

0 commit comments

Comments
 (0)