• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2014 The Dagger Authors.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package dagger.internal.codegen;
18 
19 import static com.google.testing.compile.CompilationSubject.assertThat;
20 import static dagger.internal.codegen.Compilers.daggerCompiler;
21 
22 import com.google.testing.compile.Compilation;
23 import com.google.testing.compile.JavaFileObjects;
24 import javax.tools.JavaFileObject;
25 import org.junit.Test;
26 import org.junit.runner.RunWith;
27 import org.junit.runners.JUnit4;
28 
29 @RunWith(JUnit4.class)
30 public class MultipleRequestTest {
31   private static final JavaFileObject DEP_FILE = JavaFileObjects.forSourceLines("test.Dep",
32       "package test;",
33       "",
34       "import javax.inject.Inject;",
35       "",
36       "class Dep {",
37       "  @Inject Dep() {}",
38       "}");
39 
multipleRequests_constructor()40   @Test public void multipleRequests_constructor() {
41     Compilation compilation =
42         daggerCompiler()
43             .compile(
44                 DEP_FILE,
45                 JavaFileObjects.forSourceLines(
46                     "test.ConstructorInjectsMultiple",
47                     "package test;",
48                     "",
49                     "import javax.inject.Inject;",
50                     "",
51                     "class ConstructorInjectsMultiple {",
52                     "  @Inject ConstructorInjectsMultiple(Dep d1, Dep d2) {}",
53                     "}"),
54                 JavaFileObjects.forSourceLines(
55                     "test.SimpleComponent",
56                     "package test;",
57                     "",
58                     "import dagger.Component;",
59                     "",
60                     "@Component",
61                     "interface SimpleComponent {",
62                     "  ConstructorInjectsMultiple get();",
63                     "}"));
64     assertThat(compilation).succeeded();
65   }
66 
multipleRequests_field()67   @Test public void multipleRequests_field() {
68     Compilation compilation =
69         daggerCompiler()
70             .compile(
71                 DEP_FILE,
72                 JavaFileObjects.forSourceLines(
73                     "test.FieldInjectsMultiple",
74                     "package test;",
75                     "",
76                     "import javax.inject.Inject;",
77                     "",
78                     "class FieldInjectsMultiple {",
79                     "  @Inject Dep d1;",
80                     "  @Inject Dep d2;",
81                     "  @Inject FieldInjectsMultiple() {}",
82                     "}"),
83                 JavaFileObjects.forSourceLines(
84                     "test.SimpleComponent",
85                     "package test;",
86                     "",
87                     "import dagger.Component;",
88                     "",
89                     "@Component",
90                     "interface SimpleComponent {",
91                     "  FieldInjectsMultiple get();",
92                     "}"));
93     assertThat(compilation).succeeded();
94   }
95 
multipleRequests_providesMethod()96   @Test public void multipleRequests_providesMethod() {
97     Compilation compilation =
98         daggerCompiler()
99             .compile(
100                 DEP_FILE,
101                 JavaFileObjects.forSourceLines(
102                     "test.FieldInjectsMultiple",
103                     "package test;",
104                     "",
105                     "import dagger.Module;",
106                     "import dagger.Provides;",
107                     "",
108                     "@Module",
109                     "class SimpleModule {",
110                     "  @Provides Object provide(Dep d1, Dep d2) {",
111                     "    return null;",
112                     "  }",
113                     "}"),
114                 JavaFileObjects.forSourceLines(
115                     "test.SimpleComponent",
116                     "package test;",
117                     "",
118                     "import dagger.Component;",
119                     "",
120                     "@Component(modules = SimpleModule.class)",
121                     "interface SimpleComponent {",
122                     "  Object get();",
123                     "}"));
124     assertThat(compilation).succeeded();
125   }
126 }
127