You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							95 lines
						
					
					
						
							3.1 KiB
						
					
					
				
			
		
		
	
	
							95 lines
						
					
					
						
							3.1 KiB
						
					
					
				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);
 | 
						|
 |