schema.js (5544B)
1 'use strict'; 2 3 var schema = { 4 additionalItems: subschema('additionalItems'), 5 items: subschema('items'), 6 contains: subschema('contains'), 7 additionalProperties: subschema('additionalProperties'), 8 propertyNames: subschema('propertyNames'), 9 not: subschema('not'), 10 allOf: [ 11 subschema('allOf_0'), 12 subschema('allOf_1'), 13 { 14 items: [ 15 subschema('items_0'), 16 subschema('items_1'), 17 ] 18 } 19 ], 20 anyOf: [ 21 subschema('anyOf_0'), 22 subschema('anyOf_1'), 23 ], 24 oneOf: [ 25 subschema('oneOf_0'), 26 subschema('oneOf_1'), 27 ], 28 definitions: { 29 foo: subschema('definitions_foo'), 30 bar: subschema('definitions_bar'), 31 }, 32 properties: { 33 foo: subschema('properties_foo'), 34 bar: subschema('properties_bar'), 35 }, 36 patternProperties: { 37 foo: subschema('patternProperties_foo'), 38 bar: subschema('patternProperties_bar'), 39 }, 40 dependencies: { 41 foo: subschema('dependencies_foo'), 42 bar: subschema('dependencies_bar'), 43 }, 44 required: ['foo', 'bar'] 45 }; 46 47 48 function subschema(keyword) { 49 var sch = { 50 properties: {}, 51 additionalProperties: false, 52 additionalItems: false, 53 anyOf: [ 54 {format: 'email'}, 55 {format: 'hostname'} 56 ] 57 }; 58 sch.properties['foo_' + keyword] = {title: 'foo'}; 59 sch.properties['bar_' + keyword] = {title: 'bar'}; 60 return sch; 61 } 62 63 64 module.exports = { 65 schema: schema, 66 67 // schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex 68 expectedCalls: [[schema, '', schema, undefined, undefined, undefined, undefined]] 69 .concat(expectedCalls('additionalItems')) 70 .concat(expectedCalls('items')) 71 .concat(expectedCalls('contains')) 72 .concat(expectedCalls('additionalProperties')) 73 .concat(expectedCalls('propertyNames')) 74 .concat(expectedCalls('not')) 75 .concat(expectedCallsChild('allOf', 0)) 76 .concat(expectedCallsChild('allOf', 1)) 77 .concat([ 78 [schema.allOf[2], '/allOf/2', schema, '', 'allOf', schema, 2], 79 [schema.allOf[2].items[0], '/allOf/2/items/0', schema, '/allOf/2', 'items', schema.allOf[2], 0], 80 [schema.allOf[2].items[0].properties.foo_items_0, '/allOf/2/items/0/properties/foo_items_0', schema, '/allOf/2/items/0', 'properties', schema.allOf[2].items[0], 'foo_items_0'], 81 [schema.allOf[2].items[0].properties.bar_items_0, '/allOf/2/items/0/properties/bar_items_0', schema, '/allOf/2/items/0', 'properties', schema.allOf[2].items[0], 'bar_items_0'], 82 [schema.allOf[2].items[0].anyOf[0], '/allOf/2/items/0/anyOf/0', schema, '/allOf/2/items/0', 'anyOf', schema.allOf[2].items[0], 0], 83 [schema.allOf[2].items[0].anyOf[1], '/allOf/2/items/0/anyOf/1', schema, '/allOf/2/items/0', 'anyOf', schema.allOf[2].items[0], 1], 84 85 [schema.allOf[2].items[1], '/allOf/2/items/1', schema, '/allOf/2', 'items', schema.allOf[2], 1], 86 [schema.allOf[2].items[1].properties.foo_items_1, '/allOf/2/items/1/properties/foo_items_1', schema, '/allOf/2/items/1', 'properties', schema.allOf[2].items[1], 'foo_items_1'], 87 [schema.allOf[2].items[1].properties.bar_items_1, '/allOf/2/items/1/properties/bar_items_1', schema, '/allOf/2/items/1', 'properties', schema.allOf[2].items[1], 'bar_items_1'], 88 [schema.allOf[2].items[1].anyOf[0], '/allOf/2/items/1/anyOf/0', schema, '/allOf/2/items/1', 'anyOf', schema.allOf[2].items[1], 0], 89 [schema.allOf[2].items[1].anyOf[1], '/allOf/2/items/1/anyOf/1', schema, '/allOf/2/items/1', 'anyOf', schema.allOf[2].items[1], 1] 90 ]) 91 .concat(expectedCallsChild('anyOf', 0)) 92 .concat(expectedCallsChild('anyOf', 1)) 93 .concat(expectedCallsChild('oneOf', 0)) 94 .concat(expectedCallsChild('oneOf', 1)) 95 .concat(expectedCallsChild('definitions', 'foo')) 96 .concat(expectedCallsChild('definitions', 'bar')) 97 .concat(expectedCallsChild('properties', 'foo')) 98 .concat(expectedCallsChild('properties', 'bar')) 99 .concat(expectedCallsChild('patternProperties', 'foo')) 100 .concat(expectedCallsChild('patternProperties', 'bar')) 101 .concat(expectedCallsChild('dependencies', 'foo')) 102 .concat(expectedCallsChild('dependencies', 'bar')) 103 }; 104 105 106 function expectedCalls(keyword) { 107 return [ 108 [schema[keyword], `/${keyword}`, schema, '', keyword, schema, undefined], 109 [schema[keyword].properties[`foo_${keyword}`], `/${keyword}/properties/foo_${keyword}`, schema, `/${keyword}`, 'properties', schema[keyword], `foo_${keyword}`], 110 [schema[keyword].properties[`bar_${keyword}`], `/${keyword}/properties/bar_${keyword}`, schema, `/${keyword}`, 'properties', schema[keyword], `bar_${keyword}`], 111 [schema[keyword].anyOf[0], `/${keyword}/anyOf/0`, schema, `/${keyword}`, 'anyOf', schema[keyword], 0], 112 [schema[keyword].anyOf[1], `/${keyword}/anyOf/1`, schema, `/${keyword}`, 'anyOf', schema[keyword], 1] 113 ]; 114 } 115 116 117 function expectedCallsChild(keyword, i) { 118 return [ 119 [schema[keyword][i], `/${keyword}/${i}`, schema, '', keyword, schema, i], 120 [schema[keyword][i].properties[`foo_${keyword}_${i}`], `/${keyword}/${i}/properties/foo_${keyword}_${i}`, schema, `/${keyword}/${i}`, 'properties', schema[keyword][i], `foo_${keyword}_${i}`], 121 [schema[keyword][i].properties[`bar_${keyword}_${i}`], `/${keyword}/${i}/properties/bar_${keyword}_${i}`, schema, `/${keyword}/${i}`, 'properties', schema[keyword][i], `bar_${keyword}_${i}`], 122 [schema[keyword][i].anyOf[0], `/${keyword}/${i}/anyOf/0`, schema, `/${keyword}/${i}`, 'anyOf', schema[keyword][i], 0], 123 [schema[keyword][i].anyOf[1], `/${keyword}/${i}/anyOf/1`, schema, `/${keyword}/${i}`, 'anyOf', schema[keyword][i], 1] 124 ]; 125 }