Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 5 additions & 30 deletions src/test/java/io/reactivex/rxjava4/core/ConverterTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -174,52 +174,27 @@ interface A<T, R> { }
interface B<T> { }

private static <T> ObservableConverter<A<T, ?>, B<T>> testObservableConverterCreator() {
return new ObservableConverter<A<T, ?>, B<T>>() {
@Override
public B<T> apply(Observable<A<T, ?>> a) {
return new B<T>() /* NFI */ {
};
}
return _ -> new B<T>() /* NFI */ {
};
}

private static <T> SingleConverter<A<T, ?>, B<T>> testSingleConverterCreator() {
return new SingleConverter<A<T, ?>, B<T>>() {
@Override
public B<T> apply(Single<A<T, ?>> a) {
return new B<T>() /* NFI */ {
};
}
return _ -> new B<T>() /* NFI */ {
};
}

private static <T> MaybeConverter<A<T, ?>, B<T>> testMaybeConverterCreator() {
return new MaybeConverter<A<T, ?>, B<T>>() {
@Override
public B<T> apply(Maybe<A<T, ?>> a) {
return new B<T>() /* NFI */ {
};
}
return _ -> new B<T>() /* NFI */ {
};
}

private static <T> FlowableConverter<A<T, ?>, B<T>> testFlowableConverterCreator() {
return new FlowableConverter<A<T, ?>, B<T>>() {
@Override
public B<T> apply(Flowable<A<T, ?>> a) {
return new B<T>() /* NFI */ {
};
}
return _ -> new B<T>() /* NFI */ {
};
}

private static <T> ParallelFlowableConverter<A<T, ?>, B<T>> testParallelFlowableConverterCreator() {
return new ParallelFlowableConverter<A<T, ?>, B<T>>() {
@Override
public B<T> apply(ParallelFlowable<A<T, ?>> a) {
return new B<T>() /* NFI */ {
};
}
return a -> new B<T>() /* NFI */ {
};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,12 +144,7 @@ public void accept(Object o, Integer t) {
@Test
public void collectIntoFlowable() {
Flowable.just(1, 1, 1, 1, 2)
.collectInto(new HashSet<>(), new BiConsumer<HashSet<Integer>, Integer>() {
@Override
public void accept(HashSet<Integer> s, Integer v) throws Exception {
s.add(v);
}
})
.collectInto(new HashSet<>(), (BiConsumer<HashSet<Integer>, Integer>) HashSet::add)
.toFlowable()
.test()
.assertResult(new HashSet<>(Arrays.asList(1, 2)));
Expand Down Expand Up @@ -263,60 +258,25 @@ public void accept(Object o, Integer t) {
@Test
public void collectInto() {
Flowable.just(1, 1, 1, 1, 2)
.collectInto(new HashSet<>(), new BiConsumer<HashSet<Integer>, Integer>() {
@Override
public void accept(HashSet<Integer> s, Integer v) throws Exception {
s.add(v);
}
})
.collectInto(new HashSet<>(), (BiConsumer<HashSet<Integer>, Integer>) HashSet::add)
.test()
.assertResult(new HashSet<>(Arrays.asList(1, 2)));
}

@Test
public void dispose() {
TestHelper.checkDisposed(Flowable.just(1, 2)
.collect(Functions.justSupplier(new ArrayList<>()), new BiConsumer<ArrayList<Integer>, Integer>() {
@Override
public void accept(ArrayList<Integer> a, Integer b) throws Exception {
a.add(b);
}
}));
.collect(Functions.justSupplier(new ArrayList<>()), (BiConsumer<ArrayList<Integer>, Integer>) ArrayList::add));

TestHelper.checkDisposed(Flowable.just(1, 2)
.collect(Functions.justSupplier(new ArrayList<>()), new BiConsumer<ArrayList<Integer>, Integer>() {
@Override
public void accept(ArrayList<Integer> a, Integer b) throws Exception {
a.add(b);
}
}).toFlowable());
.collect(Functions.justSupplier(new ArrayList<>()), (BiConsumer<ArrayList<Integer>, Integer>) ArrayList::add).toFlowable());
}

@Test
public void doubleOnSubscribe() {
TestHelper.checkDoubleOnSubscribeFlowable(new Function<Flowable<Integer>, Flowable<ArrayList<Integer>>>() {
@Override
public Flowable<ArrayList<Integer>> apply(Flowable<Integer> f) throws Exception {
return f.collect(Functions.justSupplier(new ArrayList<>()),
new BiConsumer<ArrayList<Integer>, Integer>() {
@Override
public void accept(ArrayList<Integer> a, Integer b) throws Exception {
a.add(b);
}
}).toFlowable();
}
});
TestHelper.checkDoubleOnSubscribeFlowableToSingle(new Function<Flowable<Integer>, Single<ArrayList<Integer>>>() {
@Override
public Single<ArrayList<Integer>> apply(Flowable<Integer> f) throws Exception {
return f.collect(Functions.justSupplier(new ArrayList<>()),
new BiConsumer<ArrayList<Integer>, Integer>() {
@Override
public void accept(ArrayList<Integer> a, Integer b) throws Exception {
a.add(b);
}
});
}
});
TestHelper.checkDoubleOnSubscribeFlowable((Function<Flowable<Integer>, Flowable<ArrayList<Integer>>>) f -> f.collect(Functions.justSupplier(new ArrayList<>()),
(BiConsumer<ArrayList<Integer>, Integer>) ArrayList::add).toFlowable());
TestHelper.checkDoubleOnSubscribeFlowableToSingle((Function<Flowable<Integer>, Single<ArrayList<Integer>>>) f -> f.collect(Functions.justSupplier(new ArrayList<>()),
(BiConsumer<ArrayList<Integer>, Integer>) ArrayList::add));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
import org.junit.Test;
import static java.util.concurrent.Flow.*;

import java.util.concurrent.Flow.Publisher;

import io.reactivex.rxjava4.core.*;
import io.reactivex.rxjava4.flowable.FlowableEventStream.Event;
import io.reactivex.rxjava4.flowables.GroupedFlowable;
Expand All @@ -31,19 +33,11 @@ public void takeUnsubscribesOnGroupBy() {
FlowableEventStream.getEventStream("HTTP-ClusterB", 20)
)
// group by type (2 clusters)
.groupBy(new Function<Event, Object>() {
@Override
public Object apply(Event event) {
return event.type;
}
})
.groupBy(event -> (Object)event.type)
.take(1)
.blockingForEach(new Consumer<GroupedFlowable<Object, Event>>() {
@Override
public void accept(GroupedFlowable<Object, Event> v) {
System.out.println(v);
v.take(1).subscribe(); // FIXME groups need consumption to a certain degree to cancel upstream
}
.blockingForEach(v -> {
System.out.println(v);
v.take(1).subscribe(); // FIXME groups need consumption to a certain degree to cancel upstream
});

System.out.println("**** finished");
Expand All @@ -56,30 +50,11 @@ public void takeUnsubscribesOnFlatMapOfGroupBy() {
FlowableEventStream.getEventStream("HTTP-ClusterB", 20)
)
// group by type (2 clusters)
.groupBy(new Function<Event, Object>() {
@Override
public Object apply(Event event) {
return event.type;
}
})
.flatMap(new Function<GroupedFlowable<Object, Event>, Publisher<Object>>() {
@Override
public Publisher<Object> apply(GroupedFlowable<Object, Event> g) {
return g.map(new Function<Event, Object>() {
@Override
public Object apply(Event event) {
return event.instanceId + " - " + event.values.get("count200");
}
});
}
})
.groupBy(event -> (Object)event.type)
.flatMap((Function<GroupedFlowable<Object, Event>, Publisher<Object>>)
g -> g.map(event -> event.instanceId + " - " + event.values.get("count200")))
.take(20)
.blockingForEach(new Consumer<Object>() {
@Override
public void accept(Object v) {
System.out.println(v);
}
});
.blockingForEach(v -> System.out.println(v));

System.out.println("**** finished");
}
Expand All @@ -89,18 +64,9 @@ public void groupsCompleteAsSoonAsMainCompletes() {
TestSubscriber<Integer> ts = TestSubscriber.create();

Flowable.range(0, 20)
.groupBy(new Function<Integer, Integer>() {
@Override
public Integer apply(Integer i) {
return i % 5;
}
})
.concatMap(new Function<GroupedFlowable<Integer, Integer>, Flowable<Integer>>() {
@Override
public Flowable<Integer> apply(GroupedFlowable<Integer, Integer> v) {
return v;
}
}, 20) // need to prefetch as many groups as groupBy produces to avoid MBE
.groupBy(i -> i % 5)
// need to prefetch as many groups as groupBy produces to avoid MBE
.concatMap((Function<GroupedFlowable<Integer, Integer>, Flowable<Integer>>) v -> v, 20)
.subscribe(ts);

// Behavior change: this now counts as group abandonment because concatMap
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import static org.junit.Assert.*;

import java.util.List;
import java.util.concurrent.Flow.Publisher;

import org.junit.Test;
import static java.util.concurrent.Flow.*;
Expand Down Expand Up @@ -76,15 +77,10 @@ public void mergeCovariance3() {
@Test
public void mergeCovariance4() {

Flowable<Movie> f1 = Flowable.defer(new Supplier<Publisher<Movie>>() {
@Override
public Publisher<Movie> get() {
return Flowable.just(
new HorrorMovie(),
new Movie()
);
}
});
Flowable<Movie> f1 = Flowable.defer((Supplier<Publisher<Movie>>) () -> Flowable.just(
new HorrorMovie(),
new Movie()
));

Flowable<Media> f2 = Flowable.just(new Media(), new HorrorMovie());

Expand Down
Loading