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