package io.vertx.codegen.testmodel;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import org.junit.Assert;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.function.BiConsumer;
import static org.junit.Assert.*;
/**
* @author <a href="mailto:julien@julienviet.com">Julien Viet</a>
*/
public class DataObjectTCKImpl implements DataObjectTCK {
@Override
public DataObjectWithValues getDataObjectWithValues() {
DataObjectWithValues dataObject = new DataObjectWithValues();
dataObject.setBooleanValue(true);
dataObject.setShortValue((short) 520);
dataObject.setIntValue(123456);
dataObject.setLongValue(123456789L);
dataObject.setFloatValue(1.1f);
dataObject.setDoubleValue(1.11d);
dataObject.setBoxedShortValue((short) 1040);
dataObject.setBoxedBooleanValue(true);
dataObject.setBoxedIntValue(654321);
dataObject.setBoxedLongValue(987654321L);
dataObject.setBoxedFloatValue(2.2f);
dataObject.setBoxedDoubleValue(2.22d);
dataObject.setStringValue("wibble");
dataObject.setJsonObjectValue(new JsonObject().put("foo", "eek").put("bar", "wibble"));
dataObject.setJsonArrayValue(new JsonArray().add("eek").add("wibble"));
dataObject.setEnumValue(TestEnum.TIM);
dataObject.setGenEnumValue(TestGenEnum.MIKE);
dataObject.setDataObjectValue(new TestDataObject().setFoo("1").setBar(1).setWibble(1.1));
return dataObject;
}
@Override
public void setDataObjectWithValues(DataObjectWithValues dataObject) {
assertEquals(true, dataObject.booleanValue);
assertEquals(520, dataObject.shortValue);
assertEquals(123456, dataObject.intValue);
assertEquals(123456789L, dataObject.longValue);
assertEquals(1.1f, dataObject.floatValue, 0.01f);
assertEquals(1.11f, dataObject.doubleValue, 0.01f);
assertEquals(true, dataObject.boxedBooleanValue);
assertEquals(1040, (int) dataObject.boxedShortValue);
assertEquals(654321, (int) dataObject.boxedIntValue);
assertEquals(987654321L, (long) dataObject.boxedLongValue);
assertEquals(2.2f, dataObject.boxedFloatValue, 0.01f);
assertEquals(2.22f, dataObject.boxedDoubleValue, 0.01f);
assertEquals("wibble", dataObject.stringValue);
assertEquals(new JsonObject().put("foo", "eek").put("bar", "wibble"), dataObject.jsonObjectValue);
assertEquals(new JsonArray().add("eek").add("wibble"), dataObject.jsonArrayValue);
assertEquals(TestEnum.TIM, dataObject.enumValue);
assertEquals(TestGenEnum.MIKE, dataObject.genEnumValue);
assertEquals("1", dataObject.dataObjectValue.getFoo());
assertEquals(1, dataObject.dataObjectValue.getBar());
assertEquals(1.1f, dataObject.dataObjectValue.getWibble(), 0.01f);
}
@Override
public DataObjectWithLists getDataObjectWithLists() {
DataObjectWithLists dataObject = new DataObjectWithLists();
dataObject.setBooleanValues(Arrays.asList(true, false, true));
dataObject.setShortValues(Arrays.asList((short) 0, (short) 520, (short) 1040));
dataObject.setIntegerValues(Arrays.asList(0, 123456, 654321));
dataObject.setLongValues(Arrays.asList(0L, 123456789L, 987654321L));
dataObject.setFloatValues(Arrays.asList(1.1f, 2.2f, 3.3f));
dataObject.setDoubleValues(Arrays.asList(1.11d, 2.22d, 3.33d));
dataObject.setStringValues(Arrays.asList("stringValues1", "stringValues2", "stringValues3"));
dataObject.setJsonObjectValues(Arrays.asList(new JsonObject().put("foo", "eek"), new JsonObject().put("foo", "wibble")));
dataObject.setJsonArrayValues(Arrays.asList(new JsonArray().add("foo"), new JsonArray().add("bar")));
dataObject.setDataObjectValues(Arrays.asList(new TestDataObject().setFoo("1").setBar(1).setWibble(1.1), new TestDataObject().setFoo("2").setBar(2).setWibble(2.2)));
dataObject.setEnumValues(Arrays.asList(TestEnum.TIM, TestEnum.JULIEN));
dataObject.setGenEnumValues(Arrays.asList(TestGenEnum.BOB, TestGenEnum.LAURA));
return dataObject;
}
@Override
public void setDataObjectWithLists(DataObjectWithLists dataObject) {
assertEquals(Arrays.asList(true, false, true), dataObject.booleanValues);
assertEquals(Arrays.asList((short)0, (short)520, (short)1040), dataObject.shortValues);
assertEquals(Arrays.asList(0, 123456, 654321), dataObject.integerValues);
assertEquals(Arrays.asList(0L, 123456789L, 987654321L), dataObject.longValues);
assertEquals(Arrays.asList(1.1f, 2.2f, 3.3f), dataObject.floatValues);
assertEquals(Arrays.asList(1.11d, 2.22d, 3.33d), dataObject.doubleValues);
assertEquals(Arrays.asList("stringValues1", "stringValues2", "stringValues3"), dataObject.stringValues);
assertEquals(Arrays.asList(new JsonObject().put("foo", "eek"), new JsonObject().put("foo", "wibble")), dataObject.jsonObjectValues);
assertEquals(Arrays.asList(new JsonArray().add("foo"), new JsonArray().add("bar")), dataObject.jsonArrayValues);
assertEquals(2, dataObject.dataObjectValues.size());
assertEquals("1", dataObject.dataObjectValues.get(0).getFoo());
assertEquals(1, dataObject.dataObjectValues.get(0).getBar());
assertEquals(1.1, dataObject.dataObjectValues.get(0).getWibble(), 0.01);
assertEquals("2", dataObject.dataObjectValues.get(1).getFoo());
assertEquals(2, dataObject.dataObjectValues.get(1).getBar());
assertEquals(2.2, dataObject.dataObjectValues.get(1).getWibble(), 0.01);
assertEquals(Arrays.asList(TestEnum.TIM, TestEnum.JULIEN), dataObject.enumValues);
assertEquals(Arrays.asList(TestGenEnum.BOB, TestGenEnum.LAURA), dataObject.genEnumValues);
}
private <T> Map<String, T> map(T first, T second) {
LinkedHashMap<String, T> map = new LinkedHashMap<>();
map.put("1", first);
map.put("2", second);
return map;
}
@Override
public DataObjectWithMaps getDataObjectWithMaps() {
DataObjectWithMaps dataObject = new DataObjectWithMaps();
dataObject.setBooleanValues(map(true, false));
dataObject.setShortValues(map((short) 520, (short) 1040));
dataObject.setIntegerValues(map(123456, 654321));
dataObject.setLongValues(map(123456789L, 987654321L));
dataObject.setFloatValues(map(1.1f, 2.2f));
dataObject.setDoubleValues(map(1.11d, 2.22d));
dataObject.setStringValues(map("stringValues1", "stringValues2"));
dataObject.setJsonObjectValues(map(new JsonObject().put("foo", "eek"), new JsonObject().put("foo", "wibble")));
dataObject.setJsonArrayValues(map(new JsonArray().add("foo"), new JsonArray().add("bar")));
dataObject.setDataObjectValues(map(new TestDataObject().setFoo("1").setBar(1).setWibble(1.1), new TestDataObject().setFoo("2").setBar(2).setWibble(2.2)));
dataObject.setEnumValues(map(TestEnum.TIM, TestEnum.JULIEN));
dataObject.setGenEnumValues(map(TestGenEnum.BOB, TestGenEnum.LAURA));
return dataObject;
}
private <T> Map<String, T> assertMap(Map<String, T> map, T first, T second) {
return assertMap(map, first, second, Assert::assertEquals);
}
private <T> Map<String, T> assertMap(Map<String, T> map, T first, T second, BiConsumer<T, T> assertEquals) {
assertEquals.accept(first, map.get("1"));
assertEquals.accept(second, map.get("2"));
return map;
}
@Override
public void setDataObjectWithMaps(DataObjectWithMaps dataObject) {
assertMap(dataObject.booleanValues, true, false);
assertMap(dataObject.shortValues, (short) 520, (short) 1040);
assertMap(dataObject.integerValues, 123456, 654321);
assertMap(dataObject.longValues, 123456789L, 987654321L);
assertMap(dataObject.floatValues, 1.1f, 2.2f, (f1, f2) -> assertEquals(f1, f2, 0.1d));
assertMap(dataObject.doubleValues, 1.11d, 2.22d, (f1, f2) -> assertEquals(f1, f2, 0.1d));
assertMap(dataObject.stringValues, "stringValues1", "stringValues2");
assertMap(dataObject.jsonObjectValues, new JsonObject().put("foo", "eek"), new JsonObject().put("foo", "wibble"));
assertMap(dataObject.jsonArrayValues, new JsonArray().add("foo"), new JsonArray().add("bar"));
assertEquals(2, dataObject.dataObjectValues.size());
assertEquals("1", dataObject.dataObjectValues.get("1").getFoo());
assertEquals(1, dataObject.dataObjectValues.get("1").getBar());
assertEquals(1.1, dataObject.dataObjectValues.get("1").getWibble(), 0.01);
assertEquals("2", dataObject.dataObjectValues.get("2").getFoo());
assertEquals(2, dataObject.dataObjectValues.get("2").getBar());
assertEquals(2.2, dataObject.dataObjectValues.get("2").getWibble(), 0.01);
assertMap(dataObject.enumValues, TestEnum.TIM, TestEnum.JULIEN);
assertMap(dataObject.genEnumValues, TestGenEnum.BOB, TestGenEnum.LAURA);
}
@Override
public void methodWithOnlyJsonObjectConstructorDataObject(
DataObjectWithOnlyJsonObjectConstructor dataObject) {
assertEquals(dataObject.toJson(), new JsonObject().put("foo", "bar"));
}
@Override
public void setDataObjectWithBuffer(DataObjectWithNestedBuffer dataObject) {
assertEquals("Hello World", new String(dataObject.getBuffer().getBytes()));
assertEquals("Bye World", new String(dataObject.getNested().getBuffer().getBytes()));
assertEquals("one", new String(dataObject.getBuffers().get(0).getBytes()));
assertEquals("two", new String(dataObject.getBuffers().get(1).getBytes()));
}
@Override
public void setDataObjectWithListAdders(DataObjectWithListAdders dataObject) {
setDataObjectWithLists(dataObject.value);
}
@Override
public void setDataObjectWithMapAdders(DataObjectWithMapAdders dataObject) {
setDataObjectWithMaps(dataObject.value);
}
@Override
public void setDataObjectWithRecursion(DataObjectWithRecursion dataObject) {
assertEquals("first", dataObject.getData());
assertEquals("second", dataObject.getNext().getData());
assertEquals("third", dataObject.getNext().getNext().getData());
assertEquals(null, dataObject.getNext().getNext().getNext());
}
}