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;
import java.util.HashMap;
import java.util.Map;
@RunWith(Parameterized.class)
public class SchemaTestEnum extends SchemaTestBase {
@Parameterized.Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][]{
new Object[]
{"{\"type\": \"enum\", \"name\": \"Test\", \"symbols\": [\"A\", \"B\"]}",
new String[]{"A", "B"},
new HashMap<String, Integer>() {{
put("A", null);
put("B", null);
}},
},
new Object[]
{"{\"type\": \"enum\", \"name\": \"Test\", \"symbols\": [\"A\", \"B\", {\"name\": \"C\", \"value\": 5}, \"D\", {\"name\": \"E\", \"value\": 1}, {\"name\": \"F\", \"value\": 7}]}",
new String[]{"A", "B", "C", "D", "E", "F"},
new HashMap<String, Integer>() {{
put("A", null);
put("B", null);
put("C", 5);
put("D", null);
put("E", 1);
put("F", 7);
}}
}
});
}
private final String _schema;
private final String[] _symbols;
private final Map<String, Integer> _symbolValues;
public SchemaTestEnum(String schema, String[] symbols, Map<String, Integer> symbolValues) {
_schema = schema;
_symbols = symbols;
_symbolValues = symbolValues;
}
@Test
public void testEnum() {
Schema sc = Schema.parse(_schema);
Assert.assertTrue(sc instanceof EnumSchema);
Assert.assertEquals(SchemaType.ENUM, sc.getType());
EnumSchema es = (EnumSchema) sc;
Assert.assertEquals(_symbols.length, es.size());
int i = 0;
int lastValue = -1;
for (String symbol : es.getSymbols()) {
String expectedSymbol = _symbols[i++];
Assert.assertEquals(expectedSymbol, symbol);
Integer expectedValue = _symbolValues.get(expectedSymbol);
expectedValue = expectedValue != null ? expectedValue.intValue() : lastValue + 1;
Assert.assertEquals((int) expectedValue, es.ordinal(symbol));
lastValue = expectedValue;
}
testEquality(_schema, sc);
testToString(sc);
}
}