瀏覽代碼

Add tests for AllItemsTester and ItemsTester

Sam Jaffe 6 年之前
父節點
當前提交
b50c170ea9

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

@@ -18,6 +18,7 @@ public class AllItemsTester implements Tester {
 
 	@Override
 	public boolean accepts(JsonNode node) {
+		if (!node.isArray()) return false;
 		List<JsonNode> data = JsonHelper.toArray(node);
 		for (int i = 0; i < data.size(); ++i) {
 			if (!schema.accepts(data.get(i))) {

+ 6 - 0
src/main/lombok/org/leumasjaffe/json/schema/tester/ItemsTester.java

@@ -1,5 +1,6 @@
 package org.leumasjaffe.json.schema.tester;
 
+import java.util.Arrays;
 import java.util.List;
 
 import org.leumasjaffe.json.JsonHelper;
@@ -16,8 +17,13 @@ import lombok.experimental.FieldDefaults;
 public class ItemsTester implements Tester {
 	List<Tester> schemas;
 
+	public ItemsTester(Tester...testers) {
+		this(Arrays.asList(testers));
+	}
+	
 	@Override
 	public boolean accepts(JsonNode node) {
+		if (!node.isArray()) return false;
 		List<JsonNode> data = JsonHelper.toArray(node);
 		for (int i = 0; i < Math.min(schemas.size(), data.size()); ++i) {
 			if (!schemas.get(i).accepts(data.get(i))) {

+ 4 - 0
src/test/java/org/leumasjaffe/json/schema/JsonTesterSuite.java

@@ -2,10 +2,12 @@ package org.leumasjaffe.json.schema;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
+import org.leumasjaffe.json.schema.tester.AllItemsTesterTest;
 import org.leumasjaffe.json.schema.tester.AllOfTesterTest;
 import org.leumasjaffe.json.schema.tester.AnyOfTesterTest;
 import org.leumasjaffe.json.schema.tester.ContainsTesterTest;
 import org.leumasjaffe.json.schema.tester.FormatTesterTest;
+import org.leumasjaffe.json.schema.tester.ItemsTesterTest;
 import org.leumasjaffe.json.schema.tester.NotTesterTest;
 import org.leumasjaffe.json.schema.tester.NumberTesterTest;
 import org.leumasjaffe.json.schema.tester.OneOfTesterTest;
@@ -17,10 +19,12 @@ import org.leumasjaffe.json.schema.tester.UniqueItemTesterTest;
 
 @RunWith(Suite.class)
 @Suite.SuiteClasses({
+	AllItemsTesterTest.class,
 	AllOfTesterTest.class,
 	AnyOfTesterTest.class,
 	ContainsTesterTest.class,
 	FormatTesterTest.class,
+	ItemsTesterTest.class,
 	NotTesterTest.class,
 	NumberTesterTest.class,
 	OneOfTesterTest.class,

+ 49 - 0
src/test/java/org/leumasjaffe/json/schema/tester/AllItemsTesterTest.java

@@ -0,0 +1,49 @@
+package org.leumasjaffe.json.schema.tester;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+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.NullNode;
+
+public class AllItemsTesterTest {
+
+	@Test
+	public void testRejectsNonArray() {
+		assertFalse(new AllItemsTester(Tester.ACCEPT).accepts(NullNode.getInstance()));
+	}
+
+	@Test
+	public void testAcceptsEmptyArray() {
+		final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
+		assertTrue(new AllItemsTester(Tester.ACCEPT).accepts(node));
+	}
+	
+	@Test
+	public void testRejectsIfAllFail() {
+		final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
+		node.add(false);
+		node.add(true);
+		assertFalse(new AllItemsTester(Tester.REJECT).accepts(node));
+	}
+	
+	@Test
+	public void testRejectsIfAnyPass() {
+		final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
+		node.add(false);
+		node.add(true);
+		assertFalse(new AllItemsTester(JsonNode::asBoolean).accepts(node));
+	}
+	
+	@Test
+	public void testAcceptsIfAllPass() {
+		final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
+		node.add(true);
+		node.add(true);
+		assertTrue(new AllItemsTester(JsonNode::asBoolean).accepts(node));
+	}
+}

+ 50 - 0
src/test/java/org/leumasjaffe/json/schema/tester/ItemsTesterTest.java

@@ -0,0 +1,50 @@
+package org.leumasjaffe.json.schema.tester;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+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.NullNode;
+
+public class ItemsTesterTest {
+
+	@Test
+	public void testRejectsNonArray() {
+		assertFalse(new ItemsTester(Tester.ACCEPT).accepts(NullNode.getInstance()));
+	}
+
+	@Test
+	public void testAcceptsEmptyArray() {
+		final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
+		assertTrue(new ItemsTester(Tester.ACCEPT).accepts(node));
+	}
+	
+	@Test
+	public void testRejectsIfFail() {
+		final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
+		node.add(false);
+		node.add(true);
+		assertFalse(new ItemsTester(Tester.REJECT).accepts(node));
+	}
+	
+	@Test
+	public void testAcceptsIfNumTestersPass() {
+		final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
+		node.add(true);
+		node.add(false);
+		assertTrue(new ItemsTester(JsonNode::asBoolean).accepts(node));
+	}
+	
+	@Test
+	public void testAcceptsIfNumElemsPass() {
+		final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
+		node.add(true);
+		node.add(false);
+		assertTrue(new ItemsTester(JsonNode::asBoolean,
+				Tester.ACCEPT, Tester.REJECT).accepts(node));
+	}
+}