package joist.sourcegen;
import joist.util.Join;
import org.junit.Assert;
import org.junit.Test;
public class GConstructorTest {
@Test
public void testOneConstructor() {
GClass gc = new GClass("foo.bar.Foo");
GMethod c = gc.getConstructor();
c.body.line("System.out.println(\"foo\");");
Assert.assertEquals(Join.lines(
"package foo.bar;",
"",
"public class Foo {",
"",
" public Foo() {",
" System.out.println(\"foo\");",
" }",
"",
"}",
""), gc.toCode());
}
@Test
public void testOneConstructorWithArgumentOverload() {
GClass gc = new GClass("foo.bar.Foo");
GMethod c = gc.getConstructor(Argument.arg("String", "foo"));
c.body.line("System.out.println(foo);");
Assert.assertEquals(Join.lines(
"package foo.bar;",
"",
"public class Foo {",
"",
" public Foo(String foo) {",
" System.out.println(foo);",
" }",
"",
"}",
""), gc.toCode());
}
@Test
public void testOneFieldOneConstructorAndOneMethod() {
GClass gc = new GClass("foo.bar.Foo");
GMethod c = gc.getConstructor();
c.body.line("System.out.println(\"foo\");");
gc.getField("id").type(Integer.class);
gc.getMethod("getId").returnType(Integer.class).body.append("return this.id;");
Assert.assertEquals(Join.lines(
"package foo.bar;",
"",
"public class Foo {",
"",
" private Integer id;",
"",
" public Foo() {",
" System.out.println(\"foo\");",
" }",
"",
" public Integer getId() {",
" return this.id;",
" }",
"",
"}",
""), gc.toCode());
}
@Test
public void testOneConstructorWithGenerics() {
GClass gc = new GClass("foo.bar.Foo<T>");
GMethod c = gc.getConstructor();
c.body.line("System.out.println(\"foo\");");
Assert.assertEquals(Join.lines(
"package foo.bar;",
"",
"public class Foo<T> {",
"",
" public Foo() {",
" System.out.println(\"foo\");",
" }",
"",
"}",
""), gc.toCode());
}
@Test
public void testStaticConstructor() {
GClass gc = new GClass("foo.bar.Foo");
GMethod c = gc.getConstructor().setStatic();
c.body.line("System.out.println(\"foo\");");
Assert.assertEquals(Join.lines("package foo.bar;",//
"",//
"public class Foo {",//
"",//
" static {",//
" System.out.println(\"foo\");",//
" }",//
"",//
"}",//
""), gc.toCode());
}
}