浏览代码

Add support for array-of-types support.

Sam Jaffe 6 年之前
父节点
当前提交
30e64b3a72

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

@@ -72,7 +72,13 @@ class SchemaV6Factory extends SchemaFactory {
 		case "propertyNames": return new PropertyNameTester(create(value));
 		case "const": return new EqualsTester(value);
 		case "enum": return new EqualsTester(JsonHelper.toArray(value));
-		case "type": return TypeTester.fromType(value.asText());
+		case "type":
+			if (value.isArray()) {
+				return new OneOfTester(JsonHelper.toArray(value,
+						j -> TypeTester.fromType(j.asText())));
+			} else {
+				return TypeTester.fromType(value.asText());
+			}
 		case "format": return FormatTester.forCode(value.asText());
 		case "allOf": return new AllOfTester(createArray(value));
 		case "anyOf": return new AnyOfTester(createArray(value));

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

@@ -326,4 +326,15 @@ public class SchemaV6FactoryTest {
 		assertFalse(test.accepts(new TextNode("C")));
 		assertTrue(test.accepts(new TextNode("D")));
 	}
+	
+	@Test
+	public void testTypeSchema() {
+		Tester multi = fromSingleElement("{ \"type\": [ \"boolean\", \"number\" ] }");
+		assertTrue(multi.accepts(BooleanNode.TRUE));
+		assertTrue(multi.accepts(new DoubleNode(1.5)));
+		assertFalse(multi.accepts(new TextNode("hi")));
+		Tester sing = fromSingleElement("{ \"type\": \"boolean\" }");
+		assertTrue(sing.accepts(BooleanNode.TRUE));
+		assertFalse(sing.accepts(new DoubleNode(1.5)));
+	}
 }