package joist.sourcegen;
import joist.util.Join;
import org.junit.Assert;
import org.junit.Test;
public class GFieldTest {
@Test
public void testOneField() {
GClass gc = new GClass("foo.bar.Foo");
gc.getField("id").type(int.class);
Assert.assertEquals(Join.lines("package foo.bar;",//
"",
"public class Foo {",
"",
" private int id;",
"",
"}",
""), gc.toCode());
}
@Test
public void testOnePublicField() {
GClass gc = new GClass("foo.bar.Foo");
gc.getField("id").type(int.class).setPublic();
Assert.assertEquals(Join.lines("package foo.bar;",//
"",
"public class Foo {",
"",
" public int id;",
"",
"}",
""), gc.toCode());
}
@Test
public void testOneFieldWithDefaultValue() {
GClass gc = new GClass("foo.bar.Foo");
gc.getField("id").type(Integer.class).initialValue("null");
Assert.assertEquals(Join.lines(new Object[] { "package foo.bar;",//
"",
"public class Foo {",
"",
" private Integer id = null;",
"",
"}",
"" }), gc.toCode());
}
@Test
public void testOnePublicFieldWithTypeImported() {
GClass gc = new GClass("foo.bar.Foo");
gc.getField("id").type("foo.zaz.Bar<Integer>").setPublic();
Assert.assertEquals(Join.lines("package foo.bar;",//
"",
"import foo.zaz.Bar;",
"",
"public class Foo {",
"",
" public Bar<Integer> id;",
"",
"}",
""), gc.toCode());
}
@Test
public void testOneFieldOneGetter() {
GClass gc = new GClass("foo.bar.Foo");
gc.getField("id").type(int.class);
gc.getMethod("getId").returnType(int.class).body.append("return this.id;");
Assert.assertEquals(Join.lines(
"package foo.bar;",
"",
"public class Foo {",
"",
" private int id;",
"",
" public int getId() {",
" return this.id;",
" }",
"",
"}",
""), gc.toCode());
}
@Test
public void testOneFieldAssignedToAnonymousInnerClass() {
GClass gc = new GClass("foo.bar.Foo");
GField foo = gc.getField("foo").type("Shim<Foo>").setStatic().setFinal();
GClass fooc = foo.initialAnonymousClass();
fooc.getMethod("getFoo").returnType("Foo").body.append("return null;");
Assert.assertEquals(Join.lines(
"package foo.bar;",
"",
"public class Foo {",
"",
" private static final Shim<Foo> foo = new Shim<Foo>() {",
" public Foo getFoo() {",
" return null;",
" }",
" };",
"",
"}",
""), gc.toCode());
}
@Test
public void testTwoFieldsAssignedToAnonymousInnerClass() {
GClass gc = new GClass("foo.bar.Foo");
GField foo = gc.getField("foo").type("Shim<Foo>").setStatic().setFinal();
GClass fooc = foo.initialAnonymousClass();
fooc.getMethod("getFoo").returnType("Foo").body.append("return null;");
GField bar = gc.getField("bar").type("Shim<Bar>").setStatic().setFinal();
GClass barc = bar.initialAnonymousClass();
barc.getMethod("getBar").returnType("Bar").body.append("return null;");
Assert.assertEquals(Join.lines(
"package foo.bar;",
"",
"public class Foo {",
"",
" private static final Shim<Foo> foo = new Shim<Foo>() {",
" public Foo getFoo() {",
" return null;",
" }",
" };",
" private static final Shim<Bar> bar = new Shim<Bar>() {",
" public Bar getBar() {",
" return null;",
" }",
" };",
"",
"}",
""), gc.toCode());
}
@Test
public void testOneFieldWithGetter() {
GClass gc = new GClass("foo.bar.Foo");
gc.getField("id").type(Integer.class).initialValue("null").makeGetter();
Assert.assertEquals(
Join.lines(new Object[] {
"package foo.bar;",
"",
"public class Foo {",
"",
" private Integer id = null;",
"",
" public Integer getId() {",
" return this.id;",
" }",
"",
"}",
"" }),
gc.toCode());
}
@Test
public void testOneFieldAnnotated() {
GClass gc = new GClass("foo.bar.Foo");
gc.getField("id").type(Integer.class).initialValue("null").addAnnotation("@SuppressWarnings");
Assert.assertEquals(
Join.lines(new Object[] {
"package foo.bar;",
"",
"public class Foo {",
"",
" @SuppressWarnings",
" private Integer id = null;",
"",
"}",
"" }),
gc.toCode());
}
@Test
public void testAutoImportInitialValue() {
GClass gc = new GClass("foo.Foo");
gc.getField("bar").type("bar.IBar<zaz.Zaz>").initialValue("new bar.BarImpl<zaz.Zaz>()").autoImportInitialValue();
Assert.assertEquals(Join.lines("package foo;",//
"",
"import bar.BarImpl;",
"import bar.IBar;",
"import zaz.Zaz;",
"",
"public class Foo {",
"",
" private IBar<Zaz> bar = new BarImpl<Zaz>();",
"",
"}",
""), gc.toCode());
}
}