xref: /aosp_15_r20/external/dagger2/javatests/dagger/producers/internal/SetOfProducedProducerTest.java (revision f585d8a307d0621d6060bd7e80091fdcbf94fe27)
1*f585d8a3SJacky Wang /*
2*f585d8a3SJacky Wang  * Copyright (C) 2015 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.producers.internal;
18*f585d8a3SJacky Wang 
19*f585d8a3SJacky Wang import static com.google.common.truth.Truth.assertThat;
20*f585d8a3SJacky Wang 
21*f585d8a3SJacky Wang import com.google.common.collect.ImmutableSet;
22*f585d8a3SJacky Wang import com.google.common.collect.Iterables;
23*f585d8a3SJacky Wang import com.google.common.collect.Sets;
24*f585d8a3SJacky Wang import dagger.producers.Produced;
25*f585d8a3SJacky Wang import dagger.producers.Producer;
26*f585d8a3SJacky Wang import dagger.producers.Producers;
27*f585d8a3SJacky Wang import java.util.Arrays;
28*f585d8a3SJacky Wang import java.util.Collections;
29*f585d8a3SJacky Wang import java.util.Set;
30*f585d8a3SJacky Wang import java.util.concurrent.ExecutionException;
31*f585d8a3SJacky Wang import org.junit.Test;
32*f585d8a3SJacky Wang import org.junit.runner.RunWith;
33*f585d8a3SJacky Wang import org.junit.runners.JUnit4;
34*f585d8a3SJacky Wang 
35*f585d8a3SJacky Wang /**
36*f585d8a3SJacky Wang  * Tests {@link SetOfProducedProducer}.
37*f585d8a3SJacky Wang  */
38*f585d8a3SJacky Wang @RunWith(JUnit4.class)
39*f585d8a3SJacky Wang public class SetOfProducedProducerTest {
40*f585d8a3SJacky Wang   @Test
success()41*f585d8a3SJacky Wang   public void success() throws Exception {
42*f585d8a3SJacky Wang     Producer<Set<Produced<Integer>>> producer =
43*f585d8a3SJacky Wang         SetOfProducedProducer.<Integer>builder(1, 1)
44*f585d8a3SJacky Wang             .addProducer(Producers.immediateProducer(1))
45*f585d8a3SJacky Wang             .addCollectionProducer(Producers.<Set<Integer>>immediateProducer(ImmutableSet.of(5, 7)))
46*f585d8a3SJacky Wang             .build();
47*f585d8a3SJacky Wang     assertThat(producer.get().get())
48*f585d8a3SJacky Wang         .containsExactly(
49*f585d8a3SJacky Wang             Produced.successful(1),
50*f585d8a3SJacky Wang             Produced.successful(5),
51*f585d8a3SJacky Wang             Produced.successful(7));
52*f585d8a3SJacky Wang   }
53*f585d8a3SJacky Wang 
54*f585d8a3SJacky Wang   @Test
failure()55*f585d8a3SJacky Wang   public void failure() throws Exception {
56*f585d8a3SJacky Wang     RuntimeException e = new RuntimeException("monkey");
57*f585d8a3SJacky Wang     Producer<Set<Produced<Integer>>> producer =
58*f585d8a3SJacky Wang         SetOfProducedProducer.<Integer>builder(1, 1)
59*f585d8a3SJacky Wang             .addCollectionProducer(Producers.<Set<Integer>>immediateProducer(ImmutableSet.of(1, 2)))
60*f585d8a3SJacky Wang             .addProducer(Producers.<Integer>immediateFailedProducer(e))
61*f585d8a3SJacky Wang             .build();
62*f585d8a3SJacky Wang     assertThat(producer.get().get())
63*f585d8a3SJacky Wang         .containsExactly(
64*f585d8a3SJacky Wang             Produced.successful(1), Produced.successful(2), Produced.<Integer>failed(e));
65*f585d8a3SJacky Wang   }
66*f585d8a3SJacky Wang 
67*f585d8a3SJacky Wang   @Test
delegateNpe()68*f585d8a3SJacky Wang   public void delegateNpe() throws Exception {
69*f585d8a3SJacky Wang     Producer<Set<Produced<Integer>>> producer =
70*f585d8a3SJacky Wang         SetOfProducedProducer.<Integer>builder(1, 0)
71*f585d8a3SJacky Wang             .addProducer(Producers.<Integer>immediateProducer(null))
72*f585d8a3SJacky Wang             .build();
73*f585d8a3SJacky Wang     Results<Integer> results = Results.create(producer.get().get());
74*f585d8a3SJacky Wang     assertThat(results.successes).isEmpty();
75*f585d8a3SJacky Wang     assertThat(results.failures).hasSize(1);
76*f585d8a3SJacky Wang     assertThat(Iterables.getOnlyElement(results.failures))
77*f585d8a3SJacky Wang         .hasCauseThat()
78*f585d8a3SJacky Wang         .isInstanceOf(NullPointerException.class);
79*f585d8a3SJacky Wang   }
80*f585d8a3SJacky Wang 
81*f585d8a3SJacky Wang   @Test
delegateSetNpe()82*f585d8a3SJacky Wang   public void delegateSetNpe() throws Exception {
83*f585d8a3SJacky Wang     Producer<Set<Produced<Integer>>> producer =
84*f585d8a3SJacky Wang         SetOfProducedProducer.<Integer>builder(0, 1)
85*f585d8a3SJacky Wang             .addCollectionProducer(Producers.<Set<Integer>>immediateProducer(null))
86*f585d8a3SJacky Wang             .build();
87*f585d8a3SJacky Wang     Results<Integer> results = Results.create(producer.get().get());
88*f585d8a3SJacky Wang     assertThat(results.successes).isEmpty();
89*f585d8a3SJacky Wang     assertThat(results.failures).hasSize(1);
90*f585d8a3SJacky Wang     assertThat(Iterables.getOnlyElement(results.failures))
91*f585d8a3SJacky Wang         .hasCauseThat()
92*f585d8a3SJacky Wang         .isInstanceOf(NullPointerException.class);
93*f585d8a3SJacky Wang   }
94*f585d8a3SJacky Wang 
95*f585d8a3SJacky Wang   @Test
delegateElementNpe()96*f585d8a3SJacky Wang   public void delegateElementNpe() throws Exception {
97*f585d8a3SJacky Wang     Producer<Set<Produced<Integer>>> producer =
98*f585d8a3SJacky Wang         SetOfProducedProducer.<Integer>builder(0, 1)
99*f585d8a3SJacky Wang             .addCollectionProducer(
100*f585d8a3SJacky Wang                 Producers.<Set<Integer>>immediateProducer(Collections.<Integer>singleton(null)))
101*f585d8a3SJacky Wang             .build();
102*f585d8a3SJacky Wang     Results<Integer> results = Results.create(producer.get().get());
103*f585d8a3SJacky Wang     assertThat(results.successes).isEmpty();
104*f585d8a3SJacky Wang     assertThat(results.failures).hasSize(1);
105*f585d8a3SJacky Wang     assertThat(Iterables.getOnlyElement(results.failures))
106*f585d8a3SJacky Wang         .hasCauseThat()
107*f585d8a3SJacky Wang         .isInstanceOf(NullPointerException.class);
108*f585d8a3SJacky Wang   }
109*f585d8a3SJacky Wang 
110*f585d8a3SJacky Wang   @Test
oneOfDelegateElementNpe()111*f585d8a3SJacky Wang   public void oneOfDelegateElementNpe() throws Exception {
112*f585d8a3SJacky Wang     Producer<Set<Produced<Integer>>> producer =
113*f585d8a3SJacky Wang         SetOfProducedProducer.<Integer>builder(0, 1)
114*f585d8a3SJacky Wang             .addCollectionProducer(
115*f585d8a3SJacky Wang                 Producers.<Set<Integer>>immediateProducer(
116*f585d8a3SJacky Wang                     Sets.newHashSet(Arrays.asList(5, 2, null))))
117*f585d8a3SJacky Wang             .build();
118*f585d8a3SJacky Wang     Results<Integer> results = Results.create(producer.get().get());
119*f585d8a3SJacky Wang     assertThat(results.successes).containsExactly(2, 5);
120*f585d8a3SJacky Wang     assertThat(results.failures).hasSize(1);
121*f585d8a3SJacky Wang     assertThat(Iterables.getOnlyElement(results.failures))
122*f585d8a3SJacky Wang         .hasCauseThat()
123*f585d8a3SJacky Wang         .isInstanceOf(NullPointerException.class);
124*f585d8a3SJacky Wang   }
125*f585d8a3SJacky Wang 
126*f585d8a3SJacky Wang   static final class Results<T> {
127*f585d8a3SJacky Wang     final ImmutableSet<T> successes;
128*f585d8a3SJacky Wang     final ImmutableSet<ExecutionException> failures;
129*f585d8a3SJacky Wang 
Results(ImmutableSet<T> successes, ImmutableSet<ExecutionException> failures)130*f585d8a3SJacky Wang     private Results(ImmutableSet<T> successes, ImmutableSet<ExecutionException> failures) {
131*f585d8a3SJacky Wang       this.successes = successes;
132*f585d8a3SJacky Wang       this.failures = failures;
133*f585d8a3SJacky Wang     }
134*f585d8a3SJacky Wang 
create(Set<Produced<T>> setOfProduced)135*f585d8a3SJacky Wang     static <T> Results<T> create(Set<Produced<T>> setOfProduced) {
136*f585d8a3SJacky Wang       ImmutableSet.Builder<T> successes = ImmutableSet.builder();
137*f585d8a3SJacky Wang       ImmutableSet.Builder<ExecutionException> failures = ImmutableSet.builder();
138*f585d8a3SJacky Wang       for (Produced<T> produced : setOfProduced) {
139*f585d8a3SJacky Wang         try {
140*f585d8a3SJacky Wang           successes.add(produced.get());
141*f585d8a3SJacky Wang         } catch (ExecutionException e) {
142*f585d8a3SJacky Wang           failures.add(e);
143*f585d8a3SJacky Wang         }
144*f585d8a3SJacky Wang       }
145*f585d8a3SJacky Wang       return new Results<T>(successes.build(), failures.build());
146*f585d8a3SJacky Wang     }
147*f585d8a3SJacky Wang   }
148*f585d8a3SJacky Wang }
149