package com.ctriposs.baiji.schema;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import java.util.Collection;
@RunWith(Parameterized.class)
public class SchemaTestBasic extends SchemaTestBase {
@Parameterized.Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][]{
// Primitive types - shorthand
new Object[]{"null", true},
new Object[]{"boolean", true},
new Object[]{"int", true},
new Object[]{"long", true},
new Object[]{"float", true},
new Object[]{"double", true},
new Object[]{"bytes", true},
new Object[]{"string", true},
new Object[]{"\"null\"", true},
new Object[]{"\"boolean\"", true},
new Object[]{"\"int\"", true},
new Object[]{"\"long\"", true},
new Object[]{"\"float\"", true},
new Object[]{"\"double\"", true},
new Object[]{"\"bytes\"", true},
new Object[]{"\"string\"", true},
// Primitive types - longer
new Object[]{"{ \"type\": \"null\" }", true},
new Object[]{"{ \"type\": \"boolean\" }", true},
new Object[]{"{ \"type\": \"int\" }", true},
new Object[]{"{ \"type\": \"long\" }", true},
new Object[]{"{ \"type\": \"float\" }", true},
new Object[]{"{ \"type\": \"double\" }", true},
new Object[]{"{ \"type\": \"bytes\" }", true},
new Object[]{"{ \"type\": \"string\" }", true},
// Record
new Object[]{"{\"type\": \"record\",\"name\": \"Test\",\"fields\": [{\"name\": \"f\",\"type\": \"long\"}]}", true},
new Object[]{"{\"type\": \"record\",\"name\": \"Test\",\"fields\": " +
"[{\"name\": \"f1\",\"type\": \"long\"},{\"name\": \"f2\", \"type\": \"int\"}]}", true},
new Object[]{"{\"type\": \"error\",\"name\": \"Test\",\"fields\": " +
"[{\"name\": \"f1\",\"type\": \"long\"},{\"name\": \"f2\", \"type\": \"int\"}]}", true},
new Object[]{"{\"type\":\"record\",\"name\":\"LongList\"," +
"\"fields\":[{\"name\":\"value\",\"type\":\"long\"},{\"name\":\"next\",\"type\":[\"LongList\",\"null\"]}]}"
, true}, // Recursive.
new Object[]{"{\"type\":\"record\",\"name\":\"LongList\"," +
"\"fields\":[{\"name\":\"value\",\"type\":\"long\"},{\"name\":\"next\",\"type\":[\"LongListA\",\"null\"]}]}", false},
new Object[]{"{\"type\":\"record\",\"name\":\"LongList\"}", false},
new Object[]{"{\"type\":\"record\",\"name\":\"LongList\", \"fields\": \"hi\"}", false},
// Enum
new Object[]{"{\"type\": \"enum\", \"name\": \"Test\", \"symbols\": [\"A\", \"B\"]}", true},
new Object[]{"{\"type\": \"enum\", \"name\": \"Status\", \"symbols\": \"Normal Caution Critical\"}", false},
new Object[]{"{\"type\": \"enum\", \"name\": [ 0, 1, 1, 2, 3, 5, 8 }, \"symbols\": [\"Golden\", \"Mean\"]}", false},
new Object[]{"{\"type\": \"enum\", \"symbols\" : [\"I\", \"will\", \"fail\", \"no\", \"name\"]}", false},
new Object[]{"{\"type\": \"enum\", \"name\": \"Test\", \"symbols\" : [\"AA\", \"AA\"]}", false},
// Array
new Object[]{"{\"type\": \"array\", \"items\": \"long\"}", true},
new Object[]{
"{\"type\": \"array\",\"items\": {\"type\": \"enum\", \"name\": \"Test\", \"symbols\": [\"A\", \"B\"]}}", true},
// Map
new Object[]{"{\"type\": \"map\", \"values\": \"long\"}", true},
new Object[]{
"{\"type\": \"map\",\"values\": {\"type\": \"enum\", \"name\": \"Test\", \"symbols\": [\"A\", \"B\"]}}", true},
// Union
new Object[]{"[\"string\", \"null\", \"long\"]", true},
new Object[]{"[\"string\", \"long\", \"long\"]", false},
new Object[]{"[{\"type\": \"array\", \"items\": \"long\"}, {\"type\": \"array\", \"items\": \"string\"}]", false},
});
}
private final String _schema;
private final boolean _valid;
public SchemaTestBasic(String schema, boolean valid) {
_schema = schema;
_valid = valid;
}
@Test
public void testBasic() {
try {
Schema.parse(_schema);
Assert.assertTrue(_valid);
} catch (SchemaParseException ex) {
if (_valid) {
ex.printStackTrace();
}
Assert.assertFalse(_valid);
}
}
}