From 804d97a582c7604559da0d589a0c4eddebf910b2 Mon Sep 17 00:00:00 2001 From: Alessandro Crugnola Date: Sun, 26 Dec 2021 11:08:19 +0100 Subject: [PATCH] adding tests --- .../rxjava3/extensions/SingleAndroidTest.kt | 10 ++++++++-- .../rxjava3/extensions/flowable/Flowable.kt | 8 +++++--- .../extensions/observable/Observable.kt | 8 +++++--- .../rxjava3/extensions/single/Single.kt | 20 ++++++++++++++----- 4 files changed, 33 insertions(+), 13 deletions(-) diff --git a/RxJavaExtensions/src/androidTest/java/it/sephiroth/android/rxjava3/extensions/SingleAndroidTest.kt b/RxJavaExtensions/src/androidTest/java/it/sephiroth/android/rxjava3/extensions/SingleAndroidTest.kt index a2eb65b..83319e3 100644 --- a/RxJavaExtensions/src/androidTest/java/it/sephiroth/android/rxjava3/extensions/SingleAndroidTest.kt +++ b/RxJavaExtensions/src/androidTest/java/it/sephiroth/android/rxjava3/extensions/SingleAndroidTest.kt @@ -2,10 +2,8 @@ package it.sephiroth.android.rxjava3.extensions import android.os.Looper import androidx.test.ext.junit.runners.AndroidJUnit4 -import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.schedulers.Schedulers -import it.sephiroth.android.rxjava3.extensions.observable.firstInList import it.sephiroth.android.rxjava3.extensions.observers.AutoDisposableSingleObserver import it.sephiroth.android.rxjava3.extensions.single.* import org.junit.Assert @@ -145,6 +143,14 @@ class SingleAndroidTest { Single.just(listOf(null, null)).asObservable().test().await().assertComplete().assertNoValues() } + @Test + fun test011() { + Single.just(listOf(1, 2, 3, 4, 5)).firstInList { it % 2 == 0 }.test().await().assertComplete().assertValue(2) + Single.just(emptyList()).firstInList { it % 2 == 0 }.test().await().assertComplete().assertNoValues() + Single.just(listOf(null, 1, 2)).firstInList { null != it && it % 2 == 0 }.test().await().assertComplete().assertValue(2) + Single.just(listOf(null, null)).firstInList { null != it && it % 2 == 0 }.test().await().assertComplete().assertNoValues() + } + companion object { private lateinit var ioThread: Thread private lateinit var singleThread: Thread diff --git a/RxJavaExtensions/src/main/java/it/sephiroth/android/rxjava3/extensions/flowable/Flowable.kt b/RxJavaExtensions/src/main/java/it/sephiroth/android/rxjava3/extensions/flowable/Flowable.kt index a427245..38894ac 100644 --- a/RxJavaExtensions/src/main/java/it/sephiroth/android/rxjava3/extensions/flowable/Flowable.kt +++ b/RxJavaExtensions/src/main/java/it/sephiroth/android/rxjava3/extensions/flowable/Flowable.kt @@ -42,6 +42,8 @@ import it.sephiroth.android.rxjava3.extensions.observable.autoSubscribe import it.sephiroth.android.rxjava3.extensions.observers.AutoDisposableObserver import it.sephiroth.android.rxjava3.extensions.observers.AutoDisposableSubscriber import it.sephiroth.android.rxjava3.extensions.operators.FlowableMapNotNull +import it.sephiroth.android.rxjava3.extensions.single.firstInList +import it.sephiroth.android.rxjava3.extensions.single.firstInListNotNull import java.util.* import java.util.concurrent.TimeUnit import java.util.function.Predicate @@ -236,7 +238,7 @@ fun Flowable.toSingle(): Single where T : Any { * @since 3.0.5 */ fun Flowable>.firstInList(): Maybe { - return this.firstOrError().filter { it.isNotEmpty() }.map { it.first() } + return this.toSingle().firstInList() } @@ -247,7 +249,7 @@ fun Flowable>.firstInList(): Maybe { * @since 3.0.5 */ fun Flowable>.firstInListNotNull(): Maybe { - return this.firstOrError().filter { it.isNotEmpty() }.mapOptional { Optional.ofNullable(it.firstOrNull { item -> item != null }) } + return this.toSingle().firstInListNotNull() } @@ -258,5 +260,5 @@ fun Flowable>.firstInListNotNull(): Maybe { * @since 3.0.5 */ fun Flowable>.firstInList(predicate: Predicate): Maybe { - return this.firstOrError().mapOptional { list -> Optional.ofNullable(list.firstOrNull { item -> predicate.test(item) }) } + return this.toSingle().firstInList(predicate) } diff --git a/RxJavaExtensions/src/main/java/it/sephiroth/android/rxjava3/extensions/observable/Observable.kt b/RxJavaExtensions/src/main/java/it/sephiroth/android/rxjava3/extensions/observable/Observable.kt index e5c9da9..0554c5f 100644 --- a/RxJavaExtensions/src/main/java/it/sephiroth/android/rxjava3/extensions/observable/Observable.kt +++ b/RxJavaExtensions/src/main/java/it/sephiroth/android/rxjava3/extensions/observable/Observable.kt @@ -42,6 +42,8 @@ import io.reactivex.rxjava3.schedulers.Schedulers import it.sephiroth.android.rxjava3.extensions.MuteException import it.sephiroth.android.rxjava3.extensions.observers.AutoDisposableObserver import it.sephiroth.android.rxjava3.extensions.operators.ObservableMapNotNull +import it.sephiroth.android.rxjava3.extensions.single.firstInList +import it.sephiroth.android.rxjava3.extensions.single.firstInListNotNull import java.util.* import java.util.concurrent.TimeUnit import java.util.function.Predicate @@ -68,7 +70,7 @@ fun Observable.toSingle(): Single where T : Any { * if the list contains at least one element. */ fun Observable>.firstInList(): Maybe { - return this.firstOrError().filter { it.isNotEmpty() }.map { it.first() } + return this.toSingle().firstInList() } /** @@ -78,7 +80,7 @@ fun Observable>.firstInList(): Maybe { * @since 3.0.5 */ fun Observable>.firstInListNotNull(): Maybe { - return this.firstOrError().filter { it.isNotEmpty() }.mapOptional { Optional.ofNullable(it.firstOrNull { item -> item != null }) } + return this.toSingle().firstInListNotNull() } /** @@ -88,7 +90,7 @@ fun Observable>.firstInListNotNull(): Maybe { * @since 3.0.5 */ fun Observable>.firstInList(predicate: Predicate): Maybe { - return this.firstOrError().mapOptional { list -> Optional.ofNullable(list.firstOrNull { item -> predicate.test(item) }) } + return this.toSingle().firstInList(predicate) } diff --git a/RxJavaExtensions/src/main/java/it/sephiroth/android/rxjava3/extensions/single/Single.kt b/RxJavaExtensions/src/main/java/it/sephiroth/android/rxjava3/extensions/single/Single.kt index fdec06a..b647e80 100644 --- a/RxJavaExtensions/src/main/java/it/sephiroth/android/rxjava3/extensions/single/Single.kt +++ b/RxJavaExtensions/src/main/java/it/sephiroth/android/rxjava3/extensions/single/Single.kt @@ -37,6 +37,7 @@ import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.functions.Function import it.sephiroth.android.rxjava3.extensions.observers.AutoDisposableSingleObserver import java.util.* +import java.util.function.Predicate /** @@ -46,18 +47,17 @@ import java.util.* */ /** - * If the [Single] returns a [List] of items, this transformer will - * convert the source into a [Maybe] which will emit the very first item of the list, + * If the source [Single] returns a [List] of items, this transformer will + * convert the Single into a [Maybe] which emit the very first item of the list, * if the list contains at least one element. */ fun Single>.firstInList(): Maybe { return this.filter { it.isNotEmpty() }.map { it.first() } } - /** - * If the [Single] returns a [List] of items, this transformer will - * convert the source into a [Maybe] which will emit the very first non null item of the list. + * If the source [Single] returns a [List] of items, this transformer will + * convert the Single into a [Maybe] which emit the very first non null item of the list. * * @since 3.0.5 */ @@ -65,6 +65,16 @@ fun Single>.firstInListNotNull(): Maybe { return this.filter { it.isNotEmpty() }.mapOptional { Optional.ofNullable(it.firstOrNull { item -> item != null }) } } +/** + * If the source [Single] returns a [List] of items, this transformer will + * convert the Single into a [Maybe] which emit the very first item that match the predicate. + * + * @since 3.0.5 + */ +fun Single>.firstInList(predicate: Predicate): Maybe { + return this.mapOptional { list -> Optional.ofNullable(list.firstOrNull { item -> predicate.test(item) }) } +} + /** * Subscribe to this [Single] using an instance of the [AutoDisposableSingleObserver] */