package io.vertx.codegen.testmodel; import io.vertx.codegen.annotations.Nullable; import io.vertx.core.AsyncResult; import io.vertx.core.Future; import io.vertx.core.json.JsonArray; import io.vertx.core.json.JsonObject; import static org.junit.Assert.*; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; /** * @author <a href="mailto:julien@julienviet.com">Julien Viet</a> */ public class FunctionParamTCKImpl implements FunctionParamTCK { @Override public List<String> methodWithBasicParam(Function<Byte, String> byteFunc, Function<Short, String> shortFunc, Function<Integer, String> integerFunc, Function<Long, String> longFunc, Function<Float, String> floatFunc, Function<Double, String> doubleFunc, Function<Boolean, String> booleanFunc, Function<Character, String> charFunc, Function<String, String> stringFunc) { return Arrays.asList( byteFunc.apply((byte)100), shortFunc.apply((short)1000), integerFunc.apply(100000), longFunc.apply(10000000000L), floatFunc.apply(3.5f), doubleFunc.apply(0.01), booleanFunc.apply(true), charFunc.apply('F'), stringFunc.apply("wibble") ); } @Override public List<String> methodWithJsonParam(Function<JsonObject, String> objectFunc, Function<JsonArray, String> arrayFunc) { return Arrays.asList( objectFunc.apply(new JsonObject().put("one", 1).put("two", 2).put("three", 3)), arrayFunc.apply(new JsonArray().add("one").add("two").add("three")) ); } @Override public String methodWithDataObjectParam(Function<TestDataObject, String> func) { return func.apply(new TestDataObject().setFoo("foo_value").setBar(3).setWibble(0.01)); } @Override public String methodWithEnumParam(Function<TestEnum, String> func) { return func.apply(TestEnum.TIM); } @Override public String methodWithVoidParam(Function<Void, String> func) { return func.apply(null); } @Override public String methodWithUserTypeParam(RefedInterface1 arg, Function<RefedInterface1, String> func) { return func.apply(arg); } @Override public String methodWithObjectParam(Object arg, Function<Object, String> func) { return func.apply(arg); } @Override public String methodWithListParam(Function<List<String>, String> func) { return func.apply(Arrays.asList("one", "two", "three")); } @Override public String methodWithSetParam(Function<Set<String>, String> func) { return func.apply(new LinkedHashSet<>(Arrays.asList("one", "two", "three"))); } @Override public String methodWithMapParam(Function<Map<String, String>, String> func) { return func.apply(Arrays.asList("one", "two", "three").stream().collect(Collectors.toMap(s -> s, s -> s))); } @Override public <T> String methodWithGenericParam(T t, Function<T, String> func) { return func.apply(t); } @Override public <T> String methodWithGenericUserTypeParam(T t, Function<GenericRefedInterface<T>, String> func) { GenericRefedInterfaceImpl<T> userObj = new GenericRefedInterfaceImpl<>(); userObj.setValue(t); return func.apply(userObj); } // Return @Override public String methodWithBasicReturn(Function<String, Byte> byteFunc, Function<String, Short> shortFunc, Function<String, Integer> integerFunc, Function<String, Long> longFunc, Function<String, Float> floatFunc, Function<String, Double> doubleFunc, Function<String, Boolean> booleanFunc, Function<String, Character> charFunc, Function<String, String> stringFunc) { assertEquals(10, (int)(byte)byteFunc.apply("whatever")); assertEquals(1000, (int)(short)shortFunc.apply("whatever")); assertEquals(100000, (int)integerFunc.apply("whatever")); assertEquals(10000000000L, (long)longFunc.apply("whatever")); assertEquals(0.01f, floatFunc.apply("whatever"), 0.001); assertEquals(0.00001D, doubleFunc.apply("whatever"), 0.000001); assertEquals(true, booleanFunc.apply("whatever")); assertEquals('C', (char)charFunc.apply("whatever")); assertEquals("the-return", stringFunc.apply("whatever")); return "ok"; } @Override public String methodWithJsonReturn(Function<String, JsonObject> objectFunc, Function<String, JsonArray> arrayFunc) { assertEquals(new JsonObject().put("foo", "foo_value").put("bar", 10).put("wibble", 0.1), objectFunc.apply("whatever")); assertEquals(new JsonArray().add("one").add("two").add("three"), arrayFunc.apply("whatever")); return "ok"; } @Override public String methodWithObjectReturn(Function<Integer, Object> func) { assertEquals("the-string", func.apply(0)); assertEquals(123, ((Number)func.apply(1)).intValue()); assertEquals(true, func.apply(2)); assertEquals(new JsonObject().put("foo", "foo_value"), func.apply(3)); assertEquals(new JsonArray().add("foo").add("bar"), func.apply(4)); return "ok"; } @Override public String methodWithDataObjectReturn(Function<String, TestDataObject> func) { TestDataObject val = func.apply("whatever"); assertEquals("wasabi", val.getFoo()); assertEquals(6, val.getBar()); assertEquals(0.01D, val.getWibble(), 0.001D); return "ok"; } @Override public String methodWithEnumReturn(Function<String, TestEnum> func) { assertEquals(TestEnum.NICK,func.apply("whatever")); return "ok"; } @Override public String methodWithListReturn(Function<String, List<String>> func) { assertEquals(Arrays.asList("one", "two", "three"),func.apply("whatever")); return "ok"; } @Override public String methodWithSetReturn(Function<String, Set<String>> func) { assertEquals(new HashSet<>(Arrays.asList("one", "two", "three")),func.apply("whatever")); return "ok"; } @Override public String methodWithMapReturn(Function<String, Map<String, String>> func) { Map<String, String> expected = new HashMap<>(); expected.put("one", "one"); expected.put("two", "two"); expected.put("three", "three"); assertEquals(expected,func.apply("whatever")); return "ok"; } @Override public <T> String methodWithGenericReturn(Function<Integer, T> func) { return methodWithObjectReturn(func::apply); } @Override public <T> String methodWithGenericUserTypeReturn(Function<GenericRefedInterface<T>, GenericRefedInterface<T>> func) { GenericRefedInterfaceImpl<T> impl = new GenericRefedInterfaceImpl<>(); assertEquals(impl , func.apply(impl)); return "ok"; } @Override public String methodWithNullableListParam(Function<@Nullable List<String>, String> func) { return func.apply(null); } @Override public String methodWithNullableListReturn(Function<String, @Nullable List<String>> func) { assertEquals(null, func.apply("whatever")); return "ok"; } }