diff options
Diffstat (limited to 'node_modules/json-schema/test')
| -rw-r--r-- | node_modules/json-schema/test/tests.js | 95 | 
1 files changed, 95 insertions, 0 deletions
| diff --git a/node_modules/json-schema/test/tests.js b/node_modules/json-schema/test/tests.js new file mode 100644 index 0000000..2938aea --- /dev/null +++ b/node_modules/json-schema/test/tests.js @@ -0,0 +1,95 @@ +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);
 | 
