@Override public ExtendedResult apply(Media m, Rating r) { return new ExtendedResult(); } };
@Override public Observable<Movie> call() { return Observable.just( new HorrorMovie(), new Movie() ); } });
public static Event randomEvent(String type, int numInstances) { Map<String, Object> values = new LinkedHashMap<String, Object>(); values.put("count200", randomIntFrom0to(4000)); values.put("count4xx", randomIntFrom0to(300)); values.put("count5xx", randomIntFrom0to(500)); return new Event(type, "instance_" + randomIntFrom0to(numInstances), values); }
@Test public void testSortedList() { Comparator<Media> sortFunction = new Comparator<Media>() { @Override public int compare(Media t1, Media t2) { return 1; } }; // this one would work without the covariance generics Observable<Media> o = Observable.just(new Movie(), new TVSeason(), new Album()); o.toSortedList(sortFunction); // this one would NOT work without the covariance generics Observable<Movie> o2 = Observable.just(new Movie(), new ActionMovie(), new HorrorMovie()); o2.toSortedList(sortFunction); }
@Test public void testMergeCovariance2() { Observable<Media> o1 = Observable.just(new HorrorMovie(), new Movie(), new Media()); Observable<Media> o2 = Observable.just(new Media(), new HorrorMovie()); Observable<Observable<Media>> os = Observable.just(o1, o2); List<Media> values = Observable.merge(os).toList().blockingGet(); assertEquals(5, values.size()); }
@Test public void testComposeWithDeltaLogic() { List<Movie> list1 = Arrays.asList(new Movie(), new HorrorMovie(), new ActionMovie()); List<Movie> list2 = Arrays.asList(new ActionMovie(), new Movie(), new HorrorMovie(), new ActionMovie()); Observable<List<Movie>> movies = Observable.just(list1, list2); movies.compose(deltaTransformer); }
/** * This won't compile if super/extends isn't done correctly on generics. */ @Test public void testCovarianceOfCombineLatest() { Observable<HorrorMovie> horrors = Observable.just(new HorrorMovie()); Observable<CoolRating> ratings = Observable.just(new CoolRating()); Observable.<Movie, CoolRating, Result> combineLatest(horrors, ratings, combine).blockingForEach(action); Observable.<Movie, CoolRating, Result> combineLatest(horrors, ratings, combine).blockingForEach(action); Observable.<Media, Rating, ExtendedResult> combineLatest(horrors, ratings, combine).blockingForEach(extendedAction); Observable.<Media, Rating, Result> combineLatest(horrors, ratings, combine).blockingForEach(action); Observable.<Media, Rating, ExtendedResult> combineLatest(horrors, ratings, combine).blockingForEach(action); Observable.<Movie, CoolRating, Result> combineLatest(horrors, ratings, combine); }
/** * Reduce consumes and produces T so can't do covariance. * * https://github.com/ReactiveX/RxJava/issues/360#issuecomment-24203016 */ @Test public void reduceCovariance() { // must type it to <Movie> Observable<Movie> horrorMovies = Observable.<Movie> just(new HorrorMovie()); libraryFunctionActingOnMovieObservables(horrorMovies); }
@Override public Observable<HorrorMovie> apply(Observable<Movie> t) { return Observable.just(new HorrorMovie()); } });
@Override public Observable<Movie> apply(Observable<HorrorMovie> t) { return Observable.just(new Movie()); } });
@Override public void accept(Emitter<Event> s) { s.onNext(randomEvent(type, numInstances)); try { // slow it down somewhat Thread.sleep(50); } catch (InterruptedException e) { Thread.currentThread().interrupt(); s.onError(e); } } }
@Test public void testMergeCovariance() { Observable<Media> o1 = Observable.<Media> just(new HorrorMovie(), new Movie()); Observable<Media> o2 = Observable.just(new Media(), new HorrorMovie()); Observable<Observable<Media>> os = Observable.just(o1, o2); List<Media> values = Observable.merge(os).toList().blockingGet(); assertEquals(4, values.size()); }
/** * This won't compile if super/extends isn't done correctly on generics. */ @Test public void testCovarianceOfZip() { Observable<HorrorMovie> horrors = Observable.just(new HorrorMovie()); Observable<CoolRating> ratings = Observable.just(new CoolRating()); Observable.<Movie, CoolRating, Result> zip(horrors, ratings, combine).blockingForEach(action); Observable.<Movie, CoolRating, Result> zip(horrors, ratings, combine).blockingForEach(action); Observable.<Media, Rating, ExtendedResult> zip(horrors, ratings, combine).blockingForEach(extendedAction); Observable.<Media, Rating, Result> zip(horrors, ratings, combine).blockingForEach(action); Observable.<Media, Rating, ExtendedResult> zip(horrors, ratings, combine).blockingForEach(action); Observable.<Movie, CoolRating, Result> zip(horrors, ratings, combine); }
@Override public Observable<HorrorMovie> apply(Observable<Movie> t) { return Observable.just(new HorrorMovie()).map(new Function<HorrorMovie, HorrorMovie>() { @Override public HorrorMovie apply(HorrorMovie v) { return v; } }); } }
@Override public ExtendedResult apply(Media m, Rating r) { return new ExtendedResult(); } };
@Test public void testMergeCovariance3() { Observable<Movie> o1 = Observable.just(new HorrorMovie(), new Movie()); Observable<Media> o2 = Observable.just(new Media(), new HorrorMovie()); List<Media> values = Observable.merge(o1, o2).toList().blockingGet(); assertTrue(values.get(0) instanceof HorrorMovie); assertTrue(values.get(1) instanceof Movie); assertTrue(values.get(2) != null); assertTrue(values.get(3) instanceof HorrorMovie); }
@SuppressWarnings("unused") @Test public void testCovarianceOfCompose2() { Observable<Movie> movie = Observable.<Movie> just(new HorrorMovie()); Observable<HorrorMovie> movie2 = movie.compose(new ObservableTransformer<Movie, HorrorMovie>() { @Override public Observable<HorrorMovie> apply(Observable<Movie> t) { return Observable.just(new HorrorMovie()); } }); }
@Test public void testConcatCovariance3() { HorrorMovie horrorMovie1 = new HorrorMovie(); Movie movie = new Movie(); Media media = new Media(); HorrorMovie horrorMovie2 = new HorrorMovie(); Observable<Movie> o1 = Observable.just(horrorMovie1, movie); Observable<Media> o2 = Observable.just(media, horrorMovie2); List<Media> values = Observable.concat(o1, o2).toList().blockingGet(); assertEquals(horrorMovie1, values.get(0)); assertEquals(movie, values.get(1)); assertEquals(media, values.get(2)); assertEquals(horrorMovie2, values.get(3)); assertEquals(4, values.size()); }
/** * This won't compile if super/extends isn't done correctly on generics. */ @Test public void testCovarianceOfMerge() { Observable<HorrorMovie> horrors = Observable.just(new HorrorMovie()); Observable<Observable<HorrorMovie>> metaHorrors = Observable.just(horrors); Observable.<Media> merge(metaHorrors); }
@SuppressWarnings("unused") @Test public void testCovarianceOfCompose() { Observable<HorrorMovie> movie = Observable.just(new HorrorMovie()); Observable<Movie> movie2 = movie.compose(new ObservableTransformer<HorrorMovie, Movie>() { @Override public Observable<Movie> apply(Observable<HorrorMovie> t) { return Observable.just(new Movie()); } }); }