package io.vertx.test.codegen; import io.vertx.codegen.ClassModel; import io.vertx.codegen.GenException; import io.vertx.codegen.Generator; import io.vertx.codegen.ModuleModel; import io.vertx.codegen.DataObjectModel; import io.vertx.codegen.type.ApiTypeInfo; import io.vertx.codegen.type.TypeNameTranslator; import io.vertx.test.codegen.testmodule.modulescoped.ModuleScopedApi; import io.vertx.test.codegen.testmodule.modulescoped.ModuleScopedDataObject; import io.vertx.test.codegen.testmodule.modulescoped.sub.ModuleScopedSubApi; import io.vertx.test.codegen.testmodule.modulescoped.sub.ModuleScopedSubDataObject; import io.vertx.test.codegen.testmodule.nestingmodule.nestedmodule.NestedApi; import io.vertx.test.codegen.testmodule.nestingmodule.nestedmodule.NestedDataObject; import io.vertx.test.codegen.testmodule.nomodule.NoModuleApi; import io.vertx.test.codegen.testmodule.nomodule.NoModuleDataObject; import io.vertx.test.codegen.testmodule.vertx.core.VertxCoreModuleScopedApi; import io.vertx.test.codegen.testmodule.vertx.other.VertxOtherModuleScopedApi; import org.junit.Test; import static org.junit.Assert.*; /** * @author <a href="mailto:julien@julienviet.com">Julien Viet</a> */ public class ModuleTest { @Test public void testModuleModel() throws Exception { ModuleModel model = new Generator().generateModule(ModuleTest.class.getClassLoader(), "io.vertx.test.codegen.testmodule.modulescoped"); assertEquals("io.vertx.test.codegen.testmodule.modulescoped", model.getFqn()); assertEquals("simple", model.getName()); assertEquals("io.vertx.test.groovy.codegen.testmodule.modulescoped", model.translateFqn("groovy")); assertNotNull(model.getModule()); assertEquals("io.vertx.test.codegen.testmodule.modulescoped", model.getModule().getPackageName()); assertEquals("simple", model.getModule().getName()); assertEquals("io.vertx.test.groovy.codegen.testmodule.modulescoped", model.getModule().translatePackageName("groovy")); } @Test public void testNestedModuleModel() throws Exception { ModuleModel module = new Generator().generateModule(ModuleTest.class.getClassLoader(), "io.vertx.test.codegen.testmodule.nestingmodule.nestedmodule"); assertEquals("io.vertx.test.codegen.testmodule.nestingmodule.nestedmodule", module.getFqn()); assertEquals("nested", module.getName()); assertEquals("io.vertx.test.groovy.codegen.testmodule.nestingmodule.nestedmodule", module.translateFqn("groovy")); ClassModel api = new Generator().generateClass(NestedApi.class); assertEquals("io.vertx.test.codegen.testmodule.nestingmodule.nestedmodule", api.getModule().getPackageName()); assertEquals("nested", api.getModule().getName()); DataObjectModel dataObj = new Generator().generateDataObject(NestedDataObject.class); assertEquals("io.vertx.test.codegen.testmodule.nestingmodule.nestedmodule", dataObj.getModule().getPackageName()); assertEquals("nested", dataObj.getModule().getName()); } @Test public void testEmptyNameModuleModel() throws Exception { try { new Generator().generateModule(ModuleTest.class.getClassLoader(), "io.vertx.test.codegen.testmodule.emptynamemodule"); fail(); } catch (GenException expected) { } } @Test public void testIllegalNameModuleModel() throws Exception { try { new Generator().generateModule(ModuleTest.class.getClassLoader(), "io.vertx.test.codegen.testmodule.illegalnamemodule"); fail(); } catch (GenException expected) { } } @Test public void testCustomGroupModuleModel() throws Exception { ModuleModel model = new Generator().generateModule(ModuleTest.class.getClassLoader(), "io.vertx.test.codegen.testmodule.customgroup"); assertEquals("io.vertx.test.codegen.testmodule.customgroup", model.getFqn()); assertEquals("custom", model.getName()); assertEquals("io.vertx.test.codegen.testmodule.groovy.customgroup", model.translateFqn("groovy")); } @Test public void testNotPrefixingGroupModuleModel() throws Exception { try { new Generator().generateModule(ModuleTest.class.getClassLoader(), "io.vertx.test.codegen.testmodule.notprefixinggroup"); fail(); } catch (GenException expected) { } } @Test public void testInvalidGroupModuleModel() throws Exception { try { new Generator().generateModule(ModuleTest.class.getClassLoader(), "io.vertx.test.codegen.testmodule.invalidgroup"); fail(); } catch (GenException expected) { } } @Test public void testModuleScopedApiModel() throws Exception { ClassModel model = new Generator().generateClass(ModuleScopedApi.class); assertEquals(ModuleScopedApi.class.getName(), model.getIfaceFQCN()); assertEquals("io.vertx.test.codegen.testmodule.modulescoped", model.getModule().getPackageName()); assertEquals("simple", model.getModule().getName()); ApiTypeInfo type = (ApiTypeInfo) model.getType(); assertEquals("io.vertx.test.groovy.codegen.testmodule.modulescoped.ModuleScopedApi", type.translateName("groovy")); assertEquals("io.vertx.test.ceylon.simple.ModuleScopedApi", type.translateName(TypeNameTranslator.composite("ceylon"))); } @Test public void testModuleScopedSubApiModel() throws Exception { ClassModel model = new Generator().generateClass(ModuleScopedSubApi.class); assertEquals(ModuleScopedSubApi.class.getName(), model.getFqn()); assertEquals("io.vertx.test.codegen.testmodule.modulescoped", model.getModule().getPackageName()); assertEquals("simple", model.getModule().getName()); ApiTypeInfo type = (ApiTypeInfo) model.getType(); assertEquals("io.vertx.test.groovy.codegen.testmodule.modulescoped.sub.ModuleScopedSubApi", type.translateName("groovy")); assertEquals("io.vertx.test.ceylon.simple.sub.ModuleScopedSubApi", type.translateName(TypeNameTranslator.composite("ceylon"))); } @Test public void testModuleScopedDataObjectModel() throws Exception { DataObjectModel model = new Generator().generateDataObject(ModuleScopedDataObject.class); assertEquals(ModuleScopedDataObject.class.getName(), model.getFqn()); assertEquals("io.vertx.test.codegen.testmodule.modulescoped", model.getModule().getPackageName()); assertEquals("simple", model.getModule().getName()); } @Test public void testModuleScopedSubDataObjectModel() throws Exception { DataObjectModel model = new Generator().generateDataObject(ModuleScopedSubDataObject.class); assertEquals(ModuleScopedSubDataObject.class.getName(), model.getFqn()); assertEquals("io.vertx.test.codegen.testmodule.modulescoped", model.getModule().getPackageName()); assertEquals("simple", model.getModule().getName()); } @Test public void testVertxCoreModuleScopedApiModel() throws Exception { ClassModel model = new Generator().generateClass(VertxCoreModuleScopedApi.class); assertEquals(VertxCoreModuleScopedApi.class.getName(), model.getIfaceFQCN()); assertEquals("io.vertx.test.codegen.testmodule.vertx.core", model.getModule().getPackageName()); assertEquals("vertx", model.getModule().getName()); ApiTypeInfo type = (ApiTypeInfo) model.getType(); assertEquals("io.vertx.groovy.test.codegen.testmodule.vertx.core.VertxCoreModuleScopedApi", type.translateName("groovy")); assertEquals("io.vertx.ceylon.core.VertxCoreModuleScopedApi", type.translateName(TypeNameTranslator.composite("ceylon"))); } @Test public void testVertxOtherModuleScopedApiModel() throws Exception { ClassModel model = new Generator().generateClass(VertxOtherModuleScopedApi.class); assertEquals(VertxOtherModuleScopedApi.class.getName(), model.getIfaceFQCN()); assertEquals("io.vertx.test.codegen.testmodule.vertx.other", model.getModule().getPackageName()); assertEquals("vertx-other", model.getModule().getName()); ApiTypeInfo type = (ApiTypeInfo) model.getType(); assertEquals("io.vertx.groovy.test.codegen.testmodule.vertx.other.VertxOtherModuleScopedApi", type.translateName("groovy")); assertEquals("io.vertx.ceylon.other.VertxOtherModuleScopedApi", type.translateName(TypeNameTranslator.composite("ceylon"))); } @Test public void testNoModuleApiModel() throws Exception { try { new Generator().generateClass(NoModuleApi.class); fail(); } catch (GenException expected) { } } @Test public void testNoModuleDataObjectModel() throws Exception { try { new Generator().generateDataObject(NoModuleDataObject.class); fail(); } catch (GenException expected) { } } }