[
{
"description"
:
"object properties validation"
,
"schema"
: {
"properties"
: {
"foo"
: {
"type"
:
"integer"
},
"bar"
: {
"type"
:
"string"
}
}
},
"tests"
: [
{
"description"
:
"both properties present and valid is valid"
,
"data"
: {
"foo"
: 1,
"bar"
:
"baz"
},
"valid"
:
true
},
{
"description"
:
"one property invalid is invalid"
,
"data"
: {
"foo"
: 1,
"bar"
: {}},
"valid"
:
false
},
{
"description"
:
"both properties invalid is invalid"
,
"data"
: {
"foo"
: [],
"bar"
: {}},
"valid"
:
false
},
{
"description"
:
"doesn't invalidate other properties"
,
"data"
: {
"quux"
: []},
"valid"
:
true
},
{
"description"
:
"ignores arrays"
,
"data"
: [],
"valid"
:
true
},
{
"description"
:
"ignores other non-objects"
,
"data"
: 12,
"valid"
:
true
}
]
},
{
"description"
:
"properties, patternProperties, additionalProperties interaction"
,
"schema"
: {
"properties"
: {
"foo"
: {
"type"
:
"array"
,
"maxItems"
: 3},
"bar"
: {
"type"
:
"array"
}
},
"patternProperties"
: {
"f.o"
: {
"minItems"
: 2}},
"additionalProperties"
: {
"type"
:
"integer"
}
},
"tests"
: [
{
"description"
:
"property validates property"
,
"data"
: {
"foo"
: [1, 2]},
"valid"
:
true
},
{
"description"
:
"property invalidates property"
,
"data"
: {
"foo"
: [1, 2, 3, 4]},
"valid"
:
false
},
{
"description"
:
"patternProperty invalidates property"
,
"data"
: {
"foo"
: []},
"valid"
:
false
},
{
"description"
:
"patternProperty validates nonproperty"
,
"data"
: {
"fxo"
: [1, 2]},
"valid"
:
true
},
{
"description"
:
"patternProperty invalidates nonproperty"
,
"data"
: {
"fxo"
: []},
"valid"
:
false
},
{
"description"
:
"additionalProperty ignores property"
,
"data"
: {
"bar"
: []},
"valid"
:
true
},
{
"description"
:
"additionalProperty validates others"
,
"data"
: {
"quux"
: 3},
"valid"
:
true
},
{
"description"
:
"additionalProperty invalidates others"
,
"data"
: {
"quux"
:
"foo"
},
"valid"
:
false
}
]
},
{
"description"
:
"properties with boolean schema"
,
"schema"
: {
"properties"
: {
"foo"
:
true
,
"bar"
:
false
}
},
"tests"
: [
{
"description"
:
"no property present is valid"
,
"data"
: {},
"valid"
:
true
},
{
"description"
:
"only 'true' property present is valid"
,
"data"
: {
"foo"
: 1},
"valid"
:
true
},
{
"description"
:
"only 'false' property present is invalid"
,
"data"
: {
"bar"
: 2},
"valid"
:
false
},
{
"description"
:
"both properties present is invalid"
,
"data"
: {
"foo"
: 1,
"bar"
: 2},
"valid"
:
false
}
]
},
{
"description"
:
"properties with escaped characters"
,
"schema"
: {
"properties"
: {
"foo\nbar"
: {
"type"
:
"number"
},
"foo\"bar"
: {
"type"
:
"number"
},
"foo\\bar"
: {
"type"
:
"number"
},
"foo\rbar"
: {
"type"
:
"number"
},
"foo\tbar"
: {
"type"
:
"number"
},
"foo\fbar"
: {
"type"
:
"number"
}
}
},
"tests"
: [
{
"description"
:
"object with all numbers is valid"
,
"data"
: {
"foo\nbar"
: 1,
"foo\"bar"
: 1,
"foo\\bar"
: 1,
"foo\rbar"
: 1,
"foo\tbar"
: 1,
"foo\fbar"
: 1
},
"valid"
:
true
},
{
"description"
:
"object with strings is invalid"
,
"data"
: {
"foo\nbar"
:
"1"
,
"foo\"bar"
:
"1"
,
"foo\\bar"
:
"1"
,
"foo\rbar"
:
"1"
,
"foo\tbar"
:
"1"
,
"foo\fbar"
:
"1"
},
"valid"
:
false
}
]
},
{
"description"
:
"properties with null valued instance properties"
,
"schema"
: {
"properties"
: {
"foo"
: {
"type"
:
"null"
}
}
},
"tests"
: [
{
"description"
:
"allows null values"
,
"data"
: {
"foo"
:
null
},
"valid"
:
true
}
]
},
{
"description"
:
"properties whose names are Javascript object property names"
,
"comment"
:
"Ensure JS implementations don't universally consider e.g. __proto__ to always be present in an object."
,
"schema"
: {
"properties"
: {
"__proto__"
: {
"type"
:
"number"
},
"toString"
: {
"properties"
: {
"length"
: {
"type"
:
"string"
} }
},
"constructor"
: {
"type"
:
"number"
}
}
},
"tests"
: [
{
"description"
:
"ignores arrays"
,
"data"
: [],
"valid"
:
true
},
{
"description"
:
"ignores other non-objects"
,
"data"
: 12,
"valid"
:
true
},
{
"description"
:
"none of the properties mentioned"
,
"data"
: {},
"valid"
:
true
},
{
"description"
:
"__proto__ not valid"
,
"data"
: {
"__proto__"
:
"foo"
},
"valid"
:
false
},
{
"description"
:
"toString not valid"
,
"data"
: {
"toString"
: {
"length"
: 37 } },
"valid"
:
false
},
{
"description"
:
"constructor not valid"
,
"data"
: {
"constructor"
: {
"length"
: 37 } },
"valid"
:
false
},
{
"description"
:
"all present and valid"
,
"data"
: {
"__proto__"
: 12,
"toString"
: {
"length"
:
"foo"
},
"constructor"
: 37
},
"valid"
:
true
}
]
}
]