package xapi.dev.source; import org.junit.Assert; import org.junit.Test; public class TestCodegen { @Test public void testGenericImports() { final SourceBuilder<Object> b = new SourceBuilder<Object>( "public static abstract class Test"); b.setPackage("xapi.test"); b.getClassBuffer() .addGenerics("K","V extends java.util.Date, ? extends java.lang.String, ? super xapi.test.Thing") .addInterfaces("java.util.Iterator"); String src = b.toSource(); Assert.assertTrue("Must contain import java.util.Date;\n" + src, src.contains("import java.util.Date;")); Assert.assertTrue("Must contain import java.util.Iterator;\n" + src , b.toString().contains("import java.util.Iterator;")); } @Test public void testMethodWriter() { final SourceBuilder<Object> b = new SourceBuilder<Object>( "public static abstract class Test"); b.setPackage("xapi.test"); b.getClassBuffer() .createMethod("public <T extends java.util.Date, V extends xapi.test.Type[]> void Test(java.lang.String t) {") .println("System.out.println(\"Hellow World\");") .createLocalClass("class InnerClass ") .createMethod("java.sql.Date innerMethod()") .returnValue("null") ; final String src = b.toString(); System.out.println(src); // We discard java.lang imports Assert.assertFalse(src.contains("import java.lang.String;")); // We used java.util.Date as a fully qualified name first, so it should be imported Assert.assertTrue(src.contains("import java.util.Date;")); Assert.assertTrue(src.contains("<T extends Date, V extends Type[]>")); // We used java.sql.Date as a fqcn after java.util.Date, so it must NOT be imported Assert.assertFalse(src.contains("import java.sql.Date;")); } @Test public void testImportCleanup() { String imported = new SourceBuilder<>().addImport("java.util.concurrent.Callable"); Assert.assertEquals("Callable", imported); } @Test public void testMethodWithSimpleGeneric() { final SourceBuilder<Object> b = new SourceBuilder<Object>( "public static abstract class Test"); b.getClassBuffer().createMethod( "public native <T> Class<T> magicClass(Class<T> ... cls)"); } @Test public void testFieldWriter() { final SourceBuilder<Object> b = new SourceBuilder<Object>( "public static abstract class Test"); b.setPackage("xapi.test"); final FieldBuffer f = b.getClassBuffer() .createField("int", "theInt"); f.addGetter(0); f.addSetter(0); // System.out.println(b); } }