96 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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);
 |