Explorar o código

Fix bug where we don't do type checks.
Test Dependency schema creation

Sam Jaffe %!s(int64=6) %!d(string=hai) anos
pai
achega
c21e6455f9

+ 1 - 1
src/main/lombok/org/leumasjaffe/json/schema/Schema.java

@@ -21,7 +21,7 @@ import lombok.experimental.FieldDefaults;
 public class Schema implements Tester {
 	private static final String SELF = "$self";
 	private static final List<String> UNIVERSAL_MATCHERS = Arrays.asList(
-			"const", "enum");
+			"const", "enum", "type");
 	private static final List<String> NUMBER_MATCHERS = Arrays.asList(
 		"multipleOf", "minimum", "exclusiveMinimum", "maximum",
 		"exclusiveMaximum");

+ 6 - 1
src/main/lombok/org/leumasjaffe/json/schema/factory/SchemaV6Factory.java

@@ -11,6 +11,7 @@ import org.leumasjaffe.json.schema.tester.AllItemsTester;
 import org.leumasjaffe.json.schema.tester.AllOfTester;
 import org.leumasjaffe.json.schema.tester.AnyOfTester;
 import org.leumasjaffe.json.schema.tester.ContainsTester;
+import org.leumasjaffe.json.schema.tester.DependencyTester;
 import org.leumasjaffe.json.schema.tester.EqualsTester;
 import org.leumasjaffe.json.schema.tester.FixedTester;
 import org.leumasjaffe.json.schema.tester.FormatTester;
@@ -68,7 +69,11 @@ class SchemaV6Factory extends SchemaFactory {
 				(k, v) -> new PropertyTester.Pair(stringEqual(k), create(v))));
 		case "patternProperties": return new PropertyTester(JsonHelper.values(value,
 				(k, v) -> new PropertyTester.Pair(stringMatches(k), create(v))));
-		// case "dependencies": ; // TODO Implement array(required) and object(schema) versions
+	    case "dependencies": // TODO Implement array(required) and object(schema) versions
+	    	return new DependencyTester(JsonHelper.fields(value, (k, v) -> {
+	    		if (v.isArray()) return createMapping("required", v);
+	    		else return create(v);
+	    	}));
 		case "propertyNames": return new PropertyNameTester(create(value));
 		case "const": return new EqualsTester(value);
 		case "enum": return new EqualsTester(JsonHelper.toArray(value));

+ 32 - 0
src/test/java/org/leumasjaffe/json/schema/factory/SchemaV6FactoryTest.java

@@ -307,6 +307,38 @@ public class SchemaV6FactoryTest {
 		assertFalse(test.accepts(readTree("{ \"A_\": {} }")));
 	}
 	
+	@Test
+	public void testDependencySchema() {
+		Tester arrayDep = fromSingleElement("{" +
+			"\"dependencies\": {" +
+				"\"A\": [ \"B\", \"C\" ]" +
+			"}" +
+		"}");
+		assertTrue(arrayDep.accepts(readTree("{ \"B\": true }")));
+		assertFalse(arrayDep.accepts(readTree("{ \"A\": true, \"B\": true }")));
+		assertTrue(arrayDep.accepts(readTree("{ \"A\": true, \"B\": true, \"C\": true }")));
+		
+		Tester schemaDep = fromSingleElement("{" +
+			"\"dependencies\": {" +
+				"\"D\": { \"properties\": { \"B\": { \"type\": \"integer\" } } }" +
+			"}" +
+		"}");
+		assertTrue(schemaDep.accepts(readTree("{ \"B\": true }")));
+		assertFalse(schemaDep.accepts(readTree("{ \"D\": true, \"B\": true }")));
+		assertTrue(schemaDep.accepts(readTree("{ \"D\": true, \"B\": 5 }")));
+		
+		Tester bothDep = fromSingleElement("{" +
+			"\"dependencies\": {" +
+				"\"A\": [ \"B\", \"C\" ]," +
+				"\"D\": { \"properties\": { \"B\": { \"type\": \"integer\" } } }" +
+			"}" +
+		"}");
+		assertTrue(bothDep.accepts(readTree("{ \"A\": true, \"B\": true, \"C\": true }")));
+		assertTrue(bothDep.accepts(readTree("{ \"D\": true, \"B\": 5 }")));
+		assertFalse(bothDep.accepts(readTree("{ \"A\": true, \"D\": true, \"B\": true, \"C\": true }")));
+		assertTrue(bothDep.accepts(readTree("{ \"A\": true, \"D\": true, \"B\": 5, \"C\": true }")));
+	}
+	
 	@Test
 	public void testPropertyNamesSchema() {
 		Tester test = fromSingleElement("{ \"propertyNames\": false }");