optimised "not" keyword in {allErrors: true} mode to fail on the first error in subschema, closes #131
parent
ec0f1c1b22
commit
f48efb564a
|
@ -14,9 +14,19 @@
|
||||||
|
|
||||||
{{# def.setCompositeRule }}
|
{{# def.setCompositeRule }}
|
||||||
|
|
||||||
{{ $it.createErrors = false; }}
|
{{
|
||||||
|
$it.createErrors = false;
|
||||||
|
var $allErrorsOption;
|
||||||
|
if ($it.opts.allErrors) {
|
||||||
|
$allErrorsOption = $it.opts.allErrors;
|
||||||
|
$it.opts.allErrors = false;
|
||||||
|
}
|
||||||
|
}}
|
||||||
{{= it.validate($it) }}
|
{{= it.validate($it) }}
|
||||||
{{ $it.createErrors = true; }}
|
{{
|
||||||
|
$it.createErrors = true;
|
||||||
|
if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption;
|
||||||
|
}}
|
||||||
|
|
||||||
{{# def.resetCompositeRule }}
|
{{# def.resetCompositeRule }}
|
||||||
|
|
||||||
|
|
|
@ -547,4 +547,49 @@ describe('Ajv Options', function () {
|
||||||
return storeContext;
|
return storeContext;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
describe('allErrors', function() {
|
||||||
|
it('should be disabled inside "not" keyword', function() {
|
||||||
|
test(Ajv(), false);
|
||||||
|
test(Ajv({ allErrors: true }), true);
|
||||||
|
|
||||||
|
function test(ajv, allErrors) {
|
||||||
|
var format1called = false
|
||||||
|
, format2called = false;
|
||||||
|
|
||||||
|
ajv.addFormat('format1', function() {
|
||||||
|
format1called = true;
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
ajv.addFormat('format2', function() {
|
||||||
|
format2called = true;
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
var schema1 = {
|
||||||
|
allOf: [
|
||||||
|
{ format: 'format1' },
|
||||||
|
{ format: 'format2' }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
ajv.validate(schema1, 'abc') .should.equal(false);
|
||||||
|
ajv.errors .should.have.length(allErrors ? 2 : 1);
|
||||||
|
format1called .should.equal(true);
|
||||||
|
format2called .should.equal(allErrors);
|
||||||
|
|
||||||
|
var schema2 = {
|
||||||
|
not: schema1
|
||||||
|
};
|
||||||
|
|
||||||
|
format1called = format2called = false;
|
||||||
|
ajv.validate(schema2, 'abc') .should.equal(true);
|
||||||
|
should.equal(ajv.errors, null);
|
||||||
|
format1called .should.equal(true);
|
||||||
|
format2called .should.equal(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue