477 lines
12 KiB
JavaScript
477 lines
12 KiB
JavaScript
'use strict';
|
|
|
|
var Ajv = require('./ajv');
|
|
require('./chai').should();
|
|
|
|
|
|
describe('boolean schemas', function() {
|
|
var ajvs;
|
|
|
|
before(function() {
|
|
ajvs = [
|
|
new Ajv,
|
|
new Ajv({allErrors: true}),
|
|
new Ajv({inlineRefs: false})
|
|
];
|
|
});
|
|
|
|
describe('top level schema', function() {
|
|
describe('schema = true', function() {
|
|
it('should validate any data as valid', function() {
|
|
ajvs.forEach(test(true, true));
|
|
});
|
|
});
|
|
|
|
describe('schema = false', function() {
|
|
it('should validate any data as invalid', function() {
|
|
ajvs.forEach(test(false, false));
|
|
});
|
|
});
|
|
|
|
function test(boolSchema, valid) {
|
|
return function (ajv) {
|
|
var validate = ajv.compile(boolSchema);
|
|
testSchema(validate, valid);
|
|
};
|
|
}
|
|
});
|
|
|
|
|
|
describe('in properties / sub-properties', function() {
|
|
describe('schema = true', function() {
|
|
it('should be valid with any property value', function() {
|
|
ajvs.forEach(test(true, true));
|
|
});
|
|
});
|
|
|
|
describe('schema = false', function() {
|
|
it('should be invalid with any property value', function() {
|
|
ajvs.forEach(test(false, false));
|
|
});
|
|
});
|
|
|
|
function test(boolSchema, valid) {
|
|
return function (ajv) {
|
|
var schema = {
|
|
type: 'object',
|
|
properties: {
|
|
foo: boolSchema,
|
|
bar: {
|
|
type: 'object',
|
|
properties: {
|
|
baz: boolSchema
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
var validate = ajv.compile(schema);
|
|
validate({ foo: 1, bar: { baz: 1 }}) .should.equal(valid);
|
|
validate({ foo: '1', bar: { baz: '1' }}) .should.equal(valid);
|
|
validate({ foo: {}, bar: { baz: {} }}) .should.equal(valid);
|
|
validate({ foo: [], bar: { baz: [] }}) .should.equal(valid);
|
|
validate({ foo: true, bar: { baz: true }}) .should.equal(valid);
|
|
validate({ foo: false, bar: { baz: false }}) .should.equal(valid);
|
|
validate({ foo: null, bar: { baz: null }}) .should.equal(valid);
|
|
|
|
validate({ bar: { quux: 1 } }) .should.equal(true);
|
|
};
|
|
}
|
|
});
|
|
|
|
|
|
describe('in items / sub-items', function() {
|
|
describe('schema = true', function() {
|
|
it('should be valid with any item value', function() {
|
|
ajvs.forEach(test(true, true));
|
|
});
|
|
});
|
|
|
|
describe('schema = false', function() {
|
|
it('should be invalid with any item value', function() {
|
|
ajvs.forEach(test(false, false));
|
|
});
|
|
});
|
|
|
|
function test(boolSchema, valid) {
|
|
return function (ajv) {
|
|
var schema = {
|
|
type: 'array',
|
|
items: boolSchema
|
|
};
|
|
|
|
var validate = ajv.compile(schema);
|
|
validate([ 1 ]) .should.equal(valid);
|
|
validate([ '1' ]) .should.equal(valid);
|
|
validate([ {} ]) .should.equal(valid);
|
|
validate([ [] ]) .should.equal(valid);
|
|
validate([ true ]) .should.equal(valid);
|
|
validate([ false ]) .should.equal(valid);
|
|
validate([ null ]) .should.equal(valid);
|
|
|
|
validate([]) .should.equal(true);
|
|
|
|
schema = {
|
|
type: 'array',
|
|
items: [
|
|
true,
|
|
{
|
|
type: 'array',
|
|
items: [
|
|
true,
|
|
boolSchema
|
|
]
|
|
},
|
|
boolSchema
|
|
]
|
|
};
|
|
|
|
validate = ajv.compile(schema);
|
|
validate([ 1, [ 1, 1 ], 1 ]) .should.equal(valid);
|
|
validate([ '1', [ '1', '1' ], '1' ]) .should.equal(valid);
|
|
validate([ {}, [ {}, {} ], {} ]) .should.equal(valid);
|
|
validate([ [], [ [], [] ], [] ]) .should.equal(valid);
|
|
validate([ true, [ true, true ], true ]) .should.equal(valid);
|
|
validate([ false, [ false, false ], false ]) .should.equal(valid);
|
|
validate([ null, [ null, null ], null ]) .should.equal(valid);
|
|
|
|
validate([ 1, [ 1 ] ]) .should.equal(true);
|
|
};
|
|
}
|
|
});
|
|
|
|
|
|
describe('in dependencies and sub-dependencies', function() {
|
|
describe('schema = true', function() {
|
|
it('should be valid with any property value', function() {
|
|
ajvs.forEach(test(true, true));
|
|
});
|
|
});
|
|
|
|
describe('schema = false', function() {
|
|
it('should be invalid with any property value', function() {
|
|
ajvs.forEach(test(false, false));
|
|
});
|
|
});
|
|
|
|
function test(boolSchema, valid) {
|
|
return function (ajv) {
|
|
var schema = {
|
|
type: 'object',
|
|
dependencies: {
|
|
foo: boolSchema,
|
|
bar: {
|
|
type: 'object',
|
|
dependencies: {
|
|
baz: boolSchema
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
var validate = ajv.compile(schema);
|
|
validate({ foo: 1, bar: 1, baz: 1 }) .should.equal(valid);
|
|
validate({ foo: '1', bar: '1', baz: '1' }) .should.equal(valid);
|
|
validate({ foo: {}, bar: {}, baz: {} }) .should.equal(valid);
|
|
validate({ foo: [], bar: [], baz: [] }) .should.equal(valid);
|
|
validate({ foo: true, bar: true, baz: true }) .should.equal(valid);
|
|
validate({ foo: false, bar: false, baz: false }) .should.equal(valid);
|
|
validate({ foo: null, bar: null, baz: null }) .should.equal(valid);
|
|
|
|
validate({ bar: 1, quux: 1 }) .should.equal(true);
|
|
};
|
|
}
|
|
});
|
|
|
|
|
|
describe('in patternProperties', function () {
|
|
describe('schema = true', function() {
|
|
it('should be valid with any property matching pattern', function() {
|
|
ajvs.forEach(test(true, true));
|
|
});
|
|
});
|
|
|
|
describe('schema = false', function() {
|
|
it('should be invalid with any property matching pattern', function() {
|
|
ajvs.forEach(test(false, false));
|
|
});
|
|
});
|
|
|
|
function test(boolSchema, valid) {
|
|
return function (ajv) {
|
|
var schema = {
|
|
type: 'object',
|
|
patternProperties: {
|
|
'^f': boolSchema,
|
|
'r$': {
|
|
type: 'object',
|
|
patternProperties: {
|
|
'z$': boolSchema
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
var validate = ajv.compile(schema);
|
|
validate({ foo: 1, bar: { baz: 1 }}) .should.equal(valid);
|
|
validate({ foo: '1', bar: { baz: '1' }}) .should.equal(valid);
|
|
validate({ foo: {}, bar: { baz: {} }}) .should.equal(valid);
|
|
validate({ foo: [], bar: { baz: [] }}) .should.equal(valid);
|
|
validate({ foo: true, bar: { baz: true }}) .should.equal(valid);
|
|
validate({ foo: false, bar: { baz: false }}) .should.equal(valid);
|
|
validate({ foo: null, bar: { baz: null }}) .should.equal(valid);
|
|
|
|
validate({ bar: { quux: 1 } }) .should.equal(true);
|
|
};
|
|
}
|
|
});
|
|
|
|
|
|
describe('in propertyNames', function() {
|
|
describe('schema = true', function() {
|
|
it('should be valid with any property', function() {
|
|
ajvs.forEach(test(true, true));
|
|
});
|
|
});
|
|
|
|
describe('schema = false', function() {
|
|
it('should be invalid with any property', function() {
|
|
ajvs.forEach(test(false, false));
|
|
});
|
|
});
|
|
|
|
function test(boolSchema, valid) {
|
|
return function (ajv) {
|
|
var schema = {
|
|
type: 'object',
|
|
propertyNames: boolSchema
|
|
};
|
|
|
|
var validate = ajv.compile(schema);
|
|
validate({ foo: 1 }) .should.equal(valid);
|
|
validate({ bar: 1 }) .should.equal(valid);
|
|
|
|
validate({}) .should.equal(true);
|
|
};
|
|
}
|
|
});
|
|
|
|
|
|
describe('in contains', function() {
|
|
describe('schema = true', function() {
|
|
it('should be valid with any items', function() {
|
|
ajvs.forEach(test(true, true));
|
|
});
|
|
});
|
|
|
|
describe('schema = false', function() {
|
|
it('should be invalid with any items', function() {
|
|
ajvs.forEach(test(false, false));
|
|
});
|
|
});
|
|
|
|
function test(boolSchema, valid) {
|
|
return function (ajv) {
|
|
var schema = {
|
|
type: 'array',
|
|
contains: boolSchema
|
|
};
|
|
|
|
var validate = ajv.compile(schema);
|
|
validate([ 1 ]) .should.equal(valid);
|
|
validate([ 'foo' ]) .should.equal(valid);
|
|
validate([ {} ]) .should.equal(valid);
|
|
validate([ [] ]) .should.equal(valid);
|
|
validate([ true ]) .should.equal(valid);
|
|
validate([ false ]) .should.equal(valid);
|
|
validate([ null ]) .should.equal(valid);
|
|
|
|
validate([]) .should.equal(false);
|
|
};
|
|
}
|
|
});
|
|
|
|
|
|
describe('in not', function() {
|
|
describe('schema = true', function() {
|
|
it('should be invalid with any data', function() {
|
|
ajvs.forEach(test(true, false));
|
|
});
|
|
});
|
|
|
|
describe('schema = false', function() {
|
|
it('should be valid with any data', function() {
|
|
ajvs.forEach(test(false, true));
|
|
});
|
|
});
|
|
|
|
function test(boolSchema, valid) {
|
|
return function (ajv) {
|
|
var schema = {
|
|
not: boolSchema
|
|
};
|
|
|
|
var validate = ajv.compile(schema);
|
|
testSchema(validate, valid);
|
|
};
|
|
}
|
|
});
|
|
|
|
|
|
describe('in allOf', function() {
|
|
describe('schema = true', function() {
|
|
it('should be valid with any data', function() {
|
|
ajvs.forEach(test(true, true));
|
|
});
|
|
});
|
|
|
|
describe('schema = false', function() {
|
|
it('should be invalid with any data', function() {
|
|
ajvs.forEach(test(false, false));
|
|
});
|
|
});
|
|
|
|
function test(boolSchema, valid) {
|
|
return function (ajv) {
|
|
var schema = {
|
|
allOf: [
|
|
false,
|
|
boolSchema
|
|
]
|
|
};
|
|
|
|
var validate = ajv.compile(schema);
|
|
testSchema(validate, false);
|
|
|
|
schema = {
|
|
allOf: [
|
|
true,
|
|
boolSchema
|
|
]
|
|
};
|
|
|
|
validate = ajv.compile(schema);
|
|
testSchema(validate, valid);
|
|
};
|
|
}
|
|
});
|
|
|
|
|
|
describe('in anyOf', function() {
|
|
describe('schema = true', function() {
|
|
it('should be valid with any data', function() {
|
|
ajvs.forEach(test(true, true));
|
|
});
|
|
});
|
|
|
|
describe('schema = false', function() {
|
|
it('should be invalid with any data', function() {
|
|
ajvs.forEach(test(false, false));
|
|
});
|
|
});
|
|
|
|
function test(boolSchema, valid) {
|
|
return function (ajv) {
|
|
var schema = {
|
|
anyOf: [
|
|
false,
|
|
boolSchema
|
|
]
|
|
};
|
|
|
|
var validate = ajv.compile(schema);
|
|
testSchema(validate, valid);
|
|
|
|
schema = {
|
|
anyOf: [
|
|
true,
|
|
boolSchema
|
|
]
|
|
};
|
|
|
|
validate = ajv.compile(schema);
|
|
testSchema(validate, true);
|
|
};
|
|
}
|
|
});
|
|
|
|
|
|
describe('in oneOf', function() {
|
|
describe('schema = true', function() {
|
|
it('should be valid with any data', function() {
|
|
ajvs.forEach(test(true, true));
|
|
});
|
|
});
|
|
|
|
describe('schema = false', function() {
|
|
it('should be invalid with any data', function() {
|
|
ajvs.forEach(test(false, false));
|
|
});
|
|
});
|
|
|
|
function test(boolSchema, valid) {
|
|
return function (ajv) {
|
|
var schema = {
|
|
oneOf: [
|
|
false,
|
|
boolSchema
|
|
]
|
|
};
|
|
|
|
var validate = ajv.compile(schema);
|
|
testSchema(validate, valid);
|
|
|
|
schema = {
|
|
oneOf: [
|
|
true,
|
|
boolSchema
|
|
]
|
|
};
|
|
|
|
validate = ajv.compile(schema);
|
|
testSchema(validate, !valid);
|
|
};
|
|
}
|
|
});
|
|
|
|
|
|
describe('in $ref', function() {
|
|
describe('schema = true', function() {
|
|
it('should be valid with any data', function() {
|
|
ajvs.forEach(test(true, true));
|
|
});
|
|
});
|
|
|
|
describe('schema = false', function() {
|
|
it('should be invalid with any data', function() {
|
|
ajvs.forEach(test(false, false));
|
|
});
|
|
});
|
|
|
|
function test(boolSchema, valid) {
|
|
return function (ajv) {
|
|
var schema = {
|
|
$ref: '#/definitions/bool',
|
|
definitions: {
|
|
bool: boolSchema
|
|
}
|
|
};
|
|
|
|
var validate = ajv.compile(schema);
|
|
testSchema(validate, valid);
|
|
};
|
|
}
|
|
});
|
|
|
|
|
|
function testSchema(validate, valid) {
|
|
validate(1) .should.equal(valid);
|
|
validate('foo') .should.equal(valid);
|
|
validate({}) .should.equal(valid);
|
|
validate([]) .should.equal(valid);
|
|
validate(true) .should.equal(valid);
|
|
validate(false) .should.equal(valid);
|
|
validate(null) .should.equal(valid);
|
|
}
|
|
});
|