def test_simple_obj1(self): s1 = { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer" }, "gender": { "type": "string", "maxLength": 1, "enum": ["F", "M"] }, "email": { "type": "string", "format": "email" }, } } s2 = copy.deepcopy(s1) del s2["properties"]["email"] with self.subTest(): self.assertTrue(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_required1(self): s1 = {"type": "object", "minProperties": 1} s2 = {"type": "object", "required": ["p1"]} with self.subTest(): self.assertFalse(isSubschema(s1, s2)) with self.subTest(): self.assertTrue(isSubschema(s2, s1))
def test_require6(self): s1 = {"type": "object", "required": ["p1", "p2"]} s2 = {"type": "object", "required": ["p2"]} with self.subTest(): self.assertTrue(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_str_not_str(self): s1 = {"type": "string"} s2 = {"not": s1} with self.subTest(): self.assertFalse(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_all_all_1(self): s1 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "integer", "allOf": [{ "multipleOf": 3 }, { "minimum": 5 }] } # 6, 9, 12, 15, 18, ... s2 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "number", "multipleOf": 3, "allOf": [{ "type": "integer" }, { "type": "number", "multipleOf": 5 }] } # ..., -30, -15, 15, 30, 45, .. with self.subTest(): self.assertFalse(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_enum1(self): s1 = {"enum": [1, 2, "test", False]} s2 = {"type": ["integer", "string"], "minimum": 10, "enum": [1, 2]} with self.subTest(): self.assertFalse(isSubschema(s1, s2)) with self.subTest(): self.assertTrue(isSubschema(s2, s1))
def test_enum4(self): s1 = {"enum": [3, 4, 5]} s2 = {"enum": [4, 5, 3]} with self.subTest(): self.assertTrue(isSubschema(s1, s2)) with self.subTest(): self.assertTrue(isSubschema(s2, s1))
def test_enum3(self): s1 = {"enum": [3, 4, 5]} s2 = {"enum": [1, 2, 3]} with self.subTest(): self.assertFalse(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_enum5(self): s1 = {"enum": [3, 4, 5], "allOf": [{"enum": [1, 2]}]} s2 = {"enum": [4, 5, 3]} with self.subTest(): self.assertTrue(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_top_nottop(self): s1 = {} s2 = {"type": "string"} with self.subTest(): self.assertFalse(isSubschema(s1, s2)) with self.subTest(): self.assertTrue(isSubschema(s2, s1))
def test_top_bot(self): s1 = {} s2 = {"type": "string", "enum": [1, 2, 3]} with self.subTest(): self.assertFalse(isSubschema(s1, s2)) with self.subTest(): self.assertTrue(isSubschema(s2, s1))
def test_min_property(self): s1 = {"type": "object", "minProperties": 1} s2 = {"type": "object"} with self.subTest(): self.assertTrue(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_str_int(self): s1 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "string", "pattern": "a+", "allOf": [{ "type": "string", "pattern": "b+" }, { "allOf": [{ "type": "string", "maxLength": 10 }] }] } s2 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "integer", "maxLength": 1 } with self.subTest(): self.assertFalse(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_tricky6(self): s1 = { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer" }, "gender": { "type": "string", "maxLength": 1, "enum": ["F", "M"] }, "email": { "type": "string", "format": "email" }, "emaik": { "type": "string", "format": "email" } }, "additionalProperties": { "type": "boolean" } } s2 = { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer" }, "gender": { "type": "string", "maxLength": 1, "enum": ["F", "M"] } }, "patternProperties": { "emai": { "type": "string", "minLength": 10 } }, "additionalProperties": { "type": "boolean" } } with self.subTest(): self.assertFalse(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_simple_obj5(self): s1 = { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer" }, "gender": { "type": "string", "maxLength": 1, "enum": ["F", "M"] }, "email": { "type": "string", "format": "email" }, }, "patternProperties": { "b.*b": { "type": "integer" } } } s2 = { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer" }, "gender": { "type": "string", "maxLength": 1, "enum": ["F", "M"] }, "email": { "type": "string", "format": "email" }, }, "patternProperties": { "^b(\w)+b$": { "type": "integer", "minimum": 10 } } } with self.subTest(): self.assertFalse(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_t_t_5(self): s1 = { "$schema": "http://json-schema.org/draft-04/schema", "type": ["string", "array"] } s2 = { "$schema": "http://json-schema.org/draft-04/schema", "type": ["number", "string"] } with self.subTest(): self.assertFalse(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_t_t_3(self): s1 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "integer" } s2 = { "$schema": "http://json-schema.org/draft-04/schema", "type": ["number"] } with self.subTest(): self.assertTrue(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_require7(self): s1 = {"type": "object", "required": ["p1", "p2"]} s2 = { "type": "object", "required": ["p2"], "additionalProperties": { "type": "boolean" } } with self.subTest(): self.assertFalse(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_tricky1(self): s1 = { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer" }, "gender": { "type": "string", "maxLength": 1, "enum": ["F", "M"] }, "email": { "type": "string", "format": "email" }, "emaik": { "type": "string", "format": "email" } } } s2 = { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer" }, "gender": { "type": "string", "maxLength": 1, "enum": ["F", "M"] } }, "patternProperties": { "^emai(l|k)$": { "type": "string" } }, "required": ["name"] } with self.subTest(): self.assertFalse(isSubschema(s1, s2)) with self.subTest(): self.assertTrue(isSubschema(s2, s1))
def test_mulOf_num_int2(self): s1 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "number", "multipleOf": 1 } s2 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "integer" } with self.subTest(): self.assertTrue(isSubschema(s1, s2)) with self.subTest(): self.assertTrue(isSubschema(s2, s1))
def test_enum2(self): s1 = { "allOf": [{ "enum": [1, 2, 3] }, { "type": "integer" }], "enum": [3, 4, 5] } s2 = {"type": "integer", "enum": [1, 2, 3]} with self.subTest(): self.assertTrue(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_empty_items1(self): s1 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "array" } s2 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "array", "items": {} } with self.subTest(): self.assertTrue(isSubschema(s1, s2)) with self.subTest(): self.assertTrue(isSubschema(s2, s1))
def test_unique(self): s1 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "array", "uniqueItems": True } s2 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "array", "uniqueItems": False } with self.subTest(): self.assertTrue(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_min_min(self): s1 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "number", "minimum": 5 } s2 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "number", "minimum": 1 } with self.subTest(): self.assertTrue(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_min_max(self): s1 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "integer", "minimum": 10 } s2 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "integer", "maximum": 20 } with self.subTest(): self.assertFalse(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_mulOf_num_min_int(self): s1 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "number", "multipleOf": 10 } s2 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "integer", "minimum": 5 } with self.subTest(): self.assertFalse(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_min_min(self): s1 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "string", "minLength": 5 } s2 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "integer", "maxLength": 1 } with self.subTest(): self.assertFalse(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))
def test_identity(self): s1 = { "$schema": "http://json-schema.org/draft-04/schema", "type": "number" } s2 = s1 self.assertTrue(isSubschema(s1, s2))
def test_identity(self): s1 = { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer" }, "gender": { "type": "string", "maxLength": 1, "enum": ["F", "M"] }, "email": { "type": "string", "format": "email" } } } s2 = copy.deepcopy(s1) s2["properties"]["gender"] = { "type": "string", "maxLength": 1, "enum": ["M", "F"] } self.assertTrue(isSubschema(s1, s2))
def test_str_not_str_with_range4(self): s1 = {"type": "string", "minLength": 1, "maxLength": 5} s2 = { "allOf": [{ "type": "string" }, { "not": { "type": "string", "minLength": 2 } }] } with self.subTest(): self.assertFalse(isSubschema(s1, s2)) with self.subTest(): self.assertFalse(isSubschema(s2, s1))