|
|
- var assert = require('assert');
- var vows = require('vows');
- var path = require('path');
- var fs = require('fs');
-
- var validate = require('../lib/validate').validate;
-
-
- var revision = 'draft-03';
- var schemaRoot = path.join(__dirname, '..', revision);
- var schemaNames = ['schema', 'hyper-schema', 'links', 'json-ref' ];
- var schemas = {};
-
- schemaNames.forEach(function(name) {
- var file = path.join(schemaRoot, name);
- schemas[name] = loadSchema(file);
- });
-
- schemaNames.forEach(function(name) {
- var s, n = name+'-nsd', f = path.join(schemaRoot, name);
- schemas[n] = loadSchema(f);
- s = schemas[n];
- delete s['$schema'];
- });
-
- function loadSchema(path) {
- var data = fs.readFileSync(path, 'utf-8');
- var schema = JSON.parse(data);
- return schema;
- }
-
- function resultIsValid() {
- return function(result) {
- assert.isObject(result);
- //assert.isBoolean(result.valid);
- assert.equal(typeof(result.valid), 'boolean');
- assert.isArray(result.errors);
- for (var i = 0; i < result.errors.length; i++) {
- assert.notEqual(result.errors[i], null, 'errors['+i+'] is null');
- }
- }
- }
-
- function assertValidates(doc, schema) {
- var context = {};
-
- context[': validate('+doc+', '+schema+')'] = {
- topic: validate(schemas[doc], schemas[schema]),
- 'returns valid result': resultIsValid(),
- 'with valid=true': function(result) { assert.equal(result.valid, true); },
- 'and no errors': function(result) {
- // XXX work-around for bug in vows: [null] chokes it
- if (result.errors[0] == null) assert.fail('(errors contains null)');
- assert.length(result.errors, 0);
- }
- };
-
- return context;
- }
-
- function assertSelfValidates(doc) {
- var context = {};
-
- context[': validate('+doc+')'] = {
- topic: validate(schemas[doc]),
- 'returns valid result': resultIsValid(),
- 'with valid=true': function(result) { assert.equal(result.valid, true); },
- 'and no errors': function(result) { assert.length(result.errors, 0); }
- };
-
- return context;
- }
-
- var suite = vows.describe('JSON Schema').addBatch({
- 'Core-NSD self-validates': assertSelfValidates('schema-nsd'),
- 'Core-NSD/Core-NSD': assertValidates('schema-nsd', 'schema-nsd'),
- 'Core-NSD/Core': assertValidates('schema-nsd', 'schema'),
-
- 'Core self-validates': assertSelfValidates('schema'),
- 'Core/Core': assertValidates('schema', 'schema'),
-
- 'Hyper-NSD self-validates': assertSelfValidates('hyper-schema-nsd'),
- 'Hyper self-validates': assertSelfValidates('hyper-schema'),
- 'Hyper/Hyper': assertValidates('hyper-schema', 'hyper-schema'),
- 'Hyper/Core': assertValidates('hyper-schema', 'schema'),
-
- 'Links-NSD self-validates': assertSelfValidates('links-nsd'),
- 'Links self-validates': assertSelfValidates('links'),
- 'Links/Hyper': assertValidates('links', 'hyper-schema'),
- 'Links/Core': assertValidates('links', 'schema'),
-
- 'Json-Ref self-validates': assertSelfValidates('json-ref'),
- 'Json-Ref/Hyper': assertValidates('json-ref', 'hyper-schema'),
- 'Json-Ref/Core': assertValidates('json-ref', 'schema')
- }).export(module);
|