Skip to content

Commit 4925bce

Browse files
committed
add builder test
1 parent 32a7740 commit 4925bce

File tree

1 file changed

+193
-0
lines changed

1 file changed

+193
-0
lines changed
Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
package io.jbock.simple.processor;
2+
3+
import io.jbock.testing.compile.Compilation;
4+
import org.junit.jupiter.api.Test;
5+
6+
import javax.tools.JavaFileObject;
7+
8+
import static io.jbock.simple.processor.Compilers.simpleCompiler;
9+
import static io.jbock.testing.compile.CompilationSubject.assertThat;
10+
import static io.jbock.testing.compile.JavaFileObjects.forSourceLines;
11+
12+
class BuilderTest {
13+
14+
@Test
15+
void noParameters() {
16+
JavaFileObject component = forSourceLines("test.TestClass",
17+
"package test;",
18+
"",
19+
"import io.jbock.simple.Component;",
20+
"import io.jbock.simple.Inject;",
21+
"",
22+
"final class TestClass {",
23+
" static class A {",
24+
" @Inject A() {}",
25+
" }",
26+
"",
27+
" @Component",
28+
" interface AComponent {",
29+
" A getA();",
30+
"",
31+
" @Component.Builder",
32+
" interface Builder {",
33+
" AComponent build();",
34+
" }",
35+
" }",
36+
"}");
37+
38+
Compilation compilation = simpleCompiler().compile(component);
39+
assertThat(compilation).succeeded();
40+
assertThat(compilation).generatedSourceFile("test.TestClass_AComponent_Impl")
41+
.containsLines(
42+
"package test;",
43+
"",
44+
"final class TestClass_AComponent_Impl implements TestClass.AComponent {",
45+
" private final TestClass.A a;",
46+
"",
47+
" private TestClass_AComponent_Impl() {",
48+
" this.a = new TestClass.A();",
49+
" }",
50+
"",
51+
" @Override",
52+
" public TestClass.A getA() {",
53+
" return a;",
54+
" }",
55+
"",
56+
" static TestClass.AComponent.Builder builder() {",
57+
" return new Builder_Impl();",
58+
" }",
59+
"",
60+
" private static final class Builder_Impl implements TestClass.AComponent.Builder {",
61+
" @Override",
62+
" public TestClass.AComponent build() {",
63+
" return new TestClass_AComponent_Impl();",
64+
" }",
65+
" }",
66+
"}");
67+
}
68+
69+
@Test
70+
void factoryParameterIdentity() {
71+
JavaFileObject component = forSourceLines("test.TestClass",
72+
"package test;",
73+
"",
74+
"import io.jbock.simple.Component;",
75+
"import io.jbock.simple.Inject;",
76+
"",
77+
"final class TestClass {",
78+
"",
79+
" @Component",
80+
" interface AComponent {",
81+
" String getS();",
82+
"",
83+
" @Component.Builder",
84+
" interface Builder {",
85+
" Builder withS(String s);",
86+
" AComponent build();",
87+
" }",
88+
" }",
89+
"}");
90+
Compilation compilation = simpleCompiler().compile(component);
91+
assertThat(compilation).succeeded();
92+
assertThat(compilation).generatedSourceFile("test.TestClass_AComponent_Impl")
93+
.containsLines(
94+
"package test;",
95+
"",
96+
"final class TestClass_AComponent_Impl implements TestClass.AComponent {",
97+
" private final String s;",
98+
"",
99+
" private TestClass_AComponent_Impl(String s) {",
100+
" this.s = s;",
101+
" }",
102+
"",
103+
" @Override",
104+
" public String getS() {",
105+
" return s;",
106+
" }",
107+
"",
108+
" static TestClass.AComponent.Builder builder() {",
109+
" return new Builder_Impl();",
110+
" }",
111+
"",
112+
" private static final class Builder_Impl implements TestClass.AComponent.Builder {",
113+
" String s;",
114+
"",
115+
" @Override",
116+
" public TestClass.AComponent.Builder withS(String s) {",
117+
" this.s = s;",
118+
" return this;",
119+
" }",
120+
"",
121+
" @Override",
122+
" public TestClass.AComponent build() {",
123+
" return new TestClass_AComponent_Impl(s);",
124+
" }",
125+
" }",
126+
"}");
127+
}
128+
129+
130+
@Test
131+
void factoryParameter() {
132+
JavaFileObject component = forSourceLines("test.TestClass",
133+
"package test;",
134+
"",
135+
"import io.jbock.simple.Component;",
136+
"import io.jbock.simple.Inject;",
137+
"import io.jbock.simple.Named;",
138+
"",
139+
"final class TestClass {",
140+
" static class A {",
141+
" @Inject A(@Named(\"a\") String s) {}",
142+
" }",
143+
"",
144+
" @Component",
145+
" interface AComponent {",
146+
" A getA();",
147+
"",
148+
" @Component.Builder",
149+
" interface Builder {",
150+
" Builder withS(@Named(\"a\") String s);",
151+
" AComponent build();",
152+
" }",
153+
" }",
154+
"}");
155+
Compilation compilation = simpleCompiler().compile(component);
156+
assertThat(compilation).succeeded();
157+
assertThat(compilation).generatedSourceFile("test.TestClass_AComponent_Impl")
158+
.containsLines(
159+
"package test;",
160+
"",
161+
"final class TestClass_AComponent_Impl implements TestClass.AComponent {",
162+
" private final TestClass.A a;",
163+
"",
164+
" private TestClass_AComponent_Impl(String s) {",
165+
" this.a = new TestClass.A(s);",
166+
" }",
167+
"",
168+
" @Override",
169+
" public TestClass.A getA() {",
170+
" return a;",
171+
" }",
172+
"",
173+
" static TestClass.AComponent.Builder builder() {",
174+
" return new Builder_Impl();",
175+
" }",
176+
"",
177+
" private static final class Builder_Impl implements TestClass.AComponent.Builder {",
178+
" String s;",
179+
"",
180+
" @Override",
181+
" public TestClass.AComponent.Builder withS(String s) {",
182+
" this.s = s;",
183+
" return this;",
184+
" }",
185+
"",
186+
" @Override",
187+
" public TestClass.AComponent build() {",
188+
" return new TestClass_AComponent_Impl(s);",
189+
" }",
190+
" }",
191+
"}");
192+
}
193+
}

0 commit comments

Comments
 (0)