@Test public void testValidDataObjectReturn() throws Exception { ClassModel model = new GeneratorHelper().generateClass(MethodWithValidDataObjectReturn.class); assertEquals(MethodWithValidDataObjectReturn.class.getName(), model.getIfaceFQCN()); assertEquals(MethodWithValidDataObjectReturn.class.getSimpleName(), model.getIfaceSimpleName()); assertTrue(model.getReferencedTypes().isEmpty()); assertTrue(model.getSuperTypes().isEmpty()); assertEquals(3, model.getMethods().size()); checkMethod(model.getMethods().get(0), "methodWithDataObjectReturn", 0, PlainDataObjectWithToJson.class.getName(), MethodKind.OTHER); checkMethod(model.getMethods().get(1), "methodWithAbstractDataObjectReturn", 0, AbstractDataObjectWithToJson.class.getName(), MethodKind.OTHER); checkMethod(model.getMethods().get(2), "methodWithInterfaceDataObjectReturn", 0, InterfaceDataObjectWithToJson.class.getName(), MethodKind.OTHER); }
@Test public void testNonGenSuperType() throws Exception { ClassModel model = new GeneratorHelper().generateClass(InterfaceWithNonGenSuperType.class); assertEquals(InterfaceWithNonGenSuperType.class.getName(), model.getIfaceFQCN()); assertEquals(InterfaceWithNonGenSuperType.class.getSimpleName(), model.getIfaceSimpleName()); assertEquals(0, model.getReferencedTypes().size()); assertEquals(0, model.getSuperTypes().size()); List<MethodInfo> methods = model.getMethods(); assertEquals(1, methods.size()); checkMethod(methods.get(0), "foo", 1, "void", MethodKind.OTHER); }
@Test public void testFluentMethods() throws Exception { ClassModel model = new GeneratorHelper().generateClass(ConcreteInterfaceWithFluentMethods.class); assertEquals(ConcreteInterfaceWithFluentMethods.class.getName(), model.getIfaceFQCN()); assertEquals(ConcreteInterfaceWithFluentMethods.class.getSimpleName(), model.getIfaceSimpleName()); assertTrue(model.getReferencedTypes().isEmpty()); assertTrue(model.getSuperTypes().isEmpty()); List<MethodInfo> methods = model.getMethods(); assertEquals(2, methods.size()); checkMethod(methods.get(0), "foo", 1, ConcreteInterfaceWithFluentMethods.class, MethodKind.OTHER, MethodCheck.FLUENT); checkMethod(methods.get(1), "bar", 1, ConcreteInterfaceWithFluentMethods.class, MethodKind.OTHER, MethodCheck.FLUENT); }
@Test public void testValidThrowableReturn() throws Exception { ClassModel model = new GeneratorHelper().generateClass(MethodWithThrowableReturn.class); assertEquals(MethodWithThrowableReturn.class.getName(), model.getIfaceFQCN()); assertEquals(MethodWithThrowableReturn.class.getSimpleName(), model.getIfaceSimpleName()); assertTrue(model.getReferencedTypes().isEmpty()); assertTrue(model.getSuperTypes().isEmpty()); assertEquals(1, model.getMethods().size()); String methodName = "methodWithThrowableReturn"; MethodInfo method = model.getMethods().get(0); checkMethod(method, methodName, 0, Throwable.class, MethodKind.OTHER); }
@Test public void testCacheReturnMethods() throws Exception { ClassModel model = new GeneratorHelper().generateClass(InterfaceWithCacheReturnMethods.class); assertEquals(InterfaceWithCacheReturnMethods.class.getName(), model.getIfaceFQCN()); assertEquals(InterfaceWithCacheReturnMethods.class.getSimpleName(), model.getIfaceSimpleName()); assertEquals(1, model.getReferencedTypes().size()); assertTrue(model.getReferencedTypes().contains(VertxGenClass1Info)); assertTrue(model.getSuperTypes().isEmpty()); List<MethodInfo> methods = model.getMethods(); assertEquals(2, methods.size()); checkMethod(methods.get(0), "foo", 1, String.class, MethodKind.OTHER, MethodCheck.CACHE_RETURN); checkMethod(methods.get(1), "bar", 1, VertxGenClass1.class, MethodKind.OTHER, MethodCheck.CACHE_RETURN); }
@Test public void testJsonParams() throws Exception { ClassModel model = new GeneratorHelper().generateClass(MethodWithValidJSONParams.class); assertEquals(MethodWithValidJSONParams.class.getName(), model.getIfaceFQCN()); assertEquals(MethodWithValidJSONParams.class.getSimpleName(), model.getIfaceSimpleName()); assertTrue(model.getReferencedTypes().isEmpty()); assertTrue(model.getSuperTypes().isEmpty()); List<MethodInfo> methods = model.getMethods(); assertEquals(1, methods.size()); checkMethod(methods.get(0), "methodWithJsonParams", 2, "void", MethodKind.OTHER); checkParam(model.getMethods().get(0).getParams().get(0), "jsonObject", JsonObject.class); checkParam(model.getMethods().get(0).getParams().get(1), "jsonArray", JsonArray.class); }
@Test public void testFluentMethodOverrideFromConcrete() throws Exception { ClassModel model = new GeneratorHelper().generateClass(InterfaceWithFluentMethodOverrideFromConcrete.class); assertEquals(InterfaceWithFluentMethodOverrideFromConcrete.class.getName(), model.getIfaceFQCN()); assertEquals(InterfaceWithFluentMethodOverrideFromConcrete.class.getSimpleName(), model.getIfaceSimpleName()); assertEquals(Collections.singleton((ClassTypeInfo) TypeReflectionFactory.create(ConcreteInterfaceWithFluentMethods.class)), model.getReferencedTypes()); assertEquals(Collections.singletonList(TypeReflectionFactory.create(ConcreteInterfaceWithFluentMethods.class)), model.getSuperTypes()); List<MethodInfo> methods = model.getMethods(); assertEquals(2, methods.size()); checkMethod(methods.get(0), "foo", 1, InterfaceWithFluentMethodOverrideFromConcrete.class, MethodKind.OTHER, MethodCheck.FLUENT); checkMethod(methods.get(1), "bar", 1, InterfaceWithFluentMethodOverrideFromConcrete.class, MethodKind.OTHER, MethodCheck.FLUENT); }
@Test public void testStaticSuperStaticMethods() throws Exception { ClassModel model = new GeneratorHelper().generateClass(InterfaceWithSuperStaticMethods.class); assertEquals(InterfaceWithSuperStaticMethods.class.getName(), model.getIfaceFQCN()); assertEquals(InterfaceWithSuperStaticMethods.class.getSimpleName(), model.getIfaceSimpleName()); assertEquals(Collections.singletonList(TypeReflectionFactory.create(InterfaceWithStaticMethods.class)), model.getSuperTypes()); assertEquals(0, model.getMethods().size()); }
@Test public void testJsonReturns() throws Exception { ClassModel model = new GeneratorHelper().generateClass(MethodWithValidJSONReturn.class); assertEquals(MethodWithValidJSONReturn.class.getName(), model.getIfaceFQCN()); assertEquals(MethodWithValidJSONReturn.class.getSimpleName(), model.getIfaceSimpleName()); assertTrue(model.getReferencedTypes().isEmpty()); assertTrue(model.getSuperTypes().isEmpty()); assertEquals(2, model.getMethods().size()); checkMethod(model.getMethods().get(0), "foo", 0, JsonObject.class, MethodKind.OTHER); checkMethod(model.getMethods().get(1), "bar", 0, JsonArray.class, MethodKind.OTHER); }
@Test public void testValidVoidReturn() throws Exception { ClassModel model = new GeneratorHelper().generateClass(MethodWithValidVoidReturn.class); assertEquals(MethodWithValidVoidReturn.class.getName(), model.getIfaceFQCN()); assertEquals(MethodWithValidVoidReturn.class.getSimpleName(), model.getIfaceSimpleName()); assertTrue(model.getReferencedTypes().isEmpty()); assertTrue(model.getSuperTypes().isEmpty()); assertEquals(1, model.getMethods().size()); String methodName = "methodWithVoidReturn"; checkMethod(model.getMethods().get(0), methodName, 0, "void", MethodKind.OTHER); }
@Test public void testValidObjectReturn() throws Exception { ClassModel model = new GeneratorHelper().generateClass(MethodWithObjectReturn.class); assertEquals(MethodWithObjectReturn.class.getName(), model.getIfaceFQCN()); assertEquals(MethodWithObjectReturn.class.getSimpleName(), model.getIfaceSimpleName()); assertTrue(model.getReferencedTypes().isEmpty()); assertTrue(model.getSuperTypes().isEmpty()); assertEquals(1, model.getMethods().size()); checkMethod(model.getMethods().get(0), "foo", 0, "java.lang.Object", MethodKind.OTHER); }
@Test public void testJsonHandlers() throws Exception { ClassModel model = new GeneratorHelper().generateClass(MethodWithValidHandlerJSON.class); assertEquals(MethodWithValidHandlerJSON.class.getName(), model.getIfaceFQCN()); assertEquals(MethodWithValidHandlerJSON.class.getSimpleName(), model.getIfaceSimpleName()); assertTrue(model.getReferencedTypes().isEmpty()); assertTrue(model.getSuperTypes().isEmpty()); List<MethodInfo> methods = model.getMethods(); assertEquals(1, methods.size()); checkMethod(methods.get(0), "methodWithJsonHandlers", 2, "void", MethodKind.HANDLER); checkParam(model.getMethods().get(0).getParams().get(0), "jsonObjectHandler", new TypeLiteral<Handler<JsonObject>>(){}); checkParam(model.getMethods().get(0).getParams().get(1), "jsonArrayHandler", new TypeLiteral<Handler<JsonArray>>() { }); }
@Test public void testValidVertxGenReturn() throws Exception { ClassModel model = new GeneratorHelper().generateClass(MethodWithValidVertxGenReturn.class); assertEquals(MethodWithValidVertxGenReturn.class.getName(), model.getIfaceFQCN()); assertEquals(MethodWithValidVertxGenReturn.class.getSimpleName(), model.getIfaceSimpleName()); assertEquals(2, model.getReferencedTypes().size()); assertTrue(model.getReferencedTypes().contains(VertxGenClass1Info)); assertTrue(model.getReferencedTypes().contains(VertxGenClass2Info)); assertTrue(model.getSuperTypes().isEmpty()); List<MethodInfo> methods = model.getMethods(); assertEquals(2, methods.size()); checkMethod(methods.get(0), "methodWithVertxGen1Return", 0, VertxGenClass1.class, MethodKind.OTHER); checkMethod(methods.get(1), "methodWithVertxGen2Return", 0, VertxGenClass2.class, MethodKind.OTHER); }
@Test public void testIgnore() throws Exception { ClassModel model = new GeneratorHelper().generateClass(InterfaceWithIgnoredElements.class); assertEquals(InterfaceWithIgnoredElements.class.getName(), model.getIfaceFQCN()); assertEquals(InterfaceWithIgnoredElements.class.getSimpleName(), model.getIfaceSimpleName()); assertTrue(model.getReferencedTypes().isEmpty()); assertTrue(model.getSuperTypes().isEmpty()); List<MethodInfo> methods = model.getMethods(); assertEquals(2, methods.size()); checkMethod(methods.get(0), "foo", 1, "void", MethodKind.OTHER); checkMethod(methods.get(1), "bar", 1, "void", MethodKind.OTHER); assertFalse(methods.get(0).isContainingAnyJavaType()); assertFalse(methods.get(1).isContainingAnyJavaType()); }
@Test public void testFluentMethodOverrideFromAbstract() throws Exception { GeneratorHelper gen = new GeneratorHelper(); ClassModel model = gen.generateClass(InterfaceWithFluentMethodOverrideFromAbstract.class); assertEquals(InterfaceWithFluentMethodOverrideFromAbstract.class.getName(), model.getIfaceFQCN()); assertEquals(InterfaceWithFluentMethodOverrideFromAbstract.class.getSimpleName(), model.getIfaceSimpleName()); assertEquals(Collections.singleton((ClassTypeInfo) TypeReflectionFactory.create(AbstractInterfaceWithFluentMethods.class)), model.getReferencedTypes()); assertEquals(Collections.singletonList(TypeReflectionFactory.create(AbstractInterfaceWithFluentMethods.class)), model.getSuperTypes()); List<MethodInfo> methods = model.getMethods(); assertEquals(2, methods.size()); checkMethod(methods.get(0), "foo", 1, InterfaceWithFluentMethodOverrideFromAbstract.class, MethodKind.OTHER, MethodCheck.FLUENT); checkMethod(methods.get(1), "bar", 1, InterfaceWithFluentMethodOverrideFromAbstract.class, MethodKind.OTHER, MethodCheck.FLUENT); }
@Test public void testValidObjectParam() throws Exception { ClassModel model = new GeneratorHelper().generateClass(MethodWithObjectParam.class); assertEquals(MethodWithObjectParam.class.getName(), model.getIfaceFQCN()); assertEquals(MethodWithObjectParam.class.getSimpleName(), model.getIfaceSimpleName()); assertTrue(model.getReferencedTypes().isEmpty()); assertTrue(model.getSuperTypes().isEmpty()); assertEquals(1, model.getMethods().size()); String methodName = "methodWithObjectParam"; MethodInfo method = model.getMethods().get(0); checkMethod(method, methodName, 1, "void", MethodKind.OTHER); List<ParamInfo> params = method.getParams(); checkParam(params.get(0), "obj", Object.class); }
@Test public void testValidEnumReturn() throws Exception { ClassModel model = new GeneratorHelper().generateClass(MethodWithEnumReturn.class); assertEquals(MethodWithEnumReturn.class.getName(), model.getIfaceFQCN()); assertEquals(MethodWithEnumReturn.class.getSimpleName(), model.getIfaceSimpleName()); assertTrue(model.getImportedTypes().contains(TypeReflectionFactory.create(TestEnum.class))); assertTrue(model.getReferencedTypes().isEmpty()); assertTrue(model.getSuperTypes().isEmpty()); assertEquals(2, model.getMethods().size()); checkMethod(model.getMethods().get(0), "methodWithEnumReturn", 0, TestEnum.class, MethodKind.OTHER); checkMethod(model.getMethods().get(1), "methodWithGenEnumReturn", 0, TestGenEnum.class, MethodKind.OTHER); }
@Test public void testValidHandlerReturn() throws Exception { ClassModel model = new GeneratorHelper().generateClass(MethodWithHandlerReturn.class); assertEquals(MethodWithHandlerReturn.class.getName(), model.getIfaceFQCN()); assertEquals(MethodWithHandlerReturn.class.getSimpleName(), model.getIfaceSimpleName()); assertTrue(model.getReferencedTypes().isEmpty()); assertTrue(model.getSuperTypes().isEmpty()); assertEquals(1, model.getMethods().size()); checkMethod(model.getMethods().get(0), "methodWithHandlerStringReturn", 0, new TypeLiteral<Handler<String>>() {}, MethodKind.OTHER); TypeInfo returnType = model.getMethods().get(0).getReturnType(); assertEquals(ClassKind.HANDLER, returnType.getKind()); assertEquals(ClassKind.STRING, ((ParameterizedTypeInfo)returnType).getArg(0).getKind()); }
@Test public void testInterfaceComments() throws Exception { ClassModel model = new GeneratorHelper().generateClass(InterfaceWithComments.class); assertEquals(InterfaceWithComments.class.getName(), model.getIfaceFQCN()); assertEquals(InterfaceWithComments.class.getSimpleName(), model.getIfaceSimpleName()); assertTrue(model.getReferencedTypes().isEmpty()); assertTrue(model.getSuperTypes().isEmpty()); String firstSentence = " Interface comment line 1\n" + " Interface comment line 2\n" + " Interface comment line 3"; assertEquals(firstSentence, model.getDoc().getFirstSentence().getValue()); }
@Test public void testValidHandlerAsyncResultReturn() throws Exception { ClassModel model = new GeneratorHelper().generateClass(MethodWithHandlerAsyncResultReturn.class); assertEquals(MethodWithHandlerAsyncResultReturn.class.getName(), model.getIfaceFQCN()); assertEquals(MethodWithHandlerAsyncResultReturn.class.getSimpleName(), model.getIfaceSimpleName()); assertTrue(model.getReferencedTypes().isEmpty()); assertTrue(model.getSuperTypes().isEmpty()); assertEquals(1, model.getMethods().size()); checkMethod(model.getMethods().get(0), "methodWithHandlerAsyncResultStringReturn", 0, new TypeLiteral<Handler<AsyncResult<String>>>() {}, MethodKind.OTHER); TypeInfo returnType = model.getMethods().get(0).getReturnType(); assertEquals(ClassKind.HANDLER, returnType.getKind()); assertEquals(ClassKind.ASYNC_RESULT, ((ParameterizedTypeInfo)returnType).getArg(0).getKind()); assertEquals(ClassKind.STRING, ((ParameterizedTypeInfo)((ParameterizedTypeInfo)returnType).getArg(0)).getArg(0).getKind()); }