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