1*f585d8a3SJacky Wang /* 2*f585d8a3SJacky Wang * Copyright (C) 2018 The Dagger Authors. 3*f585d8a3SJacky Wang * 4*f585d8a3SJacky Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5*f585d8a3SJacky Wang * you may not use this file except in compliance with the License. 6*f585d8a3SJacky Wang * You may obtain a copy of the License at 7*f585d8a3SJacky Wang * 8*f585d8a3SJacky Wang * http://www.apache.org/licenses/LICENSE-2.0 9*f585d8a3SJacky Wang * 10*f585d8a3SJacky Wang * Unless required by applicable law or agreed to in writing, software 11*f585d8a3SJacky Wang * distributed under the License is distributed on an "AS IS" BASIS, 12*f585d8a3SJacky Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*f585d8a3SJacky Wang * See the License for the specific language governing permissions and 14*f585d8a3SJacky Wang * limitations under the License. 15*f585d8a3SJacky Wang */ 16*f585d8a3SJacky Wang 17*f585d8a3SJacky Wang package dagger.internal.codegen; 18*f585d8a3SJacky Wang 19*f585d8a3SJacky Wang import static dagger.spi.model.testing.BindingGraphSubject.assertThat; 20*f585d8a3SJacky Wang 21*f585d8a3SJacky Wang import androidx.room.compiler.processing.util.Source; 22*f585d8a3SJacky Wang import dagger.spi.model.BindingGraph; 23*f585d8a3SJacky Wang import dagger.spi.model.BindingGraphPlugin; 24*f585d8a3SJacky Wang import dagger.spi.model.DiagnosticReporter; 25*f585d8a3SJacky Wang import dagger.testing.compile.CompilerTests; 26*f585d8a3SJacky Wang import org.junit.Test; 27*f585d8a3SJacky Wang import org.junit.runner.RunWith; 28*f585d8a3SJacky Wang import org.junit.runners.JUnit4; 29*f585d8a3SJacky Wang 30*f585d8a3SJacky Wang @RunWith(JUnit4.class) 31*f585d8a3SJacky Wang public final class ModelTest { 32*f585d8a3SJacky Wang 33*f585d8a3SJacky Wang @Test cycleTest()34*f585d8a3SJacky Wang public void cycleTest() { 35*f585d8a3SJacky Wang Source a = 36*f585d8a3SJacky Wang CompilerTests.javaSource( 37*f585d8a3SJacky Wang "test.A", 38*f585d8a3SJacky Wang "package test;", 39*f585d8a3SJacky Wang "", 40*f585d8a3SJacky Wang "import javax.inject.Inject;", 41*f585d8a3SJacky Wang "", 42*f585d8a3SJacky Wang "final class A {", 43*f585d8a3SJacky Wang " @Inject A(B b) {}", 44*f585d8a3SJacky Wang "}"); 45*f585d8a3SJacky Wang Source b = 46*f585d8a3SJacky Wang CompilerTests.javaSource( 47*f585d8a3SJacky Wang "test.B", 48*f585d8a3SJacky Wang "package test;", 49*f585d8a3SJacky Wang "", 50*f585d8a3SJacky Wang "import javax.inject.Inject;", 51*f585d8a3SJacky Wang "import javax.inject.Provider;", 52*f585d8a3SJacky Wang "", 53*f585d8a3SJacky Wang "final class B {", 54*f585d8a3SJacky Wang " @Inject B(Provider<A> a) {}", 55*f585d8a3SJacky Wang "}"); 56*f585d8a3SJacky Wang Source component = 57*f585d8a3SJacky Wang CompilerTests.javaSource( 58*f585d8a3SJacky Wang "test.TestComponent", 59*f585d8a3SJacky Wang "package test;", 60*f585d8a3SJacky Wang "", 61*f585d8a3SJacky Wang "import dagger.Component;", 62*f585d8a3SJacky Wang "", 63*f585d8a3SJacky Wang "@Component", 64*f585d8a3SJacky Wang "interface TestComponent {", 65*f585d8a3SJacky Wang " A a();", 66*f585d8a3SJacky Wang "}"); 67*f585d8a3SJacky Wang 68*f585d8a3SJacky Wang CompilerTests.daggerCompiler(a, b, component) 69*f585d8a3SJacky Wang .withBindingGraphPlugins( 70*f585d8a3SJacky Wang () -> new BindingGraphPlugin() { 71*f585d8a3SJacky Wang @Override 72*f585d8a3SJacky Wang public void visitGraph(BindingGraph graph, DiagnosticReporter reporter) { 73*f585d8a3SJacky Wang assertThat(graph).bindingWithKey("test.A").dependsOnBindingWithKey("test.B"); 74*f585d8a3SJacky Wang assertThat(graph).bindingWithKey("test.B").dependsOnBindingWithKey("test.A"); 75*f585d8a3SJacky Wang } 76*f585d8a3SJacky Wang }) 77*f585d8a3SJacky Wang .compile(subject -> subject.hasErrorCount(0)); 78*f585d8a3SJacky Wang } 79*f585d8a3SJacky Wang } 80