diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 7a67f902e..8cffb3303 100755 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -10,7 +10,7 @@ def kotlinVersion = '1.9.21' def versions = [ dagger : '2.45', kotlin : kotlinVersion, - mviCore : '1.4.0', + mviCore : '2.0.0', robolectric : '4.13', composeBom : '2023.10.01', composeCompiler : '1.5.7', @@ -37,7 +37,7 @@ def versions = [ androidxSavedStateVersion : '1.2.0', // https://developer.android.com/jetpack/androidx/releases/savedstate androidxTestVersion : '1.5.0', // https://developer.android.com/jetpack/androidx/releases/test androidxTestUiAutoVersion : '2.2.0', - retrofitVersion : '2.9.0', + retrofitVersion : '2.11.0', okhttp : '3.14.7', leakCanary : '2.9.1', jacoco : '0.8.8', @@ -52,7 +52,7 @@ def apt = [ javaxInject : "javax.inject:javax.inject:1", ] -def agp = 'com.android.tools.build:gradle:8.2.2' +def agp = 'com.android.tools.build:gradle:8.9.1' def build = [ compileSdk : 34, @@ -114,9 +114,9 @@ def external = [ mviCoreAndroid : "com.github.badoo.mvicore:mvicore-android:${versions.mviCore}", mviCoreBinder : "com.github.badoo.mvicore:binder:${versions.mviCore}", mviCoreDiff : "com.github.badoo.mvicore:mvicore-diff:${versions.mviCore}", - rxjava2 : "io.reactivex.rxjava2:rxjava:2.2.18", - rxrelay2 : "com.jakewharton.rxrelay2:rxrelay:2.1.0", - rxandroid2 : "io.reactivex.rxjava2:rxandroid:2.1.1", + rxjava3 : "io.reactivex.rxjava3:rxjava:3.1.10", + rxrelay3 : "com.jakewharton.rxrelay3:rxrelay:3.0.1", + rxandroid3 : "io.reactivex.rxjava3:rxandroid:3.0.2", roboelectricBase : "org.robolectric:robolectric:${versions.robolectric}", coil : "io.coil-kt:coil:${versions.coil}", leakCanary : "com.squareup.leakcanary:leakcanary-android:${versions.leakCanary}", @@ -125,7 +125,7 @@ def external = [ def retrofit = [ retrofit : "com.squareup.retrofit2:retrofit:${versions.retrofitVersion}", - rxjavaAdapter : "com.squareup.retrofit2:adapter-rxjava2:${versions.retrofitVersion}", + rxjavaAdapter : "com.squareup.retrofit2:adapter-rxjava3:${versions.retrofitVersion}", moshiConverter : "com.squareup.retrofit2:converter-moshi:${versions.retrofitVersion}", okhttp : "com.squareup.okhttp3:okhttp:${versions.okhttp}", okhttpLoggingInterceptor: "com.squareup.okhttp3:logging-interceptor:${versions.okhttp}", diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5fbdbe6a7..a683b5fb1 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Jun 14 23:02:25 BST 2020 +#Wed Apr 02 17:45:41 BST 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip diff --git a/libraries/rib-base-test-activity/src/androidTest/java/com/badoo/ribs/test/Utils.kt b/libraries/rib-base-test-activity/src/androidTest/java/com/badoo/ribs/test/Utils.kt index 7735c0ee2..157aa8ea1 100644 --- a/libraries/rib-base-test-activity/src/androidTest/java/com/badoo/ribs/test/Utils.kt +++ b/libraries/rib-base-test-activity/src/androidTest/java/com/badoo/ribs/test/Utils.kt @@ -7,7 +7,10 @@ import java.util.concurrent.TimeoutException private const val DEFAULT_CONDITION_TIMEOUT_MILLISECONDS = 15000L private const val DEFAULT_CHECK_CONDITION_FREQUENCY_MILLIS = 10L -fun waitFor(timeoutMillis: Long = DEFAULT_CONDITION_TIMEOUT_MILLISECONDS, condition: () -> Boolean) { +fun waitFor( + timeoutMillis: Long = DEFAULT_CONDITION_TIMEOUT_MILLISECONDS, + condition: () -> Boolean +) { val start = System.currentTimeMillis() while (!condition()) { if (System.currentTimeMillis() > start + timeoutMillis) { diff --git a/libraries/rib-base-test-activity/src/androidTest/java/com/badoo/ribs/test/sample/SampleView.kt b/libraries/rib-base-test-activity/src/androidTest/java/com/badoo/ribs/test/sample/SampleView.kt index f484325a7..88d111bfe 100644 --- a/libraries/rib-base-test-activity/src/androidTest/java/com/badoo/ribs/test/sample/SampleView.kt +++ b/libraries/rib-base-test-activity/src/androidTest/java/com/badoo/ribs/test/sample/SampleView.kt @@ -19,10 +19,9 @@ class SampleViewImpl( val lifecycle: Lifecycle = context.lifecycle - override val androidView: ViewGroup + override val androidView: ViewGroup = FrameLayout(context.parent.context) init { - androidView = FrameLayout(context.parent.context) val child = TextView(context.parent.context) child.id = viewId child.text = TextView::class.qualifiedName diff --git a/libraries/rib-base-test-activity/src/main/AndroidManifest.xml b/libraries/rib-base-test-activity/src/main/AndroidManifest.xml index cceb5a314..554f78ae4 100644 --- a/libraries/rib-base-test-activity/src/main/AndroidManifest.xml +++ b/libraries/rib-base-test-activity/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - + diff --git a/libraries/rib-base-test-rx2/gradle.properties b/libraries/rib-base-test-rx2/gradle.properties deleted file mode 100755 index c2c879696..000000000 --- a/libraries/rib-base-test-rx2/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -POM_NAME=RIBs (Base Test Rx2 helpers) -POM_ARTIFACT_ID=rib-base-test-rx2 -POM_PACKAGING=android diff --git a/libraries/rib-base-test-rx2/.gitignore b/libraries/rib-base-test-rx3/.gitignore similarity index 100% rename from libraries/rib-base-test-rx2/.gitignore rename to libraries/rib-base-test-rx3/.gitignore diff --git a/libraries/rib-base-test-rx2/build.gradle b/libraries/rib-base-test-rx3/build.gradle similarity index 76% rename from libraries/rib-base-test-rx2/build.gradle rename to libraries/rib-base-test-rx3/build.gradle index 7def029a4..d30117e35 100644 --- a/libraries/rib-base-test-rx2/build.gradle +++ b/libraries/rib-base-test-rx3/build.gradle @@ -1,7 +1,7 @@ configureAndroidLibrary(project) android { - namespace 'com.badoo.ribs.test.rx2' + namespace 'com.badoo.ribs.test.rx3' defaultConfig { versionCode 1 @@ -19,10 +19,10 @@ android { dependencies { compileOnly project(':libraries:rib-base') compileOnly project(':libraries:rib-base-test') - compileOnly project(':libraries:rib-rx2') - - api deps.external.rxjava2 - api deps.external.rxrelay2 + compileOnly project(':libraries:rib-rx3') + + api deps.external.rxjava3 + api deps.external.rxrelay3 implementation deps.test.mockitoKotlin } diff --git a/libraries/rib-base-test-rx2/detekt-baseline.xml b/libraries/rib-base-test-rx3/detekt-baseline.xml similarity index 100% rename from libraries/rib-base-test-rx2/detekt-baseline.xml rename to libraries/rib-base-test-rx3/detekt-baseline.xml diff --git a/libraries/rib-base-test-rx3/gradle.properties b/libraries/rib-base-test-rx3/gradle.properties new file mode 100755 index 000000000..93af10f26 --- /dev/null +++ b/libraries/rib-base-test-rx3/gradle.properties @@ -0,0 +1,3 @@ +POM_NAME=RIBs (Base Test Rx3 helpers) +POM_ARTIFACT_ID=rib-base-test-rx3 +POM_PACKAGING=android diff --git a/libraries/rib-base-test-rx2/lint-baseline.xml b/libraries/rib-base-test-rx3/lint-baseline.xml similarity index 100% rename from libraries/rib-base-test-rx2/lint-baseline.xml rename to libraries/rib-base-test-rx3/lint-baseline.xml diff --git a/libraries/rib-base-test-rx2/src/main/java/com/badoo/common/ribs/rx2/InteractorTestHelper.kt b/libraries/rib-base-test-rx3/src/main/java/com/badoo/common/ribs/rx3/InteractorTestHelper.kt similarity index 70% rename from libraries/rib-base-test-rx2/src/main/java/com/badoo/common/ribs/rx2/InteractorTestHelper.kt rename to libraries/rib-base-test-rx3/src/main/java/com/badoo/common/ribs/rx3/InteractorTestHelper.kt index 38f6b98fb..ad919cf9b 100644 --- a/libraries/rib-base-test-rx2/src/main/java/com/badoo/common/ribs/rx2/InteractorTestHelper.kt +++ b/libraries/rib-base-test-rx3/src/main/java/com/badoo/common/ribs/rx3/InteractorTestHelper.kt @@ -1,26 +1,26 @@ -package com.badoo.common.ribs.rx2 +package com.badoo.common.ribs.rx3 import android.view.ViewGroup import com.badoo.ribs.clienthelper.interactor.Interactor import com.badoo.ribs.core.Rib import com.badoo.ribs.core.view.RibView -import com.badoo.ribs.rx2.clienthelper.connector.Connectable +import com.badoo.ribs.rx3.clienthelper.connector.Connectable import com.badoo.ribs.test.InteractorTestHelper -import com.jakewharton.rxrelay2.PublishRelay -import com.jakewharton.rxrelay2.Relay -import io.reactivex.ObservableSource -import io.reactivex.Observer +import com.jakewharton.rxrelay3.PublishRelay +import com.jakewharton.rxrelay3.Relay +import io.reactivex.rxjava3.core.ObservableSource +import io.reactivex.rxjava3.core.Observer import org.mockito.kotlin.any import org.mockito.kotlin.mock import org.mockito.kotlin.whenever @Deprecated("Use RibInteractorTestHelper") -inline fun createInteractorTestHelper( +inline fun createInteractorTestHelper( interactor: Interactor<*, View>, viewEventRelay: Relay ): InteractorTestHelper where View : RibView, View : ObservableSource { val view: View = viewEventRelay.subscribedView() - return InteractorTestHelper(interactor, { view }) + return InteractorTestHelper(interactor) { view } } @Deprecated("Use RibInteractorTestHelper") @@ -36,7 +36,7 @@ inline fun Interactor.mockIO( } @Deprecated("Use RibInteractorTestHelper") -inline fun Relay.subscribedView(): RView where RView : RibView, RView : ObservableSource = +inline fun Relay.subscribedView(): RView where RView : RibView, RView : ObservableSource = mock().apply { whenever(this.androidView).thenReturn(mock()) whenever(this.subscribe(any())).thenAnswer { diff --git a/libraries/rib-base-test-rx2/src/main/java/com/badoo/ribs/test/rx2/view/RibViewStub.kt b/libraries/rib-base-test-rx3/src/main/java/com/badoo/ribs/test/rx3/view/RibViewStub.kt similarity index 84% rename from libraries/rib-base-test-rx2/src/main/java/com/badoo/ribs/test/rx2/view/RibViewStub.kt rename to libraries/rib-base-test-rx3/src/main/java/com/badoo/ribs/test/rx3/view/RibViewStub.kt index 0abefa199..3a3b7679c 100644 --- a/libraries/rib-base-test-rx2/src/main/java/com/badoo/ribs/test/rx2/view/RibViewStub.kt +++ b/libraries/rib-base-test-rx3/src/main/java/com/badoo/ribs/test/rx3/view/RibViewStub.kt @@ -1,14 +1,14 @@ -package com.badoo.ribs.test.rx2.view +package com.badoo.ribs.test.rx3.view import android.annotation.SuppressLint import android.os.Bundle import android.view.ViewGroup import com.badoo.ribs.core.view.AndroidRibView import com.badoo.ribs.test.assertEquals -import com.jakewharton.rxrelay2.PublishRelay -import com.jakewharton.rxrelay2.Relay -import io.reactivex.ObservableSource -import io.reactivex.functions.Consumer +import com.jakewharton.rxrelay3.PublishRelay +import com.jakewharton.rxrelay3.Relay +import io.reactivex.rxjava3.core.ObservableSource +import io.reactivex.rxjava3.functions.Consumer import org.mockito.Mockito.mock /* Sync with other versions. */ diff --git a/libraries/rib-base-test/src/main/java/com/badoo/ribs/test/InteractorTestHelper.kt b/libraries/rib-base-test/src/main/java/com/badoo/ribs/test/InteractorTestHelper.kt index b252d10da..057154876 100644 --- a/libraries/rib-base-test/src/main/java/com/badoo/ribs/test/InteractorTestHelper.kt +++ b/libraries/rib-base-test/src/main/java/com/badoo/ribs/test/InteractorTestHelper.kt @@ -28,6 +28,7 @@ class InteractorTestHelper( when (state) { Lifecycle.State.DESTROYED, Lifecycle.State.INITIALIZED -> throw IllegalArgumentException("Unsupported state: $state") + Lifecycle.State.CREATED -> toAttachViewState(block) Lifecycle.State.STARTED -> toStartState(block) Lifecycle.State.RESUMED -> toResumeState(block) diff --git a/libraries/rib-base/build.gradle b/libraries/rib-base/build.gradle index 08daa0a5a..9feb6e655 100644 --- a/libraries/rib-base/build.gradle +++ b/libraries/rib-base/build.gradle @@ -19,7 +19,7 @@ dependencies { testImplementation deps.external.mviCore testImplementation deps.external.mviCoreAndroid testImplementation deps.external.mviCoreBinder - testImplementation deps.external.rxrelay2 + testImplementation deps.external.rxrelay3 junitTestImplementation(project) testImplementation deps.android.annotations @@ -28,14 +28,14 @@ dependencies { testImplementation deps.test.mockitoKotlin testImplementation project(":libraries:rib-base-test") - androidTestImplementation deps.external.rxjava2 + androidTestImplementation deps.external.rxjava3 junitAndroidTestImplementation(project) androidTestImplementation deps.test.assertj androidTestImplementation deps.androidTest.espresso androidTestImplementation deps.androidTest.espressoIntents androidTestImplementation deps.androidTest.runner androidTestImplementation deps.androidTest.rules - androidTestImplementation project(":libraries:rib-rx2") + androidTestImplementation project(':libraries:rib-rx3') androidTestImplementation project(":libraries:rib-base-test") androidTestImplementation project(':libraries:rib-base-test-activity') } diff --git a/libraries/rib-base/src/androidTest/AndroidManifest.xml b/libraries/rib-base/src/androidTest/AndroidManifest.xml index bf141c50d..213e71da5 100644 --- a/libraries/rib-base/src/androidTest/AndroidManifest.xml +++ b/libraries/rib-base/src/androidTest/AndroidManifest.xml @@ -1,8 +1,9 @@ + + android:allowBackup="true" + android:supportsRtl="true" + android:theme="@style/Theme.AppCompat"> diff --git a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/ActivityStarterTest.kt b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/ActivityStarterTest.kt index 15d7fe690..b58cb0341 100644 --- a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/ActivityStarterTest.kt +++ b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/ActivityStarterTest.kt @@ -14,14 +14,14 @@ import androidx.test.espresso.intent.rule.IntentsTestRule import com.badoo.ribs.android.activitystarter.ActivityResultHandler import com.badoo.ribs.android.activitystarter.ActivityStarter.ActivityResultEvent import com.badoo.ribs.android.requestcode.RequestCodeClient -import com.badoo.ribs.rx2.adapter.rx2 +import com.badoo.ribs.rx3.adapter.rx3 import com.badoo.ribs.test.util.OtherActivity import com.badoo.ribs.test.util.TestActivity import com.badoo.ribs.test.util.TestRequestCodeClient import com.badoo.ribs.test.util.restartActivitySync import com.badoo.ribs.test.util.subscribeOnTestObserver import com.badoo.ribs.test.util.waitForIdle -import io.reactivex.observers.TestObserver +import io.reactivex.rxjava3.observers.TestObserver import org.assertj.core.api.Assertions.assertThat import org.hamcrest.CoreMatchers.allOf import org.junit.Rule @@ -31,7 +31,7 @@ import org.junit.Test class ActivityStarterTest { @get:Rule - val activityRule = IntentsTestRule(TestActivity::class.java) + val activityRule = IntentsTestRule(TestActivity::class.java) @Test fun startActivity_startsTargetActivity() { @@ -49,17 +49,22 @@ class ActivityStarterTest { .putExtra("some_param", "some_value") } - intended(allOf( - hasComponent(ComponentName(getTargetContext(), OtherActivity::class.java)), - hasExtra("some_param", "some_value") - )) + intended( + allOf( + hasComponent(ComponentName(getTargetContext(), OtherActivity::class.java)), + hasExtra("some_param", "some_value") + ) + ) } @Test fun startActivityForResult_startsTargetActivity() { - activityRule.activity.activityStarter.events(identifiable).rx2().subscribeOnTestObserver() + activityRule.activity.activityStarter.events(identifiable).rx3().subscribeOnTestObserver() - activityRule.activity.activityStarter.startActivityForResult(identifiable, requestCode = 1) { + activityRule.activity.activityStarter.startActivityForResult( + identifiable, + requestCode = 1 + ) { Intent(this, OtherActivity::class.java) } @@ -69,9 +74,13 @@ class ActivityStarterTest { @Test fun startActivityForResult_startActivityThatReturnsOkResult_returnsOkResultCode() { givenResultForActivity(resultCode = RESULT_OK) - val observer = activityRule.activity.activityStarter.events(identifiable).rx2().subscribeOnTestObserver() + val observer = activityRule.activity.activityStarter.events(identifiable).rx3() + .subscribeOnTestObserver() - activityRule.activity.activityStarter.startActivityForResult(identifiable, requestCode = 1) { + activityRule.activity.activityStarter.startActivityForResult( + identifiable, + requestCode = 1 + ) { Intent(this, OtherActivity::class.java) } @@ -82,15 +91,19 @@ class ActivityStarterTest { @Test fun startActivityForResult_startActivityThatReturnsOkResultAndRestart_returnsOkResultCode() { - activityRule.activity.activityStarter.events(identifiable).rx2().subscribeOnTestObserver() + activityRule.activity.activityStarter.events(identifiable).rx3().subscribeOnTestObserver() activityRule.activity.ignoreActivityStarts = true - activityRule.activity.activityStarter.startActivityForResult(identifiable, requestCode = 1) { + activityRule.activity.activityStarter.startActivityForResult( + identifiable, + requestCode = 1 + ) { Intent(this, OtherActivity::class.java) } val requestCode = activityRule.activity.lastStartedRequestCode activityRule.restartActivitySync() - val observer = activityRule.activity.activityStarter.events(identifiable).rx2().subscribeOnTestObserver() + val observer = activityRule.activity.activityStarter.events(identifiable).rx3() + .subscribeOnTestObserver() (activityRule.activity.activityStarter as ActivityResultHandler).onActivityResult( requestCode, RESULT_OK, @@ -104,15 +117,18 @@ class ActivityStarterTest { @Test fun startActivityForResult_startActivitiesWithCollisionThatReturnsOkResultAndRestart_returnsOkResultCode() { - assertThat(collisionIdentifiable1.requestCodeClientId.hashCode()).isEqualTo(collisionIdentifiable2.requestCodeClientId.hashCode()) - activityRule.activity.activityStarter.events(identifiable).rx2().subscribeOnTestObserver() + assertThat(collisionIdentifiable1.requestCodeClientId.hashCode()).isEqualTo( + collisionIdentifiable2.requestCodeClientId.hashCode() + ) + activityRule.activity.activityStarter.events(identifiable).rx3().subscribeOnTestObserver() activityRule.activity.ignoreActivityStarts = true startOtherActivity(collisionIdentifiable1, requestCode = 1) startOtherActivity(collisionIdentifiable2, requestCode = 1) val requestCode = activityRule.activity.lastStartedRequestCode activityRule.restartActivitySync() - val observer = activityRule.activity.activityStarter.events(collisionIdentifiable2).rx2().subscribeOnTestObserver() + val observer = activityRule.activity.activityStarter.events(collisionIdentifiable2).rx3() + .subscribeOnTestObserver() (activityRule.activity.activityStarter as ActivityResultHandler).onActivityResult( requestCode, RESULT_OK, @@ -127,9 +143,13 @@ class ActivityStarterTest { @Test fun startActivityForResult_startActivityThatReturnsCancelledResult_returnsCancelledResultCode() { givenResultForActivity(resultCode = RESULT_CANCELED) - val observer = activityRule.activity.activityStarter.events(identifiable).rx2().subscribeOnTestObserver() + val observer = activityRule.activity.activityStarter.events(identifiable).rx3() + .subscribeOnTestObserver() - activityRule.activity.activityStarter.startActivityForResult(identifiable, requestCode = 1) { + activityRule.activity.activityStarter.startActivityForResult( + identifiable, + requestCode = 1 + ) { Intent(this, OtherActivity::class.java) } @@ -142,9 +162,13 @@ class ActivityStarterTest { fun startActivityForResult_startActivityThatReturnsIntentData_returnsIntentData() { val data = Intent().apply { putExtra("some_param", "some_value") } givenResultForActivity(resultCode = RESULT_OK, data = data) - val observer = activityRule.activity.activityStarter.events(identifiable).rx2().subscribeOnTestObserver() + val observer = activityRule.activity.activityStarter.events(identifiable).rx3() + .subscribeOnTestObserver() - activityRule.activity.activityStarter.startActivityForResult(identifiable, requestCode = 1) { + activityRule.activity.activityStarter.startActivityForResult( + identifiable, + requestCode = 1 + ) { Intent(this, OtherActivity::class.java) } @@ -157,10 +181,16 @@ class ActivityStarterTest { fun startActivityForResult_startActivityWhenWeHaveMultipleIdentifiers_returnsResultEventOnlyForOne() { val otherIdentifiable = TestRequestCodeClient("other") givenResultForActivity(resultCode = RESULT_OK) - val otherIdentifiableObserver = activityRule.activity.activityStarter.events(otherIdentifiable).rx2().subscribeOnTestObserver() - val observer = activityRule.activity.activityStarter.events(identifiable).rx2().subscribeOnTestObserver() - - activityRule.activity.activityStarter.startActivityForResult(otherIdentifiable, requestCode = 1) { + val otherIdentifiableObserver = + activityRule.activity.activityStarter.events(otherIdentifiable).rx3() + .subscribeOnTestObserver() + val observer = activityRule.activity.activityStarter.events(identifiable).rx3() + .subscribeOnTestObserver() + + activityRule.activity.activityStarter.startActivityForResult( + otherIdentifiable, + requestCode = 1 + ) { Intent(this, OtherActivity::class.java) } @@ -176,11 +206,19 @@ class ActivityStarterTest { } private inline fun givenResultForActivity(resultCode: Int, data: Intent? = null) { - intending(hasComponent(T::class.java.name)).respondWith(Instrumentation.ActivityResult(resultCode, data)) + intending(hasComponent(T::class.java.name)).respondWith( + Instrumentation.ActivityResult( + resultCode, + data + ) + ) } private fun startOtherActivity(client: RequestCodeClient, requestCode: Int) { - activityRule.activity.activityStarter.startActivityForResult(client, requestCode = requestCode) { + activityRule.activity.activityStarter.startActivityForResult( + client, + requestCode = requestCode + ) { Intent(this, OtherActivity::class.java) } } diff --git a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/dialogkeyboard/AlertDialogKeyboardTest.kt b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/dialogkeyboard/AlertDialogKeyboardTest.kt index a0d8e9e4c..eee8cf861 100644 --- a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/dialogkeyboard/AlertDialogKeyboardTest.kt +++ b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/dialogkeyboard/AlertDialogKeyboardTest.kt @@ -45,7 +45,8 @@ class AlertDialogKeyboardTest { .getInstrumentation() .targetContext .getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager - val hasKeyboard = inputManager != null && inputManager.isActive && inputManager.isAcceptingText + val hasKeyboard = + inputManager != null && inputManager.isActive && inputManager.isAcceptingText hasKeyboard } } diff --git a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/lifecycle/BaseNodesTest.kt b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/lifecycle/BaseNodesTest.kt index aff6cd58b..d860acc28 100644 --- a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/lifecycle/BaseNodesTest.kt +++ b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/lifecycle/BaseNodesTest.kt @@ -48,7 +48,7 @@ abstract class BaseNodesTest { var backStack: BackStack? = null ribsRule.start { activity, savedInstanceState -> - val buildParams = BuildParams( + val buildParams = BuildParams( payload = TestRootBuilder.Params(false), buildContext = BuildContext.root(savedInstanceState), identifier = Rib.Identifier( diff --git a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/lifecycle/PushTwoTest.kt b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/lifecycle/PushTwoTest.kt index 0138324fc..b47365616 100644 --- a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/lifecycle/PushTwoTest.kt +++ b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/lifecycle/PushTwoTest.kt @@ -13,7 +13,7 @@ import com.badoo.ribs.test.util.ribs.root.TestRootRouter.Configuration.Permanent import com.badoo.ribs.test.util.runOnMainSync import org.junit.Test -class PushTwoTest : BaseNodesTest() { +class PushTwoTest : BaseNodesTest() { private fun pushTwoConfigurations(setup: When, expectedState: ExpectedState) { test(setup, expectedState) { router, _ -> diff --git a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/lifecycle/transition/TransitionBaseNodeTest.kt b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/lifecycle/transition/TransitionBaseNodeTest.kt index 0d756c72c..1da39483f 100644 --- a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/lifecycle/transition/TransitionBaseNodeTest.kt +++ b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/android/lifecycle/transition/TransitionBaseNodeTest.kt @@ -5,7 +5,7 @@ import com.badoo.ribs.routing.transition.handler.Slider import com.badoo.ribs.routing.transition.handler.TransitionHandler import com.badoo.ribs.test.util.ribs.root.TestRootRouter -open class TransitionBaseNodeTest: BaseNodesTest() { +open class TransitionBaseNodeTest : BaseNodesTest() { override val transitionHandler: TransitionHandler? get() = Slider() diff --git a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/AndroidTestUtils.kt b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/AndroidTestUtils.kt index b324e88e5..e71cc1a80 100644 --- a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/AndroidTestUtils.kt +++ b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/AndroidTestUtils.kt @@ -5,9 +5,9 @@ import androidx.test.platform.app.InstrumentationRegistry import androidx.test.rule.ActivityTestRule import androidx.test.runner.lifecycle.ActivityLifecycleMonitorRegistry import androidx.test.runner.lifecycle.Stage -import java.util.concurrent.TimeoutException import java.util.concurrent.CountDownLatch import java.util.concurrent.TimeUnit +import java.util.concurrent.TimeoutException private const val DEFAULT_CONDITION_TIMEOUT_MILLISECONDS = 15000L private const val DEFAULT_CHECK_CONDITION_FREQUENCY_MILLIS = 10L @@ -41,9 +41,13 @@ fun ActivityTestRule.restartActivitySync() { fun waitForIdle(block: () -> Unit) = InstrumentationRegistry.getInstrumentation().waitForIdle(block) -fun runOnMainSync(block: () -> Unit) = InstrumentationRegistry.getInstrumentation().runOnMainSync(block) +fun runOnMainSync(block: () -> Unit) = + InstrumentationRegistry.getInstrumentation().runOnMainSync(block) -fun waitFor(timeoutMillis: Long = DEFAULT_CONDITION_TIMEOUT_MILLISECONDS, condition: () -> Boolean) { +fun waitFor( + timeoutMillis: Long = DEFAULT_CONDITION_TIMEOUT_MILLISECONDS, + condition: () -> Boolean +) { val start = System.currentTimeMillis() while (!condition()) { if (System.currentTimeMillis() > start + timeoutMillis) { diff --git a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/FirstActivity.kt b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/FirstActivity.kt deleted file mode 100644 index 89489fcc8..000000000 --- a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/FirstActivity.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.badoo.ribs.test.util - -import androidx.appcompat.app.AppCompatActivity - diff --git a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/NoOpDialogLauncher.kt b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/NoOpDialogLauncher.kt index 1aa8956b0..9439dd9cd 100644 --- a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/NoOpDialogLauncher.kt +++ b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/NoOpDialogLauncher.kt @@ -4,7 +4,7 @@ import com.badoo.ribs.android.dialog.Dialog import com.badoo.ribs.android.dialog.DialogLauncher class NoOpDialogLauncher : DialogLauncher { - + override fun show(dialog: Dialog<*>, onClose: () -> Unit) { } diff --git a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/RxTestUtils.kt b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/RxTestUtils.kt index 5adcdd165..392cc7290 100644 --- a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/RxTestUtils.kt +++ b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/RxTestUtils.kt @@ -1,14 +1,14 @@ package com.badoo.ribs.test.util import androidx.lifecycle.Lifecycle -import io.reactivex.Observable -import io.reactivex.observers.TestObserver +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.observers.TestObserver -fun Observable.subscribeOnTestObserver() = TestObserver().apply { +fun Observable.subscribeOnTestObserver() = TestObserver().apply { subscribe(this) } -class LifecycleObserver: TestObserver() { +class LifecycleObserver : TestObserver() { fun clear() { values.clear() } diff --git a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/TestActivity.kt b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/TestActivity.kt index 66a1b0fea..948c17d90 100644 --- a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/TestActivity.kt +++ b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/TestActivity.kt @@ -57,7 +57,11 @@ class TestActivity : AppCompatActivity() { activityBoundary.onActivityResult(requestCode, resultCode, data) } - override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) = + override fun onRequestPermissionsResult( + requestCode: Int, + permissions: Array, + grantResults: IntArray + ) = permissionRequestBoundary.onRequestPermissionsResult(requestCode, permissions, grantResults) } diff --git a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/TestRibDialog.kt b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/TestRibDialog.kt index 44c585235..1b0b336f4 100644 --- a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/TestRibDialog.kt +++ b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/TestRibDialog.kt @@ -1,8 +1,7 @@ package com.badoo.ribs.test.util.ribs -import com.badoo.ribs.android.dialog.RibFactory import com.badoo.ribs.android.dialog.Dialog - +import com.badoo.ribs.android.dialog.RibFactory class TestRibDialog( ribFactory: RibFactory diff --git a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/child/TestChildRouter.kt b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/child/TestChildRouter.kt index 4b59d416c..8891cb177 100644 --- a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/child/TestChildRouter.kt +++ b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/child/TestChildRouter.kt @@ -1,22 +1,23 @@ package com.badoo.ribs.test.util.ribs.child import android.os.Parcelable -import com.badoo.ribs.routing.router.Router import com.badoo.ribs.core.modality.BuildParams -import com.badoo.ribs.routing.resolution.Resolution import com.badoo.ribs.routing.Routing +import com.badoo.ribs.routing.resolution.Resolution +import com.badoo.ribs.routing.router.Router import com.badoo.ribs.routing.source.impl.Empty import com.badoo.ribs.test.util.ribs.child.TestChildRouter.Configuration import kotlinx.parcelize.Parcelize class TestChildRouter( buildParams: BuildParams -): Router( +) : Router( buildParams = buildParams, routingSource = Empty() ) { sealed class Configuration : Parcelable { - @Parcelize object Default : Configuration() + @Parcelize + data object Default : Configuration() } override fun resolve(routing: Routing): Resolution = diff --git a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/root/TestRoot.kt b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/root/TestRoot.kt index 2416571b0..0ec526b18 100644 --- a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/root/TestRoot.kt +++ b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/root/TestRoot.kt @@ -16,7 +16,7 @@ import com.badoo.ribs.test.util.ribs.child.TestChildView import com.badoo.ribs.test.util.ribs.child.builder.TestChildBuilder import com.badoo.ribs.test.util.ribs.root.TestRootRouter.Configuration import com.badoo.ribs.test.util.ribs.root.builder.TestRootBuilder -import io.reactivex.observers.TestObserver +import io.reactivex.rxjava3.observers.TestObserver interface TestRoot : Rib { diff --git a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/root/TestRootInteractor.kt b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/root/TestRootInteractor.kt index 20fa919a2..70ad65072 100644 --- a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/root/TestRootInteractor.kt +++ b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/root/TestRootInteractor.kt @@ -6,7 +6,7 @@ import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.OnLifecycleEvent import com.badoo.ribs.clienthelper.interactor.Interactor import com.badoo.ribs.core.modality.BuildParams -import io.reactivex.observers.TestObserver +import io.reactivex.rxjava3.observers.TestObserver class TestRootInteractor( buildParams: BuildParams<*>, diff --git a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/root/TestRootRouter.kt b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/root/TestRootRouter.kt index 86514a8d7..115f94382 100644 --- a/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/root/TestRootRouter.kt +++ b/libraries/rib-base/src/androidTest/java/com/badoo/ribs/test/util/ribs/root/TestRootRouter.kt @@ -16,7 +16,9 @@ import com.badoo.ribs.routing.source.RoutingSource.Companion.permanent import com.badoo.ribs.routing.transition.handler.TransitionHandler import com.badoo.ribs.test.util.ribs.TestRibDialog import com.badoo.ribs.test.util.ribs.root.TestRootRouter.Configuration -import com.badoo.ribs.test.util.ribs.root.TestRootRouter.Configuration.* +import com.badoo.ribs.test.util.ribs.root.TestRootRouter.Configuration.Content +import com.badoo.ribs.test.util.ribs.root.TestRootRouter.Configuration.Overlay +import com.badoo.ribs.test.util.ribs.root.TestRootRouter.Configuration.Permanent import kotlinx.parcelize.Parcelize class TestRootRouter( @@ -39,38 +41,38 @@ class TestRootRouter( sealed class Configuration : Parcelable { sealed class Permanent : Configuration() { @Parcelize - object Permanent1 : Permanent() + data object Permanent1 : Permanent() @Parcelize - object Permanent2 : Permanent() + data object Permanent2 : Permanent() } sealed class Content : Configuration() { @Parcelize - object NoOp : Content() + data object NoOp : Content() @Parcelize - object AttachNode1 : Content() + data object AttachNode1 : Content() @Parcelize - object AttachNode2 : Content() + data object AttachNode2 : Content() @Parcelize - object AttachNode3 : Content() + data object AttachNode3 : Content() @Parcelize - object AttachNode1And2 : Content() + data object AttachNode1And2 : Content() } sealed class Overlay : Configuration() { @Parcelize - object AttachNode1AsOverlay : Overlay() + data object AttachNode1AsOverlay : Overlay() @Parcelize - object AttachNode2AsOverlay : Overlay() + data object AttachNode2AsOverlay : Overlay() @Parcelize - object AttachNode3AsOverlay : Overlay() + data object AttachNode3AsOverlay : Overlay() } } @@ -86,8 +88,26 @@ class TestRootRouter( child(builder1), child(builder2) ) - Overlay.AttachNode1AsOverlay -> showDialog(routingSource, routing.identifier, dialogLauncher, TestRibDialog(builder1)) - Overlay.AttachNode2AsOverlay -> showDialog(routingSource, routing.identifier, dialogLauncher, TestRibDialog(builder2)) - Overlay.AttachNode3AsOverlay -> showDialog(routingSource, routing.identifier, dialogLauncher, TestRibDialog(builder3)) + + Overlay.AttachNode1AsOverlay -> showDialog( + routingSource, + routing.identifier, + dialogLauncher, + TestRibDialog(builder1) + ) + + Overlay.AttachNode2AsOverlay -> showDialog( + routingSource, + routing.identifier, + dialogLauncher, + TestRibDialog(builder2) + ) + + Overlay.AttachNode3AsOverlay -> showDialog( + routingSource, + routing.identifier, + dialogLauncher, + TestRibDialog(builder3) + ) } } diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/android/activitystarter/ActivityStarter.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/android/activitystarter/ActivityStarter.kt index 8e8be62e7..5f229b5c0 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/android/activitystarter/ActivityStarter.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/android/activitystarter/ActivityStarter.kt @@ -18,7 +18,11 @@ interface ActivityStarter : RequestCodeBasedEventStream { fun startActivity(createIntent: Context.() -> Intent) - fun startActivityForResult(client: RequestCodeClient, requestCode: Int, createIntent: Context.() -> Intent) + fun startActivityForResult( + client: RequestCodeClient, + requestCode: Int, + createIntent: Context.() -> Intent + ) data class ActivityResultEvent( override val requestCode: Int, diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/android/dialog/Dialog.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/android/dialog/Dialog.kt index 17b234331..5a8cc03b2 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/android/dialog/Dialog.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/android/dialog/Dialog.kt @@ -16,6 +16,7 @@ abstract class Dialog private constructor( var title: Text? = null var message: Text? = null var cancellationPolicy: CancellationPolicy = NonCancellable() + @StyleRes var themeResId: Int? = null var buttons: ButtonsConfig? = null @@ -95,10 +96,10 @@ abstract class Dialog private constructor( } ?: emptyList() sealed class Event { - object Positive : Event() - object Negative : Event() - object Neutral : Event() - object Cancelled : Event() + data object Positive : Event() + data object Negative : Event() + data object Neutral : Event() + data object Cancelled : Event() } sealed class CancellationPolicy { diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/android/dialog/DialogExtensions.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/android/dialog/DialogExtensions.kt index 72a5a23f6..2fb927ed7 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/android/dialog/DialogExtensions.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/android/dialog/DialogExtensions.kt @@ -11,29 +11,33 @@ import com.badoo.ribs.android.dialog.Dialog.CancellationPolicy.NonCancellable fun Dialog.toAlertDialog(context: Context, onClose: () -> Unit): AlertDialog { val builder = themeResId?.let { AlertDialog.Builder(context, it) } - ?: AlertDialog.Builder(context) + ?: AlertDialog.Builder(context) return builder - .apply { - setCancelable(this@toAlertDialog, onClose) - setRib(this@toAlertDialog, context) - setTexts(this@toAlertDialog) - setButtons(this@toAlertDialog) - } - .create() - .apply { - markTitleAsHeading() - setCanceledOnTouchOutside(this@toAlertDialog) - setButtonClickListeners(this@toAlertDialog, onClose) - setOnDismissListener { this@toAlertDialog.rib = null } - } + .apply { + setCancelable(this@toAlertDialog, onClose) + setRib(this@toAlertDialog, context) + setTexts(this@toAlertDialog) + setButtons(this@toAlertDialog) + } + .create() + .apply { + markTitleAsHeading() + setCanceledOnTouchOutside(this@toAlertDialog) + setButtonClickListeners(this@toAlertDialog, onClose) + setOnDismissListener { this@toAlertDialog.rib = null } + } } -private fun AlertDialog.Builder.setCancelable(dialog: Dialog, onClose: () -> Unit) { +private fun AlertDialog.Builder.setCancelable( + dialog: Dialog, + onClose: () -> Unit +) { when (val policy = dialog.cancellationPolicy) { is NonCancellable -> { setCancelable(false) } + is Cancellable -> { setCancelable(true) setOnCancelListener { @@ -97,14 +101,32 @@ private fun AlertDialog.Builder.setButtons(dialog: Dialog<*>) { } } -private fun AlertDialog.setButtonClickListeners(dialog: Dialog, onClose: () -> Unit) { +private fun AlertDialog.setButtonClickListeners( + dialog: Dialog, + onClose: () -> Unit +) { // Workaround so that pressing button will not close dialog automatically. Let business // logic decide what to do instead. setOnShowListener { (it as? AlertDialog)?.apply { - configureButtonClick(AlertDialog.BUTTON_POSITIVE, dialog, dialog.buttons?.positive, onClose) - configureButtonClick(AlertDialog.BUTTON_NEGATIVE, dialog, dialog.buttons?.negative, onClose) - configureButtonClick(AlertDialog.BUTTON_NEUTRAL, dialog, dialog.buttons?.neutral, onClose) + configureButtonClick( + AlertDialog.BUTTON_POSITIVE, + dialog, + dialog.buttons?.positive, + onClose + ) + configureButtonClick( + AlertDialog.BUTTON_NEGATIVE, + dialog, + dialog.buttons?.negative, + onClose + ) + configureButtonClick( + AlertDialog.BUTTON_NEUTRAL, + dialog, + dialog.buttons?.neutral, + onClose + ) } } } diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/android/dialog/routing/resolution/DialogResolution.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/android/dialog/routing/resolution/DialogResolution.kt index 690164e25..f1421ae16 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/android/dialog/routing/resolution/DialogResolution.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/android/dialog/routing/resolution/DialogResolution.kt @@ -18,7 +18,7 @@ class DialogResolution( override val numberOfNodes: Int = 1 - override fun buildNodes(buildContexts: List) : List = + override fun buildNodes(buildContexts: List): List = dialog.buildNodes(buildContexts.first()) override fun execute() { diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/android/integrationpoint/IntegrationPoint.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/android/integrationpoint/IntegrationPoint.kt index 3c4f21427..60ceb756d 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/android/integrationpoint/IntegrationPoint.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/android/integrationpoint/IntegrationPoint.kt @@ -3,7 +3,6 @@ package com.badoo.ribs.android.integrationpoint import android.os.Bundle import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LiveData -import androidx.lifecycle.Observer import com.badoo.ribs.android.activitystarter.ActivityStarter import com.badoo.ribs.android.dialog.DialogLauncher import com.badoo.ribs.android.permissionrequester.PermissionRequester @@ -54,12 +53,12 @@ abstract class IntegrationPoint( onStop = ::onStop, onDestroy = ::onDestroy ) - viewLifecycleOwner.observe(lifecycleOwner, Observer { viewLifecycle -> + viewLifecycleOwner.observe(lifecycleOwner) { viewLifecycle -> viewLifecycle.lifecycle.subscribe( onCreate = ::onViewCreate, onDestroy = ::onViewDestroy ) - }) + } } private fun onCreate() { diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/android/permissionrequester/PermissionRequester.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/android/permissionrequester/PermissionRequester.kt index 85689e71a..170dd7d32 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/android/permissionrequester/PermissionRequester.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/android/permissionrequester/PermissionRequester.kt @@ -8,7 +8,10 @@ import com.badoo.ribs.android.requestcode.RequestCodeClient interface PermissionRequester : RequestCodeBasedEventStream { - fun checkPermissions(client: RequestCodeClient, permissions: Array) : CheckPermissionsResult + fun checkPermissions( + client: RequestCodeClient, + permissions: Array + ): CheckPermissionsResult fun requestPermissions(client: RequestCodeClient, requestCode: Int, permissions: Array) diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/android/permissionrequester/PermissionRequesterHost.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/android/permissionrequester/PermissionRequesterHost.kt index 834c2716e..4fa8a353e 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/android/permissionrequester/PermissionRequesterHost.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/android/permissionrequester/PermissionRequesterHost.kt @@ -17,7 +17,10 @@ interface PermissionRequesterHost { class ActivityHost(private val activity: Activity) : PermissionRequesterHost { override fun isGranted(permission: String): Boolean = - ContextCompat.checkSelfPermission(activity, permission) == PackageManager.PERMISSION_GRANTED + ContextCompat.checkSelfPermission( + activity, + permission + ) == PackageManager.PERMISSION_GRANTED override fun shouldShowRationale(permission: String): Boolean = ActivityCompat.shouldShowRequestPermissionRationale(activity, permission) @@ -31,7 +34,10 @@ interface PermissionRequesterHost { class FragmentHost(private val fragment: Fragment) : PermissionRequesterHost { override fun isGranted(permission: String): Boolean = - ContextCompat.checkSelfPermission(fragment.requireContext(), permission) == PackageManager.PERMISSION_GRANTED + ContextCompat.checkSelfPermission( + fragment.requireContext(), + permission + ) == PackageManager.PERMISSION_GRANTED override fun shouldShowRationale(permission: String): Boolean = fragment.shouldShowRequestPermissionRationale(permission) diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/android/requestcode/RequestCodeBasedEventStreamImpl.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/android/requestcode/RequestCodeBasedEventStreamImpl.kt index 518af7019..5053aaebe 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/android/requestcode/RequestCodeBasedEventStreamImpl.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/android/requestcode/RequestCodeBasedEventStreamImpl.kt @@ -35,7 +35,12 @@ abstract class RequestCodeBasedEventStreamImpl( val internalRequestCode = externalRequestCode.toInternalRequestCode() ensureSubject(id) { - RIBs.errorHandler.handleNoRequestCodeListenersError(externalRequestCode, internalRequestCode, id, event) + RIBs.errorHandler.handleNoRequestCodeListenersError( + externalRequestCode, + internalRequestCode, + id, + event + ) } events.getValue(id).emit(event) diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/android/requestcode/RequestCodeDoesntFitInMask.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/android/requestcode/RequestCodeDoesntFitInMask.kt index 35056e736..fa6d706fc 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/android/requestcode/RequestCodeDoesntFitInMask.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/android/requestcode/RequestCodeDoesntFitInMask.kt @@ -1,5 +1,3 @@ package com.badoo.ribs.android.requestcode -import java.lang.RuntimeException - class RequestCodeDoesntFitInMask(override val message: String?) : RuntimeException(message) diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/android/requestcode/RequestCodeRegistry.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/android/requestcode/RequestCodeRegistry.kt index 3962bf0b2..b8e2eb1bf 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/android/requestcode/RequestCodeRegistry.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/android/requestcode/RequestCodeRegistry.kt @@ -1,7 +1,6 @@ package com.badoo.ribs.android.requestcode import android.os.Bundle -import java.util.* import kotlin.math.pow /** @@ -16,12 +15,13 @@ import kotlin.math.pow * components. Instead, use sensible numbers starting from 1, only unique locally to your component, * and let this class do the rest to ensure global uniqueness. */ -class RequestCodeRegistry constructor( +class RequestCodeRegistry( initialState: Bundle?, private val nbLowerBitsForIds: Int = 4 ) { internal val requestCodes: HashMap = - (initialState?.getSerializable(KEY_REQUEST_CODE_REGISTRY) as? HashMap) ?: hashMapOf() + (initialState?.getSerializable(KEY_REQUEST_CODE_REGISTRY) as? HashMap) + ?: hashMapOf() private val lowerBitsShift: Int = nbLowerBitsForIds - 0 private val maskLowerBits = (1 shl lowerBitsShift) - 1 @@ -58,7 +58,11 @@ class RequestCodeRegistry constructor( private fun ensureCodeIsCorrect(code: Int) { if (code < 1 || code != code and maskLowerBits) { throw RequestCodeDoesntFitInMask( - "Requestcode '$code' does not fit requirements. Allowed min: 1, max: ${2.0.pow(nbLowerBitsForIds).toInt() - 1}" + "Requestcode '$code' does not fit requirements. Allowed min: 1, max: ${ + 2.0.pow( + nbLowerBitsForIds + ).toInt() - 1 + }" ) } } diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/android/text/Text.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/android/text/Text.kt index a93b3ae2e..e0c85076f 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/android/text/Text.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/android/text/Text.kt @@ -11,7 +11,7 @@ interface Text { fun resolve(context: Context): CharSequence - class Plain(private val string: String): Text { + class Plain(private val string: String) : Text { override fun resolve(context: Context): CharSequence = string } diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/core/Node.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/core/Node.kt index d376112ba..42c5109b7 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/core/Node.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/core/Node.kt @@ -101,7 +101,9 @@ open class Node @VisibleForTesting internal constructor( } val plugins: List = - buildContext.defaultPlugins(this) + RIBs.globalPlugins + plugins + if (this is Plugin) listOf(this) else emptyList() + buildContext.defaultPlugins(this) + RIBs.globalPlugins + plugins + if (this is Plugin) listOf( + this + ) else emptyList() internal open val activationMode: ActivationMode = buildContext.activationMode @@ -414,7 +416,7 @@ open class Node @VisibleForTesting internal constructor( override val lifecycle: Lifecycle get() = lifecycleManager.lifecycle - fun getView() : V? = view + fun getView(): V? = view fun

plugins(pClass: Class

): List

= plugins.filterIsInstance(pClass) diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/core/modality/BuildContext.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/core/modality/BuildContext.kt index e5ce2607c..eee7539b4 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/core/modality/BuildContext.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/core/modality/BuildContext.kt @@ -1,5 +1,3 @@ - - package com.badoo.ribs.core.modality import android.os.Bundle diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/core/modality/BuildParams.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/core/modality/BuildParams.kt index 01e763bcc..fe62e96dd 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/core/modality/BuildParams.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/core/modality/BuildParams.kt @@ -6,7 +6,6 @@ import com.badoo.ribs.core.Rib.Identifier.Companion.KEY_UUID import com.badoo.ribs.core.customisation.RibCustomisation import java.util.UUID - /** * Represents information passed to components. * @@ -25,7 +24,7 @@ class BuildParams( val savedInstanceState: Bundle? get() = buildContext.savedInstanceState - fun getOrDefault(defaultCustomisation: T) : T = + fun getOrDefault(defaultCustomisation: T): T = buildContext.customisations.getRecursivelyOrDefault(defaultCustomisation) } diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/core/plugin/NodeAwareImpl.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/core/plugin/NodeAwareImpl.kt index 38eacebe9..a1e0b0355 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/core/plugin/NodeAwareImpl.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/core/plugin/NodeAwareImpl.kt @@ -2,7 +2,7 @@ package com.badoo.ribs.core.plugin import com.badoo.ribs.core.Node -class NodeAwareImpl: NodeAware { +class NodeAwareImpl : NodeAware { override lateinit var node: Node<*> private set diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/core/plugin/RibAwareImpl.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/core/plugin/RibAwareImpl.kt index 4dd859fe6..63a97fb1f 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/core/plugin/RibAwareImpl.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/core/plugin/RibAwareImpl.kt @@ -2,7 +2,7 @@ package com.badoo.ribs.core.plugin import com.badoo.ribs.core.Rib -class RibAwareImpl: RibAware { +class RibAwareImpl : RibAware { override lateinit var rib: T private set diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/minimal/reactive/Cancellable.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/minimal/reactive/Cancellable.kt index c975dd0ba..0db1a7637 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/minimal/reactive/Cancellable.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/minimal/reactive/Cancellable.kt @@ -13,6 +13,6 @@ interface Cancellable { } object Empty : Cancellable { - override fun cancel() { } + override fun cancel() {} } } diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/minimal/reactive/Operators.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/minimal/reactive/Operators.kt index 0fced276c..9aa88db4f 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/minimal/reactive/Operators.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/minimal/reactive/Operators.kt @@ -9,10 +9,17 @@ fun just(producer: () -> T): Source = } @Suppress("UNCHECKED_CAST") -fun combineLatest(source1: Source, source2: Source, combination: (A, B) -> C): Source = +fun combineLatest( + source1: Source, + source2: Source, + combination: (A, B) -> C +): Source = combineLatest(listOf(source1, source2)) { array -> combination(array[0] as A, array[1] as B) } -fun combineLatest(sources: Collection>, combination: (Array) -> C): Source = +fun combineLatest( + sources: Collection>, + combination: (Array) -> C +): Source = object : Source { /** * The internal state (first / second values) should be recreated for each new call to observer diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/Routing.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/Routing.kt index d03c23fd8..6fbeeaebe 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/Routing.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/Routing.kt @@ -4,7 +4,6 @@ import android.os.Parcelable import kotlinx.parcelize.Parcelize import java.io.Serializable - @Parcelize data class Routing( val configuration: C, diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/history/RoutingHistoryDiffer.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/history/RoutingHistoryDiffer.kt index be64780c7..8ab4cee4d 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/history/RoutingHistoryDiffer.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/history/RoutingHistoryDiffer.kt @@ -11,7 +11,6 @@ import com.badoo.ribs.routing.state.changeset.RoutingCommand.Add import com.badoo.ribs.routing.state.changeset.RoutingCommand.Deactivate import com.badoo.ribs.routing.state.changeset.RoutingCommand.Remove - internal object RoutingHistoryDiffer { /** @@ -29,19 +28,19 @@ internal object RoutingHistoryDiffer { val previousIds = previous.map { it.routing.identifier } val currentIds = current.map { it.routing.identifier } - previousIds.minus(currentIds).reversed().forEach { identifier -> + previousIds.minus(currentIds.toSet()).reversed().forEach { identifier -> val toRemove = previous.find(identifier)!! commands += if (toRemove.activation == ACTIVE) toRemove.deactivate() else emptySet() commands += toRemove.remove() } - currentIds.minus(previousIds).forEach { identifier -> + currentIds.minus(previousIds.toSet()).forEach { identifier -> val toAdd = current.find(identifier)!! commands += toAdd.add() commands += if (toAdd.activation == ACTIVE) toAdd.activate() else emptySet() } - currentIds.intersect(previousIds).forEach { identifier -> + currentIds.intersect(previousIds.toSet()).forEach { identifier -> val t0 = previous.find { it.routing.identifier == identifier }!! val t1 = current.find { it.routing.identifier == identifier }!! commands += diff(t0, t1) @@ -82,7 +81,10 @@ internal object RoutingHistoryDiffer { return commands } - private fun diff(t0: RoutingHistoryElement, t1: RoutingHistoryElement): Set> { + private fun diff( + t0: RoutingHistoryElement, + t1: RoutingHistoryElement + ): Set> { val commands = mutableSetOf>() commands += diffActivationChange(t0, t1) @@ -92,7 +94,10 @@ internal object RoutingHistoryDiffer { return commands } - private fun diffActivationChange(t0: RoutingHistoryElement, t1: RoutingHistoryElement): Set> { + private fun diffActivationChange( + t0: RoutingHistoryElement, + t1: RoutingHistoryElement + ): Set> { val commands = mutableSetOf>() if (t1.activation != t0.activation) { @@ -106,7 +111,10 @@ internal object RoutingHistoryDiffer { return commands } - private fun diffMetaChange(t0: RoutingHistoryElement, t1: RoutingHistoryElement): Set> { + private fun diffMetaChange( + t0: RoutingHistoryElement, + t1: RoutingHistoryElement + ): Set> { val commands = mutableSetOf>() if (t1.routing.meta != t0.routing.meta) { @@ -116,16 +124,19 @@ internal object RoutingHistoryDiffer { return commands } - private fun diffOverlayChange(t0: RoutingHistoryElement, t1: RoutingHistoryElement): Set> { + private fun diffOverlayChange( + t0: RoutingHistoryElement, + t1: RoutingHistoryElement + ): Set> { val commands = mutableSetOf>() if (t1.overlays != t0.overlays) { - t0.overlays.minus(t1.overlays).forEach { overlay -> + t0.overlays.minus(t1.overlays.toSet()).forEach { overlay -> if (t0.activation == ACTIVE) commands += Deactivate(overlay) commands += Remove(overlay) } - t1.overlays.minus(t0.overlays).forEach { overlay -> + t1.overlays.minus(t0.overlays.toSet()).forEach { overlay -> commands += Add(overlay) if (t0.activation == ACTIVE) commands += Activate(overlay) } diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/resolver/RoutingResolver.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/resolver/RoutingResolver.kt index 373df522c..9db88fa36 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/resolver/RoutingResolver.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/resolver/RoutingResolver.kt @@ -1,8 +1,8 @@ package com.badoo.ribs.routing.resolver import android.os.Parcelable -import com.badoo.ribs.routing.resolution.Resolution import com.badoo.ribs.routing.Routing +import com.badoo.ribs.routing.resolution.Resolution interface RoutingResolver { diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/router/Router.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/router/Router.kt index 0dff24ecb..a2d35bc39 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/router/Router.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/router/Router.kt @@ -14,8 +14,8 @@ import com.badoo.ribs.core.plugin.ViewLifecycleAware import com.badoo.ribs.minimal.reactive.CompositeCancellable import com.badoo.ribs.minimal.reactive.Relay import com.badoo.ribs.minimal.reactive.Source -import com.badoo.ribs.minimal.state.TimeCapsule import com.badoo.ribs.minimal.reactive.map +import com.badoo.ribs.minimal.state.TimeCapsule import com.badoo.ribs.routing.activator.ChildActivator import com.badoo.ribs.routing.activator.RoutingActivator import com.badoo.ribs.routing.activator.UnhandledChildActivator @@ -55,10 +55,10 @@ abstract class Router( private val transitionStatesRelay: Relay = Relay() val transitionStates: Source = transitionStatesRelay - + private val cancellable = CompositeCancellable() private val timeCapsule: TimeCapsule = TimeCapsule(buildParams.savedInstanceState) - private val hasSavedState: Boolean = buildParams.savedInstanceState != null + private val hasSavedState: Boolean = buildParams.savedInstanceState != null private lateinit var routingStatePool: RoutingStatePool override lateinit var node: Node<*> diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/router/RouterByDelegate.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/router/RouterByDelegate.kt index 73c289ba2..cf80ad7e7 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/router/RouterByDelegate.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/router/RouterByDelegate.kt @@ -12,7 +12,7 @@ class RouterByDelegate( routingSource: RoutingSource, private val resolver: RoutingResolver, clientChildActivator: ChildActivator = UnhandledChildActivator() -): Router( +) : Router( buildParams = buildParams, routingSource = routingSource, clientChildActivator = clientChildActivator diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/RoutingSourceDiffer.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/RoutingSourceDiffer.kt index 54edca66f..54bfb7e26 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/RoutingSourceDiffer.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/RoutingSourceDiffer.kt @@ -58,7 +58,8 @@ internal fun RoutingHistory.ensureUniqueIds() { forEach { element -> if (ids.contains(element.routing.identifier)) { val errorMessage = "Non-unique content id found: ${element.routing.identifier}" - RIBs.errorHandler.handleNonFatalError(errorMessage, + RIBs.errorHandler.handleNonFatalError( + errorMessage, NonUniqueRoutingIdentifierException( errorMessage ) @@ -69,7 +70,8 @@ internal fun RoutingHistory.ensureUniqueIds() { element.overlays.forEach { overlay -> if (ids.contains(overlay.identifier)) { val errorMessage = "Non-unique overlay id found: ${overlay.identifier}" - RIBs.errorHandler.handleNonFatalError(errorMessage, + RIBs.errorHandler.handleNonFatalError( + errorMessage, NonUniqueRoutingIdentifierException( errorMessage ) diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/Ext.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/Ext.kt index 19ee48ecc..1ebf698f9 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/Ext.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/Ext.kt @@ -3,10 +3,17 @@ package com.badoo.ribs.routing.source.backstack import android.os.Parcelable import com.badoo.ribs.routing.Routing - -internal fun BackStack.State.contentIdForPosition(position: Int, content: C): Routing.Identifier = +internal fun BackStack.State.contentIdForPosition( + position: Int, + content: C +): Routing.Identifier = Routing.Identifier("Back stack $id #$position = $content") @SuppressWarnings("LongParameterList") -internal fun BackStack.State.overlayIdForPosition(position: Int, content: C, overlayIndex: Int, overlay: C): Routing.Identifier = +internal fun BackStack.State.overlayIdForPosition( + position: Int, + content: C, + overlayIndex: Int, + overlay: C +): Routing.Identifier = Routing.Identifier("Back stack $id overlay #$position.$overlayIndex = $content.$overlay") diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/NewRoot.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/NewRoot.kt index 404d59ce7..b46cba95a 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/NewRoot.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/NewRoot.kt @@ -1,9 +1,9 @@ package com.badoo.ribs.routing.source.backstack.operation import android.os.Parcelable -import com.badoo.ribs.routing.source.backstack.BackStack import com.badoo.ribs.routing.Routing import com.badoo.ribs.routing.history.RoutingHistoryElement +import com.badoo.ribs.routing.source.backstack.BackStack import com.badoo.ribs.routing.source.backstack.Elements data class NewRoot( diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/Pop.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/Pop.kt index 97de7b16e..4096bdc4e 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/Pop.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/Pop.kt @@ -1,8 +1,8 @@ package com.badoo.ribs.routing.source.backstack.operation import android.os.Parcelable -import com.badoo.ribs.routing.source.backstack.BackStack import com.badoo.ribs.routing.history.RoutingHistoryElement +import com.badoo.ribs.routing.source.backstack.BackStack import com.badoo.ribs.routing.source.backstack.Elements /** @@ -21,6 +21,7 @@ class Pop : BackStack.Operation { overlays = elements.last().overlays.dropLast(1) ) ) + elements.canPopContent -> elements.dropLast(1) else -> elements } diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/Push.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/Push.kt index fa5d37299..cf579ed91 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/Push.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/Push.kt @@ -1,9 +1,9 @@ package com.badoo.ribs.routing.source.backstack.operation import android.os.Parcelable -import com.badoo.ribs.routing.source.backstack.BackStack import com.badoo.ribs.routing.Routing import com.badoo.ribs.routing.history.RoutingHistoryElement +import com.badoo.ribs.routing.source.backstack.BackStack import com.badoo.ribs.routing.source.backstack.Elements /** diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/PushOverlay.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/PushOverlay.kt index d4cba5757..42bfb33c2 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/PushOverlay.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/PushOverlay.kt @@ -1,9 +1,9 @@ package com.badoo.ribs.routing.source.backstack.operation import android.os.Parcelable -import com.badoo.ribs.routing.source.backstack.BackStack import com.badoo.ribs.routing.Routing import com.badoo.ribs.routing.history.RoutingHistoryElement +import com.badoo.ribs.routing.source.backstack.BackStack import com.badoo.ribs.routing.source.backstack.Elements /** diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/Remove.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/Remove.kt index 9a1772e32..681852294 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/Remove.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/Remove.kt @@ -2,8 +2,8 @@ package com.badoo.ribs.routing.source.backstack.operation import android.os.Parcelable import com.badoo.ribs.routing.Routing -import com.badoo.ribs.routing.source.backstack.BackStack import com.badoo.ribs.routing.history.RoutingHistoryElement +import com.badoo.ribs.routing.source.backstack.BackStack import com.badoo.ribs.routing.source.backstack.Elements /** @@ -17,7 +17,7 @@ class Remove( override fun isApplicable(elements: Elements): Boolean = elements.hasContentWithIdentifier() || - elements.hasOverlayWithIdentifier() + elements.hasOverlayWithIdentifier() private fun Elements.hasContentWithIdentifier() = find { it.routing.identifier == identifier } != null diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/Replace.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/Replace.kt index 85e993bf4..395d55395 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/Replace.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/backstack/operation/Replace.kt @@ -1,9 +1,9 @@ package com.badoo.ribs.routing.source.backstack.operation import android.os.Parcelable -import com.badoo.ribs.routing.source.backstack.BackStack import com.badoo.ribs.routing.Routing import com.badoo.ribs.routing.history.RoutingHistoryElement +import com.badoo.ribs.routing.source.backstack.BackStack import com.badoo.ribs.routing.source.backstack.Elements /** diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/impl/Combined.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/impl/Combined.kt index 62c45f0e6..559291532 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/impl/Combined.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/impl/Combined.kt @@ -18,7 +18,7 @@ internal data class Combined( data class CombinedHistory( val first: RoutingHistory, val second: RoutingHistory - ): RoutingHistory { + ) : RoutingHistory { override fun iterator(): Iterator> = ConcatIterator(first.iterator()) + second.iterator() diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/impl/Pool.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/impl/Pool.kt index 1a25ed7a1..af2e061d5 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/impl/Pool.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/source/impl/Pool.kt @@ -25,7 +25,8 @@ class Pool( val elements: Map> = emptyMap() ) : Parcelable - private var elements: Map> = HashMap(timeCapsule.elements()) + private var elements: Map> = + HashMap(timeCapsule.elements()) private val current: RoutingHistory get() = RoutingHistory.from( elements.values.toList() diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/action/TransactionExecutionParams.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/action/TransactionExecutionParams.kt index 681816ff6..a9958e3af 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/action/TransactionExecutionParams.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/action/TransactionExecutionParams.kt @@ -2,10 +2,10 @@ package com.badoo.ribs.routing.state.action import android.os.Parcelable import com.badoo.ribs.core.Node +import com.badoo.ribs.routing.Routing import com.badoo.ribs.routing.activator.RoutingActivator import com.badoo.ribs.routing.state.RoutingContext import com.badoo.ribs.routing.state.feature.EffectEmitter -import com.badoo.ribs.routing.Routing /** * Helper class for action execution. diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/action/multi/PoolAction.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/action/multi/PoolAction.kt index 9ffacba12..dc9f34d2e 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/action/multi/PoolAction.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/action/multi/PoolAction.kt @@ -1,12 +1,12 @@ package com.badoo.ribs.routing.state.action.multi import android.os.Parcelable +import com.badoo.ribs.routing.Routing +import com.badoo.ribs.routing.state.Pool import com.badoo.ribs.routing.state.RoutingContext import com.badoo.ribs.routing.state.RoutingContext.Resolved import com.badoo.ribs.routing.state.action.TransactionExecutionParams -import com.badoo.ribs.routing.state.Pool import com.badoo.ribs.routing.state.feature.state.WorkingState -import com.badoo.ribs.routing.Routing /** * Represents an action that affects multiple [Routing] elements in the pool when executed. diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/action/single/DeactivateAction.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/action/single/DeactivateAction.kt index 879da6431..603433b6d 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/action/single/DeactivateAction.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/action/single/DeactivateAction.kt @@ -3,8 +3,8 @@ package com.badoo.ribs.routing.state.action.single import android.os.Parcelable import com.badoo.ribs.core.Node import com.badoo.ribs.routing.Routing -import com.badoo.ribs.routing.resolution.Resolution import com.badoo.ribs.routing.activator.RoutingActivator +import com.badoo.ribs.routing.resolution.Resolution import com.badoo.ribs.routing.state.RoutingContext.ActivationState import com.badoo.ribs.routing.state.RoutingContext.ActivationState.INACTIVE import com.badoo.ribs.routing.state.RoutingContext.Resolved @@ -30,7 +30,7 @@ internal class DeactivateAction( private val targetActivationState: ActivationState = INACTIVE ) : RoutingTransitionAction { - object Factory: ActionFactory { + object Factory : ActionFactory { override fun create( params: ActionExecutionParams ): RoutingTransitionAction = DeactivateAction( diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/action/single/RemoveAction.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/action/single/RemoveAction.kt index 8785530e9..efc7a614c 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/action/single/RemoveAction.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/action/single/RemoveAction.kt @@ -21,7 +21,7 @@ internal class RemoveAction( private val activator: RoutingActivator ) : RoutingTransitionAction { - object Factory: ActionFactory { + object Factory : ActionFactory { override fun create(params: ActionExecutionParams): RoutingTransitionAction = RemoveAction( emitter = params.transactionExecutionParams.emitter, diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/changeset/RoutingCommand.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/changeset/RoutingCommand.kt index c23c38882..af3adcdc2 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/changeset/RoutingCommand.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/changeset/RoutingCommand.kt @@ -2,6 +2,7 @@ package com.badoo.ribs.routing.state.changeset import android.os.Parcelable import com.badoo.ribs.core.Node +import com.badoo.ribs.routing.Routing import com.badoo.ribs.routing.resolution.Resolution import com.badoo.ribs.routing.state.action.single.ActionFactory import com.badoo.ribs.routing.state.action.single.ActivateAction @@ -10,7 +11,6 @@ import com.badoo.ribs.routing.state.action.single.DeactivateAction import com.badoo.ribs.routing.state.action.single.RemoveAction import com.badoo.ribs.routing.state.action.single.ReversibleActionFactory import com.badoo.ribs.routing.state.action.single.ReversibleActionPair -import com.badoo.ribs.routing.Routing /** * Represents a command to change one or more [RoutingContext] elements. diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/exception/CommandExecutionException.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/exception/CommandExecutionException.kt index 90a76538f..7c7090557 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/exception/CommandExecutionException.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/exception/CommandExecutionException.kt @@ -1,5 +1,4 @@ package com.badoo.ribs.routing.state.exception class CommandExecutionException(message: String?, cause: Throwable?) : - IllegalStateException(message, cause) { -} + IllegalStateException(message, cause) diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/exception/KeyNotFoundInPoolException.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/exception/KeyNotFoundInPoolException.kt index 1cd904ce3..f39efad32 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/exception/KeyNotFoundInPoolException.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/exception/KeyNotFoundInPoolException.kt @@ -7,5 +7,4 @@ class KeyNotFoundInPoolException internal constructor( pool: Any ) : IllegalStateException( "Key $key was not found in pool: $pool" -) { -} +) diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/feature/Actor.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/feature/Actor.kt index 6c2e3bbe0..cde17d066 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/feature/Actor.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/feature/Actor.kt @@ -53,7 +53,10 @@ internal class Actor( state: WorkingState, transaction: PoolCommand ) { - transaction.action.execute(state, createParams(effectEmitter, state, emptyMap(), transaction)) + transaction.action.execute( + state, + createParams(effectEmitter, state, emptyMap(), transaction) + ) } private enum class NewTransitionsExecution { @@ -101,6 +104,7 @@ internal class Actor( it.reverse() return NewTransitionsExecution.ABORT } + transaction.descriptor.isContinuationOf(it.descriptor) -> { it.jumpToEnd() } @@ -118,6 +122,7 @@ internal class Actor( transaction.descriptor.isReverseOf(pendingTransition.descriptor) -> { pendingTransition.discard() } + transaction.descriptor.isContinuationOf(pendingTransition.descriptor) -> { pendingTransition.completeWithoutTransition() } @@ -152,7 +157,10 @@ internal class Actor( val defaultElements: MutablePool = mutablePoolOf() commands.forEach { command -> - if (command is RoutingCommand.Add && !state.pool.containsKey(command.routing) && !defaultElements.containsKey(command.routing)) { + if (command is RoutingCommand.Add && !state.pool.containsKey(command.routing) && !defaultElements.containsKey( + command.routing + ) + ) { defaultElements[command.routing] = RoutingContext.Unresolved( activationState = RoutingContext.ActivationState.INACTIVE, routing = command.routing @@ -177,7 +185,11 @@ internal class Actor( val lookup = tempPool[key] if (lookup is RoutingContext.Resolved) lookup else { - val item = defaultElements[key] ?: state.pool[key] ?: throw KeyNotFoundInPoolException(key, state.pool) + val item = + defaultElements[key] ?: state.pool[key] ?: throw KeyNotFoundInPoolException( + key, + state.pool + ) val resolved = item.resolve(resolver, parentNode) tempPool[key] = resolved resolved @@ -213,7 +225,10 @@ internal class Actor( } } - private fun processInternalTransaction(state: WorkingState, internalTransaction: InternalTransaction) { + private fun processInternalTransaction( + state: WorkingState, + internalTransaction: InternalTransaction + ) { val params = createParams( emitter = effectEmitter, state = state, @@ -222,15 +237,28 @@ internal class Actor( ) when (internalTransaction) { - is ExecutePendingTransition -> consumeTransition(state, internalTransaction.pendingTransition, params) + is ExecutePendingTransition -> consumeTransition( + state, + internalTransaction.pendingTransition, + params + ) } } - private fun consumeTransition(state: WorkingState, pendingTransition: PendingTransition, params: TransactionExecutionParams) { + private fun consumeTransition( + state: WorkingState, + pendingTransition: PendingTransition, + params: TransactionExecutionParams + ) { val isScheduled = pendingTransition.isScheduled(state) val canTransition = canTransition(params) when { - isScheduled && canTransition -> pendingTransition.execute(requireNotNull(transitionHandler)).start() + isScheduled && canTransition -> pendingTransition.execute( + requireNotNull( + transitionHandler + ) + ).start() + isScheduled && !canTransition -> pendingTransition.completeWithoutTransition() else -> pendingTransition.discard() } diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/feature/PendingTransition.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/feature/PendingTransition.kt index 525729797..5142c97c7 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/feature/PendingTransition.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/feature/PendingTransition.kt @@ -31,7 +31,11 @@ internal class PendingTransition( */ hideEnteringElements() handler.post { - internalTransactionConsumer.invoke(Transaction.InternalTransaction.ExecutePendingTransition(this)) + internalTransactionConsumer.invoke( + Transaction.InternalTransaction.ExecutePendingTransition( + this + ) + ) } } @@ -73,12 +77,14 @@ internal class PendingTransition( } private fun hideEnteringElements() { - val enteringElements = transitionElements.filter { it.direction == TransitionDirection.ENTER } + val enteringElements = + transitionElements.filter { it.direction == TransitionDirection.ENTER } enteringElements.visibility(View.INVISIBLE) } private fun showEnteringElements() { - val enteringElements = transitionElements.filter { it.direction == TransitionDirection.ENTER } + val enteringElements = + transitionElements.filter { it.direction == TransitionDirection.ENTER } enteringElements.visibility(View.VISIBLE) } } diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/feature/RoutingStatePool.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/feature/RoutingStatePool.kt index 0be96ab32..d365be109 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/feature/RoutingStatePool.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/state/feature/RoutingStatePool.kt @@ -40,7 +40,7 @@ internal open class RoutingStatePool( activator: RoutingActivator, parentNode: Node<*>, transitionHandler: TransitionHandler? -) : AsyncStore, WorkingState>(initialState = timeCapsule.initialState()) { +) : AsyncStore, WorkingState>(initialState = timeCapsule.initialState()) { private val actor = Actor( resolver = resolver, diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/Transition.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/Transition.kt index 77e1c3873..23542fdc4 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/Transition.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/Transition.kt @@ -11,7 +11,7 @@ interface Transition { fun start() fun end() - + fun reverse() companion object { diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/fade/Fade.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/fade/Fade.kt index f4a29fd7f..a445bfe5f 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/fade/Fade.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/fade/Fade.kt @@ -18,7 +18,7 @@ import kotlin.math.abs fun TransitionElement.fade( duration: Long = defaultDuration, interpolator: Interpolator = defaultInterpolator -) : Transition { +): Transition { val evaluator = SingleProgressEvaluator() progressEvaluator.add(evaluator) diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/helper/AnimationContainer.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/helper/AnimationContainer.kt index 5e2f04ded..5c7cbc775 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/helper/AnimationContainer.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/helper/AnimationContainer.kt @@ -4,8 +4,8 @@ import android.view.View import android.view.ViewGroup sealed class AnimationContainer { - object RootView : AnimationContainer() - object Parent : AnimationContainer() + data object RootView : AnimationContainer() + data object Parent : AnimationContainer() data class FindParentById(val id: Int) : AnimationContainer() } diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/slide/Slide.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/slide/Slide.kt index d97ec7049..bd49d3725 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/slide/Slide.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/slide/Slide.kt @@ -1,4 +1,5 @@ @file:SuppressWarnings("LongParameterList") + package com.badoo.ribs.routing.transition.effect.slide import android.view.animation.Interpolator @@ -14,7 +15,6 @@ import com.badoo.ribs.routing.transition.handler.defaultDuration import com.badoo.ribs.routing.transition.handler.defaultInterpolator import com.badoo.ribs.routing.transition.progress.SingleProgressEvaluator - @CheckResult fun TransitionElement.slide( gravity: Gravity, @@ -22,9 +22,10 @@ fun TransitionElement.slide( duration: Long = defaultDuration, interpolator: Interpolator = defaultInterpolator, reverseWhenAddedOrRemoved: Boolean = true -) : Transition { +): Transition { val evaluator = SingleProgressEvaluator().also { progressEvaluator.add(it) } - val actualGravity = if (reverseWhenAddedOrRemoved && (addedOrRemoved xor (direction == TransitionDirection.ENTER))) gravity.reverse() else gravity + val actualGravity = + if (reverseWhenAddedOrRemoved && (addedOrRemoved xor (direction == TransitionDirection.ENTER))) gravity.reverse() else gravity val endValues = slideEndValues(animationContainer, actualGravity).let { when (direction) { TransitionDirection.EXIT -> it @@ -35,7 +36,14 @@ fun TransitionElement.slide( ReverseHolder() return Transition.from( - slideValueAnimator(actualGravity, endValues, interpolator, duration, evaluator, reverseHolder), + slideValueAnimator( + actualGravity, + endValues, + interpolator, + duration, + evaluator, + reverseHolder + ), reverseHolder ) } diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/slide/SlideCalculations.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/slide/SlideCalculations.kt index a2e056008..d42b6f288 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/slide/SlideCalculations.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/slide/SlideCalculations.kt @@ -10,7 +10,6 @@ import com.badoo.ribs.routing.transition.effect.helper.AnimationContainer.RootVi import com.badoo.ribs.routing.transition.effect.helper.EndValues import com.badoo.ribs.routing.transition.effect.helper.findParentById - internal fun TransitionElement.slideEndValues( animationContainer: AnimationContainer, gravity: Gravity @@ -23,7 +22,8 @@ internal fun TransitionElement.slideEndValues( requireNotNull(container) - val diffToAnimationContainer: Int = diffToAnimationContainer(animationContainer, gravity, container) + val diffToAnimationContainer: Int = + diffToAnimationContainer(animationContainer, gravity, container) return when (gravity) { Gravity.LEFT -> EndValues(0f, -(view.width + diffToAnimationContainer).toFloat()) @@ -40,7 +40,9 @@ private fun TransitionElement.diffToAnimationContainer( ): Int { val location = IntArray(2) when (animationContainer) { - is RootView -> { /* no-op, location stays [0,0] */ } + is RootView -> { /* no-op, location stays [0,0] */ + } + is Parent, is FindParentById -> container.getLocationInWindow(location) } diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/slide/SlideValueAnimator.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/slide/SlideValueAnimator.kt index ffc8ebfeb..e254a7fe4 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/slide/SlideValueAnimator.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/effect/slide/SlideValueAnimator.kt @@ -1,4 +1,5 @@ @file:SuppressWarnings("LongParameterList") + package com.badoo.ribs.routing.transition.effect.slide import android.animation.Animator @@ -13,7 +14,6 @@ import com.badoo.ribs.routing.transition.effect.helper.ReverseHolder import com.badoo.ribs.routing.transition.progress.SingleProgressEvaluator import kotlin.math.abs - internal fun TransitionElement.slideValueAnimator( gravity: Gravity, endValues: EndValues, @@ -36,7 +36,7 @@ internal fun TransitionElement.slideValueAnimator( return valueAnimator } -private fun TransitionElement.slideUpdateListener( +private fun TransitionElement.slideUpdateListener( gravity: Gravity, endValues: EndValues, evaluator: SingleProgressEvaluator @@ -53,7 +53,7 @@ private fun TransitionElement.slideUpdateListener( } } -private fun slideStartEndNotifier( +private fun slideStartEndNotifier( evaluator: SingleProgressEvaluator, reverseHolder: ReverseHolder ): AnimatorListenerAdapter = object : AnimatorListenerAdapter() { diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/CrossFader.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/CrossFader.kt index b2a6a9b4c..3c918a27c 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/CrossFader.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/CrossFader.kt @@ -8,7 +8,6 @@ import com.badoo.ribs.routing.transition.TransitionPair import com.badoo.ribs.routing.transition.effect.fade.fade import com.badoo.ribs.routing.transition.invoke - open class CrossFader( private val duration: Long = defaultDuration, private val interpolator: Interpolator = defaultInterpolator, @@ -17,11 +16,11 @@ open class CrossFader( override fun onTransition(elements: List>): TransitionPair { val exiting = elements - .filter { it.direction == TransitionDirection.EXIT && condition(it)} + .filter { it.direction == TransitionDirection.EXIT && condition(it) } .invoke { fade(duration, interpolator) } val entering = elements - .filter { it.direction == TransitionDirection.ENTER && condition(it)} + .filter { it.direction == TransitionDirection.ENTER && condition(it) } .invoke { fade(duration, interpolator) } return TransitionPair( diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/SharedElements.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/SharedElements.kt index 496a6e016..a1c70d56e 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/SharedElements.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/SharedElements.kt @@ -5,7 +5,6 @@ import com.badoo.ribs.routing.transition.TransitionPair import com.badoo.ribs.routing.transition.effect.sharedelement.SharedElementTransition.Params import com.badoo.ribs.routing.transition.effect.sharedelement.sharedElementTransition - open class SharedElements( private val params: List, private val condition: (TransitionElement) -> Boolean = { true } diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/Slider.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/Slider.kt index 5f3b28c84..1d8060ad0 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/Slider.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/Slider.kt @@ -11,7 +11,6 @@ import com.badoo.ribs.routing.transition.effect.helper.AnimationContainer import com.badoo.ribs.routing.transition.effect.slide.slide import com.badoo.ribs.routing.transition.invoke - open class Slider( private val gravity: Gravity = Gravity.LEFT, private val animationContainer: AnimationContainer = AnimationContainer.RootView, @@ -22,7 +21,7 @@ open class Slider( override fun onTransition(elements: List>): TransitionPair { val exit = elements.filter { it.direction == EXIT && condition(it) } - val enter = elements.filter { it.direction == ENTER && condition(it)} + val enter = elements.filter { it.direction == ENTER && condition(it) } return TransitionPair( exiting = Transition.multiple( diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/TabSwitcher.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/TabSwitcher.kt index eeb12e83c..f4e6dd5ca 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/TabSwitcher.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/TabSwitcher.kt @@ -11,7 +11,6 @@ import com.badoo.ribs.routing.transition.effect.helper.AnimationContainer import com.badoo.ribs.routing.transition.effect.slide.slide import com.badoo.ribs.routing.transition.invoke - open class TabSwitcher( private val tabsOrder: List, private val animationContainer: AnimationContainer = AnimationContainer.Parent, @@ -34,7 +33,15 @@ open class TabSwitcher( exit { slide(gravity, animationContainer, duration, interpolator, false) } ), entering = Transition.multiple( - enter { slide(gravity.reverse(), animationContainer, duration, interpolator, false) } + enter { + slide( + gravity.reverse(), + animationContainer, + duration, + interpolator, + false + ) + } ) ) diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/TransitionHandler.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/TransitionHandler.kt index 13b84eaee..b8d10caa6 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/TransitionHandler.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/handler/TransitionHandler.kt @@ -4,7 +4,6 @@ import com.badoo.ribs.routing.transition.Transition import com.badoo.ribs.routing.transition.TransitionElement import com.badoo.ribs.routing.transition.TransitionPair - /** * Interface to be implemented in client code to handle transition animations of * routing changes. @@ -41,8 +40,8 @@ interface TransitionHandler { val pairs = handlers.map { it.onTransition(elements) } return TransitionPair( - exiting = Transition.multiple ( pairs.map { it.exiting } ), - entering = Transition.multiple ( pairs.map { it.entering } ) + exiting = Transition.multiple(pairs.map { it.exiting }), + entering = Transition.multiple(pairs.map { it.entering }) ) } diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/progress/SingleProgressEvaluator.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/progress/SingleProgressEvaluator.kt index 7036c1d52..6b7c93303 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/progress/SingleProgressEvaluator.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/routing/transition/progress/SingleProgressEvaluator.kt @@ -9,12 +9,13 @@ import com.badoo.ribs.util.RIBs class SingleProgressEvaluator : ProgressEvaluator { private sealed class Progress { - object Initialised : Progress() - object Reset : Progress() + data object Initialised : Progress() + data object Reset : Progress() class InProgress : Progress() { var progress: Float = 0f } - object Finished : Progress() + + data object Finished : Progress() } private val state = object : Store(Progress.Initialised) { diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/store/RetainedInstanceStore.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/store/RetainedInstanceStore.kt index f0e8acaf8..f4307a51d 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/store/RetainedInstanceStore.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/store/RetainedInstanceStore.kt @@ -21,7 +21,12 @@ import kotlin.reflect.KClass */ interface RetainedInstanceStore { - fun get(owner: Rib.Identifier, clazz: KClass<*>, disposer: (T) -> Unit, factory: () -> T): T + fun get( + owner: Rib.Identifier, + clazz: KClass<*>, + disposer: (T) -> Unit, + factory: () -> T + ): T fun isRetainedByOwner(owner: Rib.Identifier, value: Any): Boolean diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/store/RetainedInstanceStoreImpl.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/store/RetainedInstanceStoreImpl.kt index 463b2d143..fc79e7d97 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/store/RetainedInstanceStoreImpl.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/store/RetainedInstanceStoreImpl.kt @@ -8,7 +8,12 @@ internal class RetainedInstanceStoreImpl : RetainedInstanceStore { private val map: MutableMap, ValueHolder<*>>> = HashMap() @Suppress("UNCHECKED_CAST") - override fun get(owner: Rib.Identifier, clazz: KClass<*>, disposer: (T) -> Unit, factory: () -> T): T = + override fun get( + owner: Rib.Identifier, + clazz: KClass<*>, + disposer: (T) -> Unit, + factory: () -> T + ): T = map .getOrPut(owner) { HashMap() } .getOrPut(clazz) { ValueHolder(factory(), disposer) } diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/util/RIBs.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/util/RIBs.kt index abaf6138f..51e0b6cfd 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/util/RIBs.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/util/RIBs.kt @@ -104,11 +104,13 @@ object RIBs { internalGroup: Int, event: RequestCodeBasedEventStream.RequestCodeBasedEvent ) { - Log.e(TAG, "There's no one listening for request code event! " + - "requestCode: $requestCode, " + - "resolved group: $internalGroup, " + - "resolved code: $internalRequestCode, " + - "event: $event") + Log.e( + TAG, "There's no one listening for request code event! " + + "requestCode: $requestCode, " + + "resolved group: $internalGroup, " + + "resolved code: $internalRequestCode, " + + "event: $event" + ) } @Suppress("TooGenericExceptionThrown") diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/android/requestcode/RequestCodeBasedEventStreamImplTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/android/requestcode/RequestCodeBasedEventStreamImplTest.kt index c6400facf..5a3ef8be9 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/android/requestcode/RequestCodeBasedEventStreamImplTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/android/requestcode/RequestCodeBasedEventStreamImplTest.kt @@ -2,14 +2,14 @@ package com.badoo.ribs.android.requestcode import com.badoo.ribs.minimal.reactive.CompositeCancellable import com.badoo.ribs.util.RIBs +import org.junit.After +import org.junit.Before +import org.junit.Test import org.mockito.kotlin.any import org.mockito.kotlin.eq import org.mockito.kotlin.mock import org.mockito.kotlin.never import org.mockito.kotlin.verify -import org.junit.After -import org.junit.Before -import org.junit.Test class RequestCodeBasedEventStreamImplTest { @@ -35,7 +35,12 @@ class RequestCodeBasedEventStreamImplTest { stream.testPublish(1, event) - verify(RIBs.errorHandler).handleNoRequestCodeListenersError(eq(1), eq(internalRequestCode), any(), eq(event)) + verify(RIBs.errorHandler).handleNoRequestCodeListenersError( + eq(1), + eq(internalRequestCode), + any(), + eq(event) + ) } @Test @@ -48,14 +53,21 @@ class RequestCodeBasedEventStreamImplTest { stream.testPublish(externalRequestCode, event) - verify(RIBs.errorHandler, never()).handleNoRequestCodeListenersError(any(), any(), any(), any()) + verify(RIBs.errorHandler, never()).handleNoRequestCodeListenersError( + any(), + any(), + any(), + any() + ) } class TestRequestCodeClient(override val requestCodeClientId: String) : RequestCodeClient - class TestEvent(override val requestCode: Int) : RequestCodeBasedEventStream.RequestCodeBasedEvent + class TestEvent(override val requestCode: Int) : + RequestCodeBasedEventStream.RequestCodeBasedEvent - class TestRequestCodeBasedEventStream : RequestCodeBasedEventStreamImpl(requestCodeRegistry = RequestCodeRegistry(null)) { + class TestRequestCodeBasedEventStream : + RequestCodeBasedEventStreamImpl(requestCodeRegistry = RequestCodeRegistry(null)) { fun testPublish(externalRequestCode: Int, event: TestEvent) { publish(externalRequestCode, event) diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/android/requestcode/RequestCodeRegistryTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/android/requestcode/RequestCodeRegistryTest.kt index 11f3b6a76..64e7cb771 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/android/requestcode/RequestCodeRegistryTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/android/requestcode/RequestCodeRegistryTest.kt @@ -1,21 +1,22 @@ package com.badoo.ribs.android.requestcode import android.os.Bundle +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotEquals +import org.junit.Before +import org.junit.Test import org.mockito.kotlin.any import org.mockito.kotlin.doReturn import org.mockito.kotlin.eq import org.mockito.kotlin.mock import org.mockito.kotlin.verify -import org.junit.Assert.assertEquals -import org.junit.Assert.assertNotEquals -import org.junit.Before -import org.junit.Test +import kotlin.math.pow class RequestCodeRegistryTest { companion object { private const val NB_LOWER_BITS = 4 - private val MAX_REQUEST_CODE = Math.pow(2.0, NB_LOWER_BITS.toDouble()).toInt() - 1 + private val MAX_REQUEST_CODE = 2.0.pow(NB_LOWER_BITS.toDouble()).toInt() - 1 } private lateinit var requestCodeRegistry: RequestCodeRegistry diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/clienthelper/connector/ConnectableNodeTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/clienthelper/connector/ConnectableNodeTest.kt index 1578f0351..e9fb770c3 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/clienthelper/connector/ConnectableNodeTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/clienthelper/connector/ConnectableNodeTest.kt @@ -2,18 +2,17 @@ package com.badoo.ribs.clienthelper.connector import com.badoo.ribs.core.Node import com.badoo.ribs.core.helper.TestNode -import com.badoo.ribs.core.plugin.SubtreeChangeAware -import com.badoo.ribs.test.BaseConnectableNodeTest import com.badoo.ribs.core.helper.connectable.ConnectableTestNode import com.badoo.ribs.core.helper.connectable.ConnectableTestRib import com.badoo.ribs.core.helper.connectable.ConnectableTestRib.Output.Output1 import com.badoo.ribs.core.helper.connectable.ConnectableTestRib.Output.Output2 -import io.reactivex.observers.TestObserver +import com.badoo.ribs.core.plugin.SubtreeChangeAware +import com.badoo.ribs.test.BaseConnectableNodeTest +import io.reactivex.rxjava3.observers.TestObserver import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test - class ConnectableNodeTest : BaseConnectableNodeTest() { private lateinit var parent: TestNode @@ -65,7 +64,7 @@ class ConnectableNodeTest : BaseConnectableNodeTest() { children.output.accept(Output2) parent.attachChildNode(children) - testObserver.assertValues(Output1,Output2) + testObserver.assertValues(Output1, Output2) } @Test @@ -76,6 +75,6 @@ class ConnectableNodeTest : BaseConnectableNodeTest() { parent.attachChildNode(children) children.output.accept(Output2) - testObserver.assertValues(Output1,Output2) + testObserver.assertValues(Output1, Output2) } } diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/clienthelper/connector/NodeConnectorTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/clienthelper/connector/NodeConnectorTest.kt index bba9aefe5..c7961f6b3 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/clienthelper/connector/NodeConnectorTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/clienthelper/connector/NodeConnectorTest.kt @@ -6,7 +6,7 @@ import com.badoo.ribs.core.helper.connectable.ConnectableTestRib.Output.Output1 import com.badoo.ribs.core.helper.connectable.ConnectableTestRib.Output.Output2 import com.badoo.ribs.core.helper.connectable.ConnectableTestRib.Output.Output3 import com.badoo.ribs.test.BaseNodeConnectorTest -import io.reactivex.observers.TestObserver +import io.reactivex.rxjava3.observers.TestObserver import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions.assertThrows import org.junit.jupiter.api.RepeatedTest @@ -16,7 +16,6 @@ import java.util.concurrent.ExecutorService import java.util.concurrent.Executors import java.util.concurrent.TimeUnit - class NodeConnectorTest : BaseNodeConnectorTest() { private val firstTestObserver = TestObserver() diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodeBackPressHandlingTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodeBackPressHandlingTest.kt index af64530db..91f0db9c9 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodeBackPressHandlingTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodeBackPressHandlingTest.kt @@ -4,19 +4,19 @@ import com.badoo.ribs.core.helper.TestNode import com.badoo.ribs.core.helper.TestView import com.badoo.ribs.core.plugin.BackPressHandler import com.badoo.ribs.core.plugin.SubtreeBackPressHandler -import org.mockito.kotlin.doReturn -import org.mockito.kotlin.mock -import org.mockito.kotlin.never -import org.mockito.kotlin.verify import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Test import org.junit.runner.RunWith +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.never +import org.mockito.kotlin.verify import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) class NodeBackPressHandlingTest : NodePluginTest() { - + private lateinit var subtreeHandlers: List private lateinit var simpleHandlers: List private lateinit var inactiveChild: TestNode @@ -29,13 +29,17 @@ class NodeBackPressHandlingTest : NodePluginTest() { subtreeHandlerReturnsTrueOnFallback: Int? = null, simpleHandlerReturnsTrue: Int? = null ): Node { - subtreeHandlers = List(3) { i -> mock { - on { handleBackPressFirst() } doReturn (subtreeHandlerReturnsTrueOnFirst == i) - on { handleBackPressFallback() } doReturn (subtreeHandlerReturnsTrueOnFallback == i) - }} - simpleHandlers = List(3) { i -> mock { - on { handleBackPress() } doReturn (simpleHandlerReturnsTrue == i) - }} + subtreeHandlers = List(3) { i -> + mock { + on { handleBackPressFirst() } doReturn (subtreeHandlerReturnsTrueOnFirst == i) + on { handleBackPressFallback() } doReturn (subtreeHandlerReturnsTrueOnFallback == i) + } + } + simpleHandlers = List(3) { i -> + mock { + on { handleBackPress() } doReturn (simpleHandlerReturnsTrue == i) + } + } val node = createNode(plugins = subtreeHandlers + simpleHandlers) inactiveChild = createChildNode(node) diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginAndroidLifecycleAwareTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginAndroidLifecycleAwareTest.kt index fc55800e1..390f347e3 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginAndroidLifecycleAwareTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginAndroidLifecycleAwareTest.kt @@ -1,9 +1,9 @@ package com.badoo.ribs.core import com.badoo.ribs.core.plugin.AndroidLifecycleAware -import org.mockito.kotlin.verify import org.junit.Test import org.junit.runner.RunWith +import org.mockito.kotlin.verify import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginNodeAwareTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginNodeAwareTest.kt index a0840735d..960b43a17 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginNodeAwareTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginNodeAwareTest.kt @@ -1,9 +1,9 @@ package com.badoo.ribs.core import com.badoo.ribs.core.plugin.NodeAware -import org.mockito.kotlin.verify import org.junit.Test import org.junit.runner.RunWith +import org.mockito.kotlin.verify import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginNodeLifecycleAwareTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginNodeLifecycleAwareTest.kt index 144e1feab..8128114cf 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginNodeLifecycleAwareTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginNodeLifecycleAwareTest.kt @@ -3,11 +3,11 @@ package com.badoo.ribs.core import com.badoo.ribs.core.helper.TestBuilder import com.badoo.ribs.core.modality.BuildContext import com.badoo.ribs.core.plugin.NodeLifecycleAware +import org.junit.Test +import org.junit.runner.RunWith import org.mockito.kotlin.eq import org.mockito.kotlin.mock import org.mockito.kotlin.verify -import org.junit.Test -import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginRibAwareTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginRibAwareTest.kt index dd79e9fcb..7da18d5d0 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginRibAwareTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginRibAwareTest.kt @@ -1,14 +1,14 @@ package com.badoo.ribs.core -import com.badoo.ribs.core.modality.BuildContext.Companion.root import com.badoo.ribs.core.helper.TestBuilder import com.badoo.ribs.core.helper.TestRib +import com.badoo.ribs.core.modality.BuildContext.Companion.root import com.badoo.ribs.core.plugin.RibAware +import org.junit.Test +import org.junit.runner.RunWith import org.mockito.kotlin.any import org.mockito.kotlin.mock import org.mockito.kotlin.verify -import org.junit.Test -import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginSavesInstanceStateTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginSavesInstanceStateTest.kt index 49cfe46f3..221a7b576 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginSavesInstanceStateTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginSavesInstanceStateTest.kt @@ -2,10 +2,10 @@ package com.badoo.ribs.core import android.os.Bundle import com.badoo.ribs.core.plugin.SavesInstanceState -import org.mockito.kotlin.mock -import org.mockito.kotlin.verify import org.junit.Test import org.junit.runner.RunWith +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginSubtreeChangeAwareTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginSubtreeChangeAwareTest.kt index 985b67d80..bd7a14a00 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginSubtreeChangeAwareTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginSubtreeChangeAwareTest.kt @@ -4,11 +4,11 @@ import com.badoo.ribs.core.helper.TestBuilder import com.badoo.ribs.core.modality.AncestryInfo import com.badoo.ribs.core.modality.BuildContext import com.badoo.ribs.core.plugin.SubtreeChangeAware +import org.junit.Test +import org.junit.runner.RunWith import org.mockito.kotlin.eq import org.mockito.kotlin.mock import org.mockito.kotlin.verify -import org.junit.Test -import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginSubtreeViewChangeAwareTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginSubtreeViewChangeAwareTest.kt index 6c88e6d61..7f8f98b73 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginSubtreeViewChangeAwareTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginSubtreeViewChangeAwareTest.kt @@ -1,10 +1,10 @@ package com.badoo.ribs.core import com.badoo.ribs.core.plugin.SubtreeViewChangeAware -import org.mockito.kotlin.eq -import org.mockito.kotlin.verify import org.junit.Test import org.junit.runner.RunWith +import org.mockito.kotlin.eq +import org.mockito.kotlin.verify import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginSystemAwareTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginSystemAwareTest.kt index 26cc81976..6f606761b 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginSystemAwareTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginSystemAwareTest.kt @@ -1,9 +1,9 @@ package com.badoo.ribs.core import com.badoo.ribs.core.plugin.SystemAware -import org.mockito.kotlin.verify import org.junit.Test import org.junit.runner.RunWith +import org.mockito.kotlin.verify import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginTest.kt index 2300178c9..18e5a97d5 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginTest.kt @@ -11,10 +11,10 @@ import com.badoo.ribs.core.plugin.Plugin import com.badoo.ribs.core.view.RibView import com.badoo.ribs.core.view.ViewFactory import com.badoo.ribs.routing.Routing +import org.junit.Before import org.mockito.kotlin.argThat import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock -import org.junit.Before open class NodePluginTest { protected lateinit var view: TestView @@ -34,7 +34,7 @@ open class NodePluginTest { } protected inline fun testPlugins(nbPlugins: Int = 3): Pair, List> = - testPlugins(List(nbPlugins) { mock() }) + testPlugins(List(nbPlugins) { mock() }) protected inline fun testPlugins(plugins: List): Pair, List> { val node = createNode( diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginViewAwareTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginViewAwareTest.kt index 746208b00..22474aeff 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginViewAwareTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginViewAwareTest.kt @@ -2,11 +2,11 @@ package com.badoo.ribs.core import com.badoo.ribs.core.helper.TestView import com.badoo.ribs.core.plugin.ViewAware +import org.junit.Test +import org.junit.runner.RunWith import org.mockito.kotlin.any import org.mockito.kotlin.eq import org.mockito.kotlin.verify -import org.junit.Test -import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginViewLifecycleAwareTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginViewLifecycleAwareTest.kt index e9caaa5f2..0d3805924 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginViewLifecycleAwareTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodePluginViewLifecycleAwareTest.kt @@ -1,9 +1,9 @@ package com.badoo.ribs.core import com.badoo.ribs.core.plugin.ViewLifecycleAware -import org.mockito.kotlin.verify import org.junit.Test import org.junit.runner.RunWith +import org.mockito.kotlin.verify import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodeTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodeTest.kt index 00c2f807b..681a12c2c 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodeTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/NodeTest.kt @@ -23,8 +23,8 @@ import com.badoo.ribs.routing.Routing import com.badoo.ribs.routing.router.Router import com.badoo.ribs.store.RetainedInstanceStore import com.badoo.ribs.util.RIBs -import com.jakewharton.rxrelay2.PublishRelay -import io.reactivex.functions.Consumer +import com.jakewharton.rxrelay3.PublishRelay +import io.reactivex.rxjava3.functions.Consumer import org.junit.After import org.junit.Assert.assertEquals import org.junit.Before @@ -334,7 +334,10 @@ class NodeTest { directChild.attachChildNode(grandChild) node.attachChildNode(directChild) - assertEquals(Lifecycle.State.CREATED, grandChild.lifecycleManager.externalLifecycle.currentState) + assertEquals( + Lifecycle.State.CREATED, + grandChild.lifecycleManager.externalLifecycle.currentState + ) } @Test @@ -365,7 +368,10 @@ class NodeTest { directChild.attachChildNode(grandChild) node.attachChildNode(directChild) - assertEquals(Lifecycle.State.STARTED, grandChild.lifecycleManager.externalLifecycle.currentState) + assertEquals( + Lifecycle.State.STARTED, + grandChild.lifecycleManager.externalLifecycle.currentState + ) } @Test @@ -399,7 +405,10 @@ class NodeTest { directChild.attachChildNode(grandChild) node.attachChildNode(directChild) - assertEquals(Lifecycle.State.RESUMED, grandChild.lifecycleManager.externalLifecycle.currentState) + assertEquals( + Lifecycle.State.RESUMED, + grandChild.lifecycleManager.externalLifecycle.currentState + ) } @Ignore("This should be reworked to match new mechanism") diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/RouterTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/RouterTest.kt index 7081f471d..1b16d0a3a 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/RouterTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/RouterTest.kt @@ -2,17 +2,17 @@ package com.badoo.ribs.core import com.badoo.ribs.core.helper.TestRouter import com.badoo.ribs.core.helper.TestView -import com.badoo.ribs.routing.resolution.Resolution import com.badoo.ribs.core.view.RibView -import org.mockito.kotlin.any -import org.mockito.kotlin.doReturn -import org.mockito.kotlin.mock -import org.mockito.kotlin.verify +import com.badoo.ribs.routing.resolution.Resolution import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.Answers +import org.mockito.kotlin.any +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) @@ -35,9 +35,11 @@ class RouterTest { childNodeC2_1 = mock() childNodeC2_2 = mock() - resolutionForC2 = mock { on { buildNodes(any())} doReturn listOf( - childNodeC2_1.toRib(), - childNodeC2_2.toRib()) + resolutionForC2 = mock { + on { buildNodes(any()) } doReturn listOf( + childNodeC2_1.toRib(), + childNodeC2_2.toRib() + ) } resolutionForC1 = mock() resolutionForC3 = mock() diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/AnyConfiguration.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/AnyConfiguration.kt index ea5188d6c..8174ed55e 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/AnyConfiguration.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/AnyConfiguration.kt @@ -4,4 +4,6 @@ import android.os.Parcelable import kotlinx.parcelize.Parcelize @Parcelize -object AnyConfiguration : Parcelable { override fun toString(): String = "AnyConfiguration" } +object AnyConfiguration : Parcelable { + override fun toString(): String = "AnyConfiguration" +} diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/TestBuildParams.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/TestBuildParams.kt index a5c1cb1ff..6fb02c0f8 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/TestBuildParams.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/TestBuildParams.kt @@ -7,7 +7,7 @@ import com.badoo.ribs.core.modality.ActivationMode import com.badoo.ribs.core.modality.AncestryInfo import com.badoo.ribs.core.modality.BuildContext import com.badoo.ribs.core.modality.BuildParams -import java.util.* +import java.util.UUID fun testBuildParams( savedInstanceState: Bundle? = null, @@ -15,7 +15,7 @@ fun testBuildParams( identifier: Rib.Identifier = Rib.Identifier( uuid = UUID.randomUUID() ) -) = BuildParams( +) = BuildParams( payload = null, buildContext = if (ancestryInfo == null) { BuildContext.root(savedInstanceState) @@ -25,6 +25,7 @@ fun testBuildParams( activationMode = ActivationMode.ATTACH_TO_PARENT, savedInstanceState = savedInstanceState, customisations = RibCustomisationDirectoryImpl() - )}, + ) + }, identifier = identifier ) diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/TestRib.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/TestRib.kt index 1029bd052..5e5f24421 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/TestRib.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/TestRib.kt @@ -2,5 +2,4 @@ package com.badoo.ribs.core.helper import com.badoo.ribs.core.Rib -interface TestRib : Rib { -} +interface TestRib : Rib diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/TestRouter.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/TestRouter.kt index 6686581be..c18d3e80e 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/TestRouter.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/TestRouter.kt @@ -1,13 +1,13 @@ package com.badoo.ribs.core.helper import android.os.Parcelable -import com.badoo.ribs.routing.router.Router import com.badoo.ribs.core.modality.BuildParams +import com.badoo.ribs.routing.Routing import com.badoo.ribs.routing.resolution.Resolution +import com.badoo.ribs.routing.router.Router import com.badoo.ribs.routing.source.backstack.BackStack -import com.badoo.ribs.routing.Routing -import org.mockito.kotlin.mock import kotlinx.parcelize.Parcelize +import org.mockito.kotlin.mock class TestRouter( buildParams: BuildParams = testBuildParams(), @@ -31,17 +31,51 @@ class TestRouter( sealed class Configuration : Parcelable { // Content - @Parcelize object C1 : Configuration() { override fun toString(): String = "C1" } - @Parcelize object C2 : Configuration() { override fun toString(): String = "C2" } - @Parcelize object C3 : Configuration() { override fun toString(): String = "C3" } - @Parcelize object C4 : Configuration() { override fun toString(): String = "C4" } - @Parcelize object C5 : Configuration() { override fun toString(): String = "C5" } - @Parcelize data class C6(val i: Int) : Configuration() { override fun toString(): String = "C6" } + @Parcelize + object C1 : Configuration() { + override fun toString(): String = "C1" + } + + @Parcelize + object C2 : Configuration() { + override fun toString(): String = "C2" + } + + @Parcelize + object C3 : Configuration() { + override fun toString(): String = "C3" + } + + @Parcelize + object C4 : Configuration() { + override fun toString(): String = "C4" + } + + @Parcelize + object C5 : Configuration() { + override fun toString(): String = "C5" + } + + @Parcelize + data class C6(val i: Int) : Configuration() { + override fun toString(): String = "C6" + } // Overlay - @Parcelize object O1 : Configuration() { override fun toString(): String = "O1" } - @Parcelize object O2 : Configuration() { override fun toString(): String = "O2" } - @Parcelize object O3 : Configuration() { override fun toString(): String = "O3" } + @Parcelize + object O1 : Configuration() { + override fun toString(): String = "O1" + } + + @Parcelize + object O2 : Configuration() { + override fun toString(): String = "O2" + } + + @Parcelize + object O3 : Configuration() { + override fun toString(): String = "O3" + } } override fun resolve(routing: Routing): Resolution = diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/connectable/ConnectableTestRib.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/connectable/ConnectableTestRib.kt index 54a434702..4d53e1cdc 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/connectable/ConnectableTestRib.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/helper/connectable/ConnectableTestRib.kt @@ -9,8 +9,8 @@ interface ConnectableTestRib : Connectable { sealed class Input sealed class Output { - object Output1 : Output() - object Output2 : Output() - object Output3 : Output() + data object Output1 : Output() + data object Output2 : Output() + data object Output3 : Output() } } diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/lifecycle/CappedLifecycleTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/lifecycle/CappedLifecycleTest.kt index a50ab7528..da38655ea 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/lifecycle/CappedLifecycleTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/lifecycle/CappedLifecycleTest.kt @@ -7,11 +7,11 @@ import androidx.lifecycle.Lifecycle.State.INITIALIZED import androidx.lifecycle.Lifecycle.State.RESUMED import androidx.lifecycle.Lifecycle.State.STARTED import androidx.lifecycle.LifecycleRegistry -import org.mockito.kotlin.mock -import org.mockito.kotlin.whenever import org.junit.Assert.assertEquals import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test +import org.mockito.kotlin.mock +import org.mockito.kotlin.whenever class CappedLifecycleTest { diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/core/lifecycle/LifecycleManagerTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/core/lifecycle/LifecycleManagerTest.kt index 46d63e614..1eb3429f3 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/core/lifecycle/LifecycleManagerTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/core/lifecycle/LifecycleManagerTest.kt @@ -7,11 +7,11 @@ import com.badoo.ribs.core.helper.TestNode import com.badoo.ribs.core.helper.testBuildParams import com.badoo.ribs.core.modality.AncestryInfo import com.badoo.ribs.routing.Routing -import org.mockito.kotlin.doReturn -import org.mockito.kotlin.mock import org.junit.Assert.assertEquals import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock import java.util.concurrent.CopyOnWriteArrayList class LifecycleManagerTest { @@ -47,7 +47,8 @@ class LifecycleManagerTest { @Test fun `onAttachChild() lifecycle inheritance is recursive`() { val grandChildAncestryInfo = AncestryInfo.Child(child1, Routing(AnyConfiguration)) - val grandChild: Node<*> = TestNode(buildParams = testBuildParams(ancestryInfo = grandChildAncestryInfo)) + val grandChild: Node<*> = + TestNode(buildParams = testBuildParams(ancestryInfo = grandChildAncestryInfo)) child1.attachChildNode(grandChild) val expected = RESUMED diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/minimal/reactive/CombineLatestTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/minimal/reactive/CombineLatestTest.kt index 0190d12d6..d1290d7c1 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/minimal/reactive/CombineLatestTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/minimal/reactive/CombineLatestTest.kt @@ -1,6 +1,6 @@ package com.badoo.ribs.minimal.reactive -import io.reactivex.observers.TestObserver +import io.reactivex.rxjava3.observers.TestObserver import org.junit.jupiter.api.Test class CombineLatestTest { diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/minimal/state/StoreTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/minimal/state/StoreTest.kt index 282edddc4..7e82d2ff0 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/minimal/state/StoreTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/minimal/state/StoreTest.kt @@ -1,6 +1,6 @@ package com.badoo.ribs.minimal.state -import io.reactivex.observers.TestObserver +import io.reactivex.rxjava3.observers.TestObserver import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/source/impl/PoolTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/source/impl/PoolTest.kt index 83f606b35..5d6d27464 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/source/impl/PoolTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/source/impl/PoolTest.kt @@ -131,7 +131,12 @@ class PoolTest { ) pool.add(conf2Item) - assertEquals(listOf(conf1Item.toRoutingHistoryElement(), conf2Item.toRoutingHistoryElement()), routingHistoryElements) + assertEquals( + listOf( + conf1Item.toRoutingHistoryElement(), + conf2Item.toRoutingHistoryElement() + ), routingHistoryElements + ) } private fun pool( diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/BackStackDiffingIntegrationTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/BackStackDiffingIntegrationTest.kt index 1bbd036a9..78d7fb61f 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/BackStackDiffingIntegrationTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/BackStackDiffingIntegrationTest.kt @@ -36,7 +36,7 @@ class BackStackDiffingIntegrationTest { @Before fun setUp() { - backStack = BackStack( + backStack = BackStack( initialConfiguration = C1, buildParams = emptyBuildParams() ) @@ -51,7 +51,12 @@ class BackStackDiffingIntegrationTest { fun overlay(position: Int, content: C, overlayIndex: Int, overlay: C): Routing = Routing( configuration = overlay, - identifier = backStack.state.overlayIdForPosition(position, content, overlayIndex, overlay) + identifier = backStack.state.overlayIdForPosition( + position, + content, + overlayIndex, + overlay + ) ) @Test diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/BackStackFeatureTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/BackStackFeatureTest.kt index 219fc5f2a..a642b7e58 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/BackStackFeatureTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/BackStackFeatureTest.kt @@ -7,17 +7,17 @@ import com.badoo.ribs.core.helper.TestRouter.Configuration.C3 import com.badoo.ribs.minimal.state.TimeCapsule import com.badoo.ribs.routing.Routing import com.badoo.ribs.routing.history.RoutingHistoryElement -import com.badoo.ribs.routing.source.backstack.Elements import com.badoo.ribs.routing.source.backstack.BackStack import com.badoo.ribs.routing.source.backstack.BackStack.State +import com.badoo.ribs.routing.source.backstack.Elements import com.badoo.ribs.routing.state.feature.operation.asBackStackElements +import org.junit.Assert.assertEquals +import org.junit.Before +import org.junit.Test import org.mockito.kotlin.any import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock import org.mockito.kotlin.whenever -import org.junit.Assert.assertEquals -import org.junit.Before -import org.junit.Test // TODO add more tests: // - identifier maintenance diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/RoutingContextTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/RoutingContextTest.kt index 494c72236..5e6d0c9e9 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/RoutingContextTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/RoutingContextTest.kt @@ -10,12 +10,18 @@ import com.badoo.ribs.core.modality.BuildContext import com.badoo.ribs.routing.Routing import com.badoo.ribs.routing.resolution.Resolution import com.badoo.ribs.routing.resolver.RoutingResolver -import com.badoo.ribs.routing.state.RoutingContext.ActivationState.* +import com.badoo.ribs.routing.state.RoutingContext.ActivationState.ACTIVE +import com.badoo.ribs.routing.state.RoutingContext.ActivationState.INACTIVE +import com.badoo.ribs.routing.state.RoutingContext.ActivationState.SLEEPING import com.badoo.ribs.routing.state.RoutingContext.Resolved import com.badoo.ribs.routing.state.RoutingContext.Unresolved -import org.mockito.kotlin.* import org.junit.Assert.assertEquals import org.junit.Test +import org.mockito.kotlin.any +import org.mockito.kotlin.argumentCaptor +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify class RoutingContextTest { @@ -127,7 +133,7 @@ class RoutingContextTest { parentNode, parentNode, NB_EXPECTED_NODES, - emptyList() + emptyList() ) } @@ -140,7 +146,7 @@ class RoutingContextTest { mockAnchor, parentNode, NB_EXPECTED_NODES, - emptyList() + emptyList() ) } @@ -263,7 +269,7 @@ class RoutingContextTest { @Test fun `Resolved shrink() keeps configuration`() { val routing = Routing(mock()) - val resolved = Resolved(ACTIVE, routing, mock(), mock(), mock()) + val resolved = Resolved(ACTIVE, routing, mock(), mock(), mock()) val unresolved = resolved.shrink() assertEquals(routing, unresolved.routing) } diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/RoutingStatePoolTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/RoutingStatePoolTest.kt index 9bd3b72af..6b8f0fce7 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/RoutingStatePoolTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/RoutingStatePoolTest.kt @@ -23,7 +23,7 @@ import com.badoo.ribs.routing.state.feature.Transaction import com.badoo.ribs.routing.state.feature.Transaction.PoolCommand.Sleep import com.badoo.ribs.routing.state.feature.Transaction.PoolCommand.WakeUp import com.badoo.ribs.routing.state.feature.state.SavedState -import io.reactivex.observers.TestObserver +import io.reactivex.rxjava3.observers.TestObserver import org.mockito.kotlin.* import kotlinx.parcelize.Parcelize import org.junit.Assert.assertEquals @@ -34,16 +34,24 @@ import org.mockito.ArgumentMatchers.anyList // FIXME rework test suite -- many of the responsibilities has been moved out to other classes // TODO test only remaining responsibilities without assumptions on view detach / attach etc. +@SuppressWarnings("LargeClass") class RoutingStatePoolTest { sealed class Configuration : Parcelable { - @Parcelize object Permanent1 : Configuration() - @Parcelize object Permanent2 : Configuration() - @Parcelize object ContentViewParented1 : Configuration() - @Parcelize object ContentViewParented2 : Configuration() - @Parcelize object ContentViewParented3 : Configuration() - @Parcelize object ContentExternal1 : Configuration() - @Parcelize object ContentExternal2 : Configuration() + @Parcelize + data object Permanent1 : Configuration() + @Parcelize + data object Permanent2 : Configuration() + @Parcelize + data object ContentViewParented1 : Configuration() + @Parcelize + data object ContentViewParented2 : Configuration() + @Parcelize + data object ContentViewParented3 : Configuration() + @Parcelize + data object ContentExternal1 : Configuration() + @Parcelize + data object ContentExternal2 : Configuration() } private lateinit var emptyTimeCapsule: TimeCapsule @@ -70,7 +78,11 @@ class RoutingStatePoolTest { val resolution: Resolution ) { companion object { - fun create(routing: Routing, nbNodes: Int, viewActivationMode: ActivationMode): ConfigurationTestHelper { + fun create( + routing: Routing, + nbNodes: Int, + viewActivationMode: ActivationMode + ): ConfigurationTestHelper { val nodes = MutableList(nbNodes) { i -> mock> { on { this.buildContext } doReturn BuildContext.root(null) @@ -104,8 +116,8 @@ class RoutingStatePoolTest { mock { on { numberOfNodes } doReturn nbNodes on { buildNodes(anyList()) } doAnswer { - this@toRoutingAction.map { - factory -> factory.invoke() + this@toRoutingAction.map { factory -> + factory.invoke() } } } @@ -115,34 +127,67 @@ class RoutingStatePoolTest { @Before @SuppressWarnings("LongMethod") fun setUp() { - val routingPermanent1 = Routing(identifier = Identifier("Permanent 0"), configuration = Permanent1 as Configuration) - val routingPermanent2 = Routing(identifier = Identifier("Permanent 1"), configuration = Permanent2 as Configuration) - val routingContentViewParented1 = Routing(identifier = Identifier("Content 0"), configuration = ContentViewParented1 as Configuration) - val routingContentViewParented2 = Routing(identifier = Identifier("Content 1"), configuration = ContentViewParented2 as Configuration) - val routingContentViewParented3 = Routing(identifier = Identifier("Content 2"), configuration = ContentViewParented3 as Configuration) - val routingContentExternal1 = Routing(identifier = Identifier("Content 3"), configuration = ContentExternal1 as Configuration) - val routingContentExternal2 = Routing(identifier = Identifier("Content 4"), configuration = ContentExternal2 as Configuration) + val routingPermanent1 = Routing( + identifier = Identifier("Permanent 0"), + configuration = Permanent1 as Configuration + ) + val routingPermanent2 = Routing( + identifier = Identifier("Permanent 1"), + configuration = Permanent2 as Configuration + ) + val routingContentViewParented1 = Routing( + identifier = Identifier("Content 0"), + configuration = ContentViewParented1 as Configuration + ) + val routingContentViewParented2 = Routing( + identifier = Identifier("Content 1"), + configuration = ContentViewParented2 as Configuration + ) + val routingContentViewParented3 = Routing( + identifier = Identifier("Content 2"), + configuration = ContentViewParented3 as Configuration + ) + val routingContentExternal1 = Routing( + identifier = Identifier("Content 3"), + configuration = ContentExternal1 as Configuration + ) + val routingContentExternal2 = Routing( + identifier = Identifier("Content 4"), + configuration = ContentExternal2 as Configuration + ) helperPermanent1 = - ConfigurationTestHelper.create(routingPermanent1,2, ActivationMode.ATTACH_TO_PARENT) + ConfigurationTestHelper.create(routingPermanent1, 2, ActivationMode.ATTACH_TO_PARENT) helperPermanent2 = - ConfigurationTestHelper.create(routingPermanent2,3, ActivationMode.ATTACH_TO_PARENT) + ConfigurationTestHelper.create(routingPermanent2, 3, ActivationMode.ATTACH_TO_PARENT) helperContentViewParented1 = - ConfigurationTestHelper.create(routingContentViewParented1,2, ActivationMode.ATTACH_TO_PARENT) + ConfigurationTestHelper.create( + routingContentViewParented1, + 2, + ActivationMode.ATTACH_TO_PARENT + ) helperContentViewParented2 = - ConfigurationTestHelper.create(routingContentViewParented2,3, ActivationMode.ATTACH_TO_PARENT) + ConfigurationTestHelper.create( + routingContentViewParented2, + 3, + ActivationMode.ATTACH_TO_PARENT + ) helperContentViewParented3 = - ConfigurationTestHelper.create(routingContentViewParented3,2, ActivationMode.ATTACH_TO_PARENT) + ConfigurationTestHelper.create( + routingContentViewParented3, + 2, + ActivationMode.ATTACH_TO_PARENT + ) helperContentExternal1 = - ConfigurationTestHelper.create(routingContentExternal1,2, ActivationMode.CLIENT) + ConfigurationTestHelper.create(routingContentExternal1, 2, ActivationMode.CLIENT) helperContentExternal2 = - ConfigurationTestHelper.create(routingContentExternal2,3, ActivationMode.CLIENT) + ConfigurationTestHelper.create(routingContentExternal2, 3, ActivationMode.CLIENT) val helpers = listOf( helperPermanent1, @@ -172,15 +217,43 @@ class RoutingStatePoolTest { ) val poolInTimeCapsule = hashMapOf( - routingsforTimeCapsule[0] to Unresolved(SLEEPING, routingsforTimeCapsule[0], helperPermanent1.bundles), - routingsforTimeCapsule[1] to Unresolved(SLEEPING, routingsforTimeCapsule[1], helperPermanent2.bundles), - - routingsforTimeCapsule[2] to Unresolved(SLEEPING, routingsforTimeCapsule[2], helperContentViewParented1.bundles), - routingsforTimeCapsule[3] to Unresolved(SLEEPING, routingsforTimeCapsule[3], helperContentViewParented2.bundles), - routingsforTimeCapsule[4] to Unresolved(INACTIVE, routingsforTimeCapsule[4], helperContentViewParented3.bundles), - - routingsforTimeCapsule[5] to Unresolved(SLEEPING, routingsforTimeCapsule[5], helperContentExternal1.bundles), - routingsforTimeCapsule[6] to Unresolved(INACTIVE, routingsforTimeCapsule[6], helperContentExternal2.bundles) + routingsforTimeCapsule[0] to Unresolved( + SLEEPING, + routingsforTimeCapsule[0], + helperPermanent1.bundles + ), + routingsforTimeCapsule[1] to Unresolved( + SLEEPING, + routingsforTimeCapsule[1], + helperPermanent2.bundles + ), + + routingsforTimeCapsule[2] to Unresolved( + SLEEPING, + routingsforTimeCapsule[2], + helperContentViewParented1.bundles + ), + routingsforTimeCapsule[3] to Unresolved( + SLEEPING, + routingsforTimeCapsule[3], + helperContentViewParented2.bundles + ), + routingsforTimeCapsule[4] to Unresolved( + INACTIVE, + routingsforTimeCapsule[4], + helperContentViewParented3.bundles + ), + + routingsforTimeCapsule[5] to Unresolved( + SLEEPING, + routingsforTimeCapsule[5], + helperContentExternal1.bundles + ), + routingsforTimeCapsule[6] to Unresolved( + INACTIVE, + routingsforTimeCapsule[6], + helperContentExternal2.bundles + ) ) emptyTimeCapsule = mock() @@ -224,12 +297,14 @@ class RoutingStatePoolTest { // For backwards compatibility with legacy testing approaches until test suite is reworked -- still // better than throwing them away private fun RoutingStatePool.addPermanents() { - accept(Transaction.from( - Add(helperPermanent1.routing), - Add(helperPermanent2.routing), - Activate(helperPermanent1.routing), - Activate(helperPermanent2.routing) - )) + accept( + Transaction.from( + Add(helperPermanent1.routing), + Add(helperPermanent2.routing), + Activate(helperPermanent1.routing), + Activate(helperPermanent2.routing) + ) + ) } // region Init @@ -313,8 +388,14 @@ class RoutingStatePoolTest { verify(routingActivator).add(helperPermanent1.routing, helperPermanent1.nodes) verify(routingActivator).add(helperPermanent2.routing, helperPermanent2.nodes) - verify(routingActivator).add(helperContentViewParented1.routing, helperContentViewParented1.nodes) - verify(routingActivator).add(helperContentViewParented2.routing, helperContentViewParented2.nodes) + verify(routingActivator).add( + helperContentViewParented1.routing, + helperContentViewParented1.nodes + ) + verify(routingActivator).add( + helperContentViewParented2.routing, + helperContentViewParented2.nodes + ) verify(routingActivator).add(helperContentExternal1.routing, helperContentExternal1.nodes) } @@ -335,13 +416,28 @@ class RoutingStatePoolTest { pool.accept(WakeUp()) verify(routingActivator).activate(helperPermanent1.routing, helperPermanent1.nodes) verify(routingActivator).activate(helperPermanent2.routing, helperPermanent2.nodes) - verify(routingActivator).activate(helperContentViewParented1.routing, helperContentViewParented1.nodes) - verify(routingActivator).activate(helperContentViewParented2.routing, helperContentViewParented2.nodes) - verify(routingActivator).activate(helperContentExternal1.routing, helperContentExternal1.nodes) + verify(routingActivator).activate( + helperContentViewParented1.routing, + helperContentViewParented1.nodes + ) + verify(routingActivator).activate( + helperContentViewParented2.routing, + helperContentViewParented2.nodes + ) + verify(routingActivator).activate( + helperContentExternal1.routing, + helperContentExternal1.nodes + ) // As these were INACTIVE and shouldn't be reactivated after WakeUp - verify(routingActivator, never()).activate(helperContentViewParented3.routing, helperContentViewParented3.nodes) - verify(routingActivator, never()).activate(helperContentExternal2.routing, helperContentExternal2.nodes) + verify(routingActivator, never()).activate( + helperContentViewParented3.routing, + helperContentViewParented3.nodes + ) + verify(routingActivator, never()).activate( + helperContentExternal2.routing, + helperContentExternal2.nodes + ) } /** @@ -394,9 +490,11 @@ class RoutingStatePoolTest { @Test fun `On Add, Node factories are invoked`() { createEmptyPool() - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing) + ) + ) helperContentViewParented1.nodeFactories.forEach { verify(it).invoke() } @@ -405,10 +503,12 @@ class RoutingStatePoolTest { @Test fun `On Add TWICE, Node factories are NOT invoked again`() { createEmptyPool() - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Add(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Add(helperContentViewParented1.routing) + ) + ) helperContentViewParented1.nodeFactories.forEach { verify(it, times(1)).invoke() } @@ -426,9 +526,11 @@ class RoutingStatePoolTest { @Ignore("The whole test suite should be refactored.") fun `On Add, Nodes that are created are attached with empty Bundles`() { createEmptyPool() - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing) + ) + ) helperContentViewParented1.nodes.forEach { verify(parentNode).attachChildNode(it) } @@ -446,10 +548,12 @@ class RoutingStatePoolTest { @Ignore("The whole test suite should be refactored.") fun `On Add TWICE, Nodes are NOT added again`() { createEmptyPool() - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Add(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Add(helperContentViewParented1.routing) + ) + ) helperContentViewParented1.nodes.forEach { verify(parentNode, times(1)).attachChildNode(it) } @@ -465,9 +569,11 @@ class RoutingStatePoolTest { @Test fun `On Add, associated RoutingAction is not yet executed`() { createEmptyPool() - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing) + ) + ) verify(helperContentViewParented1.resolution, never()).execute() } // endregion @@ -476,31 +582,40 @@ class RoutingStatePoolTest { @Test fun `On Activate BEFORE WakeUp, associated RoutingAction is NOT yet executed`() { createEmptyPool() - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Activate(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Activate(helperContentViewParented1.routing) + ) + ) verify(helperContentViewParented1.resolution, never()).execute() } @Test fun `On Activate BEFORE WakeUp, attachChildView() is NOT yet called on associated Nodes that are view-parented`() { createEmptyPool() - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Activate(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Activate(helperContentViewParented1.routing) + ) + ) - verify(routingActivator, never()).activate(helperContentViewParented1.routing, helperContentViewParented1.nodes) + verify(routingActivator, never()).activate( + helperContentViewParented1.routing, + helperContentViewParented1.nodes + ) } @Test fun `On Activate BEFORE WakeUp, associated RoutingAction is executed AUTOMATICALLY AFTER next WakeUp`() { createEmptyPool() - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Activate(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Activate(helperContentViewParented1.routing) + ) + ) pool.accept(WakeUp()) verify(helperContentViewParented1.resolution).execute() } @@ -508,22 +623,29 @@ class RoutingStatePoolTest { @Test fun `On Activate BEFORE WakeUp, attachChildView() is called AUTOMATICALLY AFTER next WakeUp on associated Nodes that are view-parented`() { createEmptyPool() - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Activate(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Activate(helperContentViewParented1.routing) + ) + ) pool.accept(WakeUp()) - verify(routingActivator).activate(helperContentViewParented1.routing, helperContentViewParented1.nodes) + verify(routingActivator).activate( + helperContentViewParented1.routing, + helperContentViewParented1.nodes + ) } @Test fun `On Activate AFTER WakeUp, associated RoutingAction is executed`() { createEmptyPool() pool.accept(WakeUp()) - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Activate(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Activate(helperContentViewParented1.routing) + ) + ) verify(helperContentViewParented1.resolution).execute() } @@ -531,26 +653,35 @@ class RoutingStatePoolTest { fun `On Activate AFTER WakeUp, attachChildView() is called on associated Nodes`() { createEmptyPool() pool.accept(WakeUp()) - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Activate(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Activate(helperContentViewParented1.routing) + ) + ) - verify(routingActivator).activate(helperContentViewParented1.routing, helperContentViewParented1.nodes) + verify(routingActivator).activate( + helperContentViewParented1.routing, + helperContentViewParented1.nodes + ) } @Test fun `On Activate on ALREADY ACTIVE configuration, associated RoutingAction is NOT executed again`() { createEmptyPool() pool.accept(WakeUp()) - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Activate(helperContentViewParented1.routing) - )) - pool.accept(Transaction.from( - Activate(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Activate(helperContentViewParented1.routing) + ) + ) + pool.accept( + Transaction.from( + Activate(helperContentViewParented1.routing) + ) + ) verify(helperContentViewParented1.resolution, times(1)).execute() } @@ -558,14 +689,21 @@ class RoutingStatePoolTest { fun `On Activate on ALREADY ACTIVE configuration, attachChildView() is NOT called again`() { createEmptyPool() pool.accept(WakeUp()) - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Activate(helperContentViewParented1.routing) - )) - pool.accept(Transaction.from( - Activate(helperContentViewParented1.routing) - )) - verify(routingActivator, times(1)).activate(helperContentViewParented1.routing, helperContentViewParented1.nodes) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Activate(helperContentViewParented1.routing) + ) + ) + pool.accept( + Transaction.from( + Activate(helperContentViewParented1.routing) + ) + ) + verify(routingActivator, times(1)).activate( + helperContentViewParented1.routing, + helperContentViewParented1.nodes + ) } // endregion @@ -573,10 +711,12 @@ class RoutingStatePoolTest { @Test fun `On Deactivate, cleanup() is called on associated RoutingAction`() { createEmptyPool() - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Deactivate(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Deactivate(helperContentViewParented1.routing) + ) + ) verify(helperContentViewParented1.resolution).cleanup() } @@ -592,10 +732,12 @@ class RoutingStatePoolTest { @Ignore("The whole test suite should be refactored.") fun `On Deactivate, saveViewState() is called on associated Nodes`() { createEmptyPool() - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Deactivate(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Deactivate(helperContentViewParented1.routing) + ) + ) helperContentViewParented1.nodes.forEach { verify(it).saveViewState() } @@ -613,21 +755,28 @@ class RoutingStatePoolTest { @Ignore("The whole test suite should be refactored.") fun `On Deactivate, detachChildView() is called on associated Nodes that are view-parented`() { createEmptyPool() - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Deactivate(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Deactivate(helperContentViewParented1.routing) + ) + ) - verify(routingActivator).deactivate(helperContentViewParented1.routing, helperContentViewParented1.nodes) + verify(routingActivator).deactivate( + helperContentViewParented1.routing, + helperContentViewParented1.nodes + ) } @Test fun `On Deactivate, Node references are kept`() { createEmptyPool() - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Deactivate(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Deactivate(helperContentViewParented1.routing) + ) + ) val configurationContext = pool.state.pool[helperContentViewParented1.routing] assertEquals(true, configurationContext is Resolved) assertEquals(helperContentViewParented1.nodes, (configurationContext as? Resolved)?.nodes) @@ -650,10 +799,12 @@ class RoutingStatePoolTest { @Test fun `On Deactivate, Node routing is removed from pendingDeactivate`() { createEmptyPool() - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Deactivate(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Deactivate(helperContentViewParented1.routing) + ) + ) assertEquals(true, pool.state.pendingDeactivate.isEmpty()) } @@ -662,15 +813,23 @@ class RoutingStatePoolTest { @Test fun `On Remove, all of its Nodes are detached regardless of view-parenting mode`() { createEmptyPool() - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Add(helperContentExternal1.routing), - Remove(helperContentViewParented1.routing), - Remove(helperContentExternal1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Add(helperContentExternal1.routing), + Remove(helperContentViewParented1.routing), + Remove(helperContentExternal1.routing) + ) + ) - verify(routingActivator).remove(helperContentViewParented1.routing, helperContentViewParented1.nodes) - verify(routingActivator).remove(helperContentExternal1.routing, helperContentExternal1.nodes) + verify(routingActivator).remove( + helperContentViewParented1.routing, + helperContentViewParented1.nodes + ) + verify(routingActivator).remove( + helperContentExternal1.routing, + helperContentExternal1.nodes + ) } // endregion @@ -679,11 +838,13 @@ class RoutingStatePoolTest { fun `On Sleep after WakeUp, cleanup() is called on associated RoutingAction`() { createEmptyPool() pool.accept(WakeUp()) - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Add(helperContentExternal1.routing), - Activate(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Add(helperContentExternal1.routing), + Activate(helperContentViewParented1.routing) + ) + ) clearInvocations(parentNode) pool.accept(Sleep()) @@ -703,11 +864,13 @@ class RoutingStatePoolTest { fun `On Sleep after WakeUp, saveViewState() is called on every ACTIVE node`() { createEmptyPool() pool.accept(WakeUp()) - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Add(helperContentExternal1.routing), - Activate(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Add(helperContentExternal1.routing), + Activate(helperContentViewParented1.routing) + ) + ) clearInvocations(parentNode) pool.accept(Sleep()) @@ -729,15 +892,20 @@ class RoutingStatePoolTest { fun `On Sleep after WakeUp, detachChildView() is called on every ACTIVE node that are view-parented`() { createEmptyPool() pool.accept(WakeUp()) - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Add(helperContentExternal1.routing), - Activate(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Add(helperContentExternal1.routing), + Activate(helperContentViewParented1.routing) + ) + ) clearInvocations(parentNode) pool.accept(Sleep()) - verify(routingActivator).deactivate(helperContentViewParented1.routing, helperContentViewParented1.nodes) + verify(routingActivator).deactivate( + helperContentViewParented1.routing, + helperContentViewParented1.nodes + ) } // endregion @@ -746,11 +914,13 @@ class RoutingStatePoolTest { fun `On WakeUp after Sleep, execute() is called on associated RoutingAction`() { createEmptyPool() pool.accept(WakeUp()) - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Add(helperContentExternal1.routing), - Activate(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Add(helperContentExternal1.routing), + Activate(helperContentViewParented1.routing) + ) + ) pool.accept(Sleep()) clearInvocations(helperContentViewParented1.resolution) pool.accept(WakeUp()) @@ -762,16 +932,21 @@ class RoutingStatePoolTest { fun `On WakeUp after Sleep, attachChildView() is called on every ACTIVE node that are view-parented`() { createEmptyPool() pool.accept(WakeUp()) - pool.accept(Transaction.from( - Add(helperContentViewParented1.routing), - Add(helperContentExternal1.routing), - Activate(helperContentViewParented1.routing) - )) + pool.accept( + Transaction.from( + Add(helperContentViewParented1.routing), + Add(helperContentExternal1.routing), + Activate(helperContentViewParented1.routing) + ) + ) pool.accept(Sleep()) clearInvocations(routingActivator) pool.accept(WakeUp()) - verify(routingActivator).activate(helperContentViewParented1.routing, helperContentViewParented1.nodes) + verify(routingActivator).activate( + helperContentViewParented1.routing, + helperContentViewParented1.nodes + ) } // endregion } diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/ActorTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/ActorTest.kt index 4cf7beba6..140a3fa85 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/ActorTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/ActorTest.kt @@ -13,17 +13,17 @@ import com.badoo.ribs.routing.state.changeset.TransitionDescriptor import com.badoo.ribs.routing.state.feature.state.WorkingState import com.badoo.ribs.routing.transition.TransitionElement import com.badoo.ribs.routing.transition.handler.TransitionHandler +import org.junit.jupiter.api.Test +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.Arguments +import org.junit.jupiter.params.provider.MethodSource +import org.mockito.internal.verification.VerificationModeFactory.times import org.mockito.kotlin.any import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock import org.mockito.kotlin.never import org.mockito.kotlin.verify import org.mockito.kotlin.whenever -import org.junit.jupiter.api.Test -import org.junit.jupiter.params.ParameterizedTest -import org.junit.jupiter.params.provider.Arguments -import org.junit.jupiter.params.provider.MethodSource -import org.mockito.internal.verification.VerificationModeFactory.times import java.util.stream.Stream internal class ActorTest { @@ -44,7 +44,7 @@ internal class ActorTest { on { actionFactory } doReturn ElementsActionFactoryStub() on { routing } doReturn mock() } - val transaction = Transaction.RoutingChange( + val transaction = Transaction.RoutingChange( changeset = listOf(command), descriptor = mock() ) @@ -78,7 +78,7 @@ internal class ActorTest { on { actionFactory } doReturn ElementsActionFactoryStub() on { routing } doReturn mock() } - val transaction = Transaction.RoutingChange( + val transaction = Transaction.RoutingChange( changeset = listOf(command), descriptor = newDescriptor ) @@ -90,7 +90,7 @@ internal class ActorTest { verify(pendingTransition).schedule() } - @ParameterizedTest() + @ParameterizedTest @MethodSource("executePendingTestArguments") fun `WHEN a ExecutePendingTransition is accepted THEN pendingTransition is correctly handled`( activationState: RoutingContext.ActivationState, @@ -122,7 +122,7 @@ internal class ActorTest { } } - @ParameterizedTest() + @ParameterizedTest @MethodSource("ongoingTransitionInteractionsTestArguments") fun `GIVEN an ongoingTransition in the state WHEN a RoutingChange is accepted THEN existing ongoingTransition is correctly handled`( isContinuation: Boolean, diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/OngoingTransitionTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/OngoingTransitionTest.kt index db84aa1a2..957bfb583 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/OngoingTransitionTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/OngoingTransitionTest.kt @@ -8,11 +8,11 @@ import com.badoo.ribs.routing.transition.TransitionDirection import com.badoo.ribs.routing.transition.TransitionElement import com.badoo.ribs.routing.transition.progress.MultiProgressEvaluator import com.badoo.ribs.routing.transition.progress.SingleProgressEvaluator +import org.junit.Test import org.mockito.kotlin.any import org.mockito.kotlin.mock import org.mockito.kotlin.never import org.mockito.kotlin.verify -import org.junit.Test import java.util.UUID class OngoingTransitionTest { diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/PendingTransitionTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/PendingTransitionTest.kt index 2c21d2fda..1885df084 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/PendingTransitionTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/PendingTransitionTest.kt @@ -6,10 +6,13 @@ import com.badoo.ribs.routing.state.feature.RoutingStatePool.Effect.Transition.R import com.badoo.ribs.routing.state.feature.RoutingStatePool.Effect.Transition.RequestTransition import com.badoo.ribs.routing.state.feature.Transaction.InternalTransaction.ExecutePendingTransition import com.badoo.ribs.routing.transition.handler.TransitionHandler -import org.mockito.kotlin.* import org.assertj.core.api.Assertions.assertThat import org.junit.Test - +import org.mockito.kotlin.any +import org.mockito.kotlin.doAnswer +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify class PendingTransitionTest { diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/RoutingStatePoolTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/RoutingStatePoolTest.kt index 247e9e04a..23f9fadfc 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/RoutingStatePoolTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/RoutingStatePoolTest.kt @@ -2,10 +2,10 @@ package com.badoo.ribs.routing.state.feature import com.badoo.ribs.core.helper.AnyConfiguration import com.badoo.ribs.routing.state.feature.state.WorkingState -import org.mockito.kotlin.mock -import org.mockito.kotlin.verify import org.assertj.core.api.Assertions.assertThat import org.junit.Test +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify class RoutingStatePoolTest { @@ -37,7 +37,11 @@ class RoutingStatePoolTest { val pendingTransition: PendingTransition = mock() val routingStatePool = TestRoutingStatePool() - routingStatePool.testEvent(RoutingStatePool.Effect.Transition.RequestTransition(pendingTransition)) + routingStatePool.testEvent( + RoutingStatePool.Effect.Transition.RequestTransition( + pendingTransition + ) + ) assertThat(routingStatePool.state.pendingTransitions.first()).isEqualTo(pendingTransition) } @@ -50,7 +54,11 @@ class RoutingStatePoolTest { ) val routingStatePool = TestRoutingStatePool(state) - routingStatePool.testEvent(RoutingStatePool.Effect.Transition.RemovePendingTransition(pendingTransition)) + routingStatePool.testEvent( + RoutingStatePool.Effect.Transition.RemovePendingTransition( + pendingTransition + ) + ) assertThat(routingStatePool.state.pendingTransitions).isEmpty() } @@ -60,7 +68,11 @@ class RoutingStatePoolTest { val ongoingTransition: OngoingTransition = mock() val routingStatePool = TestRoutingStatePool() - routingStatePool.testEvent(RoutingStatePool.Effect.Transition.TransitionStarted(ongoingTransition)) + routingStatePool.testEvent( + RoutingStatePool.Effect.Transition.TransitionStarted( + ongoingTransition + ) + ) assertThat(routingStatePool.state.ongoingTransitions.first()).isEqualTo(ongoingTransition) } @@ -73,7 +85,11 @@ class RoutingStatePoolTest { ) val routingStatePool = TestRoutingStatePool(state) - routingStatePool.testEvent(RoutingStatePool.Effect.Transition.TransitionFinished(ongoingTransition)) + routingStatePool.testEvent( + RoutingStatePool.Effect.Transition.TransitionFinished( + ongoingTransition + ) + ) assertThat(routingStatePool.state.ongoingTransitions).isEmpty() } @@ -87,8 +103,16 @@ class RoutingStatePoolTest { ) val routingStatePool = TestRoutingStatePool(state) - routingStatePool.testEvent(RoutingStatePool.Effect.Transition.RequestTransition(pendingTransition2)) - routingStatePool.testEvent(RoutingStatePool.Effect.Transition.RemovePendingTransition(pendingTransition)) + routingStatePool.testEvent( + RoutingStatePool.Effect.Transition.RequestTransition( + pendingTransition2 + ) + ) + routingStatePool.testEvent( + RoutingStatePool.Effect.Transition.RemovePendingTransition( + pendingTransition + ) + ) assertThat(routingStatePool.state.pendingTransitions).contains(pendingTransition2) assertThat(routingStatePool.state.pendingTransitions).doesNotContain(pendingTransition) diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/TestRoutingStatePool.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/TestRoutingStatePool.kt index 87e99f003..c650a14d0 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/TestRoutingStatePool.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/TestRoutingStatePool.kt @@ -8,13 +8,14 @@ import org.mockito.kotlin.any import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock -internal class TestRoutingStatePool(initialState: WorkingState? = null) : RoutingStatePool( - timeCapsule = createTimeCapsule(initialState), - resolver = mock(), - activator = mock(), - parentNode = mock(), - transitionHandler = mock(), -) { +internal class TestRoutingStatePool(initialState: WorkingState? = null) : + RoutingStatePool( + timeCapsule = createTimeCapsule(initialState), + resolver = mock(), + activator = mock(), + parentNode = mock(), + transitionHandler = mock(), + ) { fun testEvent(event: Effect) { emitEvent(event) diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/operation/BackStackOperationHelper.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/operation/BackStackOperationHelper.kt index 408ba0b09..3e3db1946 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/operation/BackStackOperationHelper.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/operation/BackStackOperationHelper.kt @@ -3,7 +3,8 @@ package com.badoo.ribs.routing.state.feature.operation import com.badoo.ribs.core.helper.TestRouter import com.badoo.ribs.routing.Routing import com.badoo.ribs.routing.history.RoutingHistoryElement -import com.badoo.ribs.routing.history.RoutingHistoryElement.Activation.* +import com.badoo.ribs.routing.history.RoutingHistoryElement.Activation.ACTIVE +import com.badoo.ribs.routing.history.RoutingHistoryElement.Activation.INACTIVE import com.badoo.ribs.routing.source.backstack.Elements fun List.asBackStackElements( diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/operation/PopTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/operation/PopTest.kt index 2d8620845..f3c611e11 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/operation/PopTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/operation/PopTest.kt @@ -65,7 +65,7 @@ class PopTest { @Test fun `invoke remove last overlay when overlay on top`() { //last element with two overlays - val backStack = listOf>( + val backStack = listOf( RoutingHistoryElement( routing = Routing(C1 as Configuration) ), diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/operation/RemoveTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/operation/RemoveTest.kt index c8c586b3f..dfeb23338 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/operation/RemoveTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/routing/state/feature/operation/RemoveTest.kt @@ -19,40 +19,40 @@ class RemoveTest { private lateinit var remove: Remove - val elements: Elements = listOf>( + val elements: Elements = listOf( RoutingHistoryElement( - routing = Routing( + routing = Routing( identifier = Identifier(id = 10), configuration = C1 ) ), RoutingHistoryElement( - routing = Routing( + routing = Routing( identifier = Identifier(id = 20), configuration = C2 ), overlays = listOf( - Routing( + Routing( identifier = Identifier(id = 201), configuration = O1 ) ) ), RoutingHistoryElement( - routing = Routing( + routing = Routing( identifier = Identifier(id = 30), configuration = C3 ), overlays = listOf( - Routing( + Routing( identifier = Identifier(id = 301), configuration = O1 ), - Routing( + Routing( identifier = Identifier(id = 302), configuration = O2 ), - Routing( + Routing( identifier = Identifier(id = 303), configuration = O3 ) @@ -113,12 +113,14 @@ class RemoveTest { remove = Remove(Identifier(id = 302)) val result = remove.invoke(elements) - val expected = listOf(elements[0], elements[1], elements[2].copy( - overlays = listOf( - elements[2].overlays[0], - elements[2].overlays[2] + val expected = listOf( + elements[0], elements[1], elements[2].copy( + overlays = listOf( + elements[2].overlays[0], + elements[2].overlays[2] + ) ) - )) + ) assertThat(result).isEqualTo(expected) } diff --git a/libraries/rib-base/src/test/java/com/badoo/ribs/store/RetainedInstanceStoreTest.kt b/libraries/rib-base/src/test/java/com/badoo/ribs/store/RetainedInstanceStoreTest.kt index 43baff6ba..306ae361e 100644 --- a/libraries/rib-base/src/test/java/com/badoo/ribs/store/RetainedInstanceStoreTest.kt +++ b/libraries/rib-base/src/test/java/com/badoo/ribs/store/RetainedInstanceStoreTest.kt @@ -58,7 +58,8 @@ class RetainedInstanceStoreTest { val obj = Any() RetainedInstanceStore.get(identifier) { obj } - val isRetained = RetainedInstanceStore.isRetainedByOwner(Rib.Identifier(UUID.randomUUID()), obj) + val isRetained = + RetainedInstanceStore.isRetainedByOwner(Rib.Identifier(UUID.randomUUID()), obj) assertFalse(isRetained) } diff --git a/libraries/rib-debug-utils/src/main/java/com/badoo/ribs/core/plugin/utils/debug/DebugControlsHost.kt b/libraries/rib-debug-utils/src/main/java/com/badoo/ribs/core/plugin/utils/debug/DebugControlsHost.kt index 815ea8910..37bd9fcca 100644 --- a/libraries/rib-debug-utils/src/main/java/com/badoo/ribs/core/plugin/utils/debug/DebugControlsHost.kt +++ b/libraries/rib-debug-utils/src/main/java/com/badoo/ribs/core/plugin/utils/debug/DebugControlsHost.kt @@ -4,11 +4,11 @@ import android.view.View import android.view.ViewGroup import android.widget.Button import android.widget.Toast -import com.badoo.ribs.debugutils.R import com.badoo.ribs.core.Node import com.badoo.ribs.core.Rib import com.badoo.ribs.core.customisation.inflate import com.badoo.ribs.debug.TreePrinter +import com.badoo.ribs.debugutils.R class DebugControlsHost( viewGroupForChildren: (() -> ViewGroup), diff --git a/libraries/rib-debug-utils/src/main/java/com/badoo/ribs/debug/TreePrinter.kt b/libraries/rib-debug-utils/src/main/java/com/badoo/ribs/debug/TreePrinter.kt index fd8b06af7..901f364a7 100644 --- a/libraries/rib-debug-utils/src/main/java/com/badoo/ribs/debug/TreePrinter.kt +++ b/libraries/rib-debug-utils/src/main/java/com/badoo/ribs/debug/TreePrinter.kt @@ -6,7 +6,8 @@ import com.badoo.ribs.util.RIBs object TreePrinter { val FORMAT_SIMPLE: (Node<*>) -> String = { it.javaClass.simpleName } - val FORMAT_SIMPLE_INSTANCE: (Node<*>) -> String = { "${it.javaClass.simpleName} @${System.identityHashCode(it)}"} + val FORMAT_SIMPLE_INSTANCE: (Node<*>) -> String = + { "${it.javaClass.simpleName} @${System.identityHashCode(it)}" } private const val ACTIVE = "* " private const val ARM_RIGHT = "└── " diff --git a/libraries/rib-debug-utils/src/main/res/layout/debug_root.xml b/libraries/rib-debug-utils/src/main/res/layout/debug_root.xml index 550dd165e..d0903eb53 100644 --- a/libraries/rib-debug-utils/src/main/res/layout/debug_root.xml +++ b/libraries/rib-debug-utils/src/main/res/layout/debug_root.xml @@ -3,9 +3,9 @@ android:id="@+id/debug_switcher" android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="vertical" android:layout_gravity="top" - android:gravity="top"> + android:gravity="top" + android:orientation="vertical">