浏览代码

Start testing acceptedTypes() for all the added objects.
- Fix bug where AllOf was always empty.

Sam Jaffe 6 年之前
父节点
当前提交
1e95b4d374

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

@@ -25,7 +25,7 @@ public class AllOfTester implements Tester {
 	
 	@Override
 	public JsonNodeType[] acceptedTypes() {
-		final Set<JsonNodeType> set = new HashSet<>();
+		final Set<JsonNodeType> set = new HashSet<>(Arrays.asList(ANY));
 		children.stream().map(Tester::acceptedTypes)
 				.forEach(a -> set.retainAll(Arrays.asList(a)));
 		return set.toArray(new JsonNodeType[0]);

+ 14 - 0
src/test/java/org/leumasjaffe/json/schema/tester/AllOfTesterTest.java

@@ -1,6 +1,7 @@
 package org.leumasjaffe.json.schema.tester;
 
 import static org.junit.Assert.*;
+import static org.hamcrest.core.Is.*;
 
 import org.junit.Test;
 import org.leumasjaffe.json.schema.Tester;
@@ -8,12 +9,25 @@ import org.leumasjaffe.json.schema.Tester;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.JsonNodeType;
 import com.fasterxml.jackson.databind.node.NullNode;
 
 public class AllOfTesterTest {
 	StubTester isArray = JsonNode::isArray;
 	StubTester isObject = JsonNode::isObject;
 	StubTester notEmpty = j -> j.size() != 0;
+	
+	@Test
+	public void testAcceptedTypesIsIntersect() {
+		Tester impossible = new AllOfTester(new MockTester(JsonNodeType.OBJECT, null),
+				new MockTester(JsonNodeType.ARRAY, null));
+		assertThat(impossible.acceptedTypes(), is(new JsonNodeType[0]));
+		Tester resticted = new AllOfTester(new MockTester(JsonNodeType.OBJECT, null),
+				isArray);
+		assertThat(resticted.acceptedTypes(), is(new JsonNodeType[]{JsonNodeType.OBJECT}));
+		Tester free = new AllOfTester(isObject,	isArray); // lol
+		assertThat(free.acceptedTypes().length, is(Tester.ANY.length));
+	}
 
 	@Test
 	public void testFailsIfAllFail() {

+ 31 - 0
src/test/java/org/leumasjaffe/json/schema/tester/MockTester.java

@@ -0,0 +1,31 @@
+package org.leumasjaffe.json.schema.tester;
+
+import org.leumasjaffe.json.schema.Tester;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.JsonNodeType;
+
+public class MockTester implements Tester {
+	JsonNodeType type;
+	Tester actual;
+	
+	MockTester() {
+		this(null, null);
+	}
+		
+	public MockTester(JsonNodeType type, Tester actual) {
+		this.type = type;
+		this.actual = actual;
+	}
+
+	@Override
+	public JsonNodeType[] acceptedTypes() {
+		return new JsonNodeType[] {type};
+	}
+
+	@Override
+	public boolean accepts(JsonNode node) {
+		return actual.accepts(node);
+	}
+
+}