1 /*
2  * Copyright (C) 2015 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.functional.producers;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import com.google.common.util.concurrent.Futures;
22 import com.google.common.util.concurrent.ListenableFuture;
23 import org.junit.Test;
24 import org.junit.runner.RunWith;
25 import org.junit.runners.JUnit4;
26 
27 @RunWith(JUnit4.class)
28 public class DependentTest {
dependentComponent()29   @Test public void dependentComponent() throws Exception {
30     DependentComponent dependentComponent =
31         DaggerDependentComponent.builder()
32             .dependedProductionComponent(DaggerDependedProductionComponent.create())
33             .dependedComponent(DaggerDependedComponent.create())
34             .build();
35     assertThat(dependentComponent).isNotNull();
36     assertThat(dependentComponent.greetings().get()).containsExactly(
37         "2", "Hello world!", "HELLO WORLD!");
38   }
39 
reuseBuilderWithDependentComponent()40   @Test public void reuseBuilderWithDependentComponent() throws Exception {
41     DaggerDependentComponent.Builder dependentComponentBuilder = DaggerDependentComponent.builder();
42 
43     DependentComponent componentUsingComponents =
44         dependentComponentBuilder
45             .dependedProductionComponent(DaggerDependedProductionComponent.create())
46             .dependedComponent(DaggerDependedComponent.create())
47             .build();
48 
49     DependentComponent componentUsingJavaImpls = dependentComponentBuilder
50         .dependedProductionComponent(new DependedProductionComponent() {
51           @Override public ListenableFuture<Integer> numGreetings() {
52             return Futures.immediateFuture(3);
53           }
54         })
55         .dependedComponent(new DependedComponent() {
56           @Override public String getGreeting() {
57             return "Goodbye world!";
58           }
59         })
60         .build();
61 
62     assertThat(componentUsingJavaImpls.greetings().get()).containsExactly(
63         "3", "Goodbye world!", "GOODBYE WORLD!");
64     assertThat(componentUsingComponents.greetings().get()).containsExactly(
65         "2", "Hello world!", "HELLO WORLD!");
66 
67   }
68 }
69