diff --git a/compose-support/build.gradle.kts b/compose-support/build.gradle.kts new file mode 100644 index 000000000..7321962c4 --- /dev/null +++ b/compose-support/build.gradle.kts @@ -0,0 +1,16 @@ +plugins { + id("convention.android-library") + id("convention.publication-android-lib") +} + +publish { + artifactId.set("kaspresso-compose-support") +} + +dependencies { + api(libs.kakaoCompose) + api(libs.composeUiTest) + + implementation(projects.kaspresso) + implementation(libs.kotlinStdlib) +} diff --git a/compose-support/src/main/AndroidManifest.xml b/compose-support/src/main/AndroidManifest.xml new file mode 100644 index 000000000..145e16dde --- /dev/null +++ b/compose-support/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/compose-support/src/main/java/com/kaspersky/components/composesupport/ComposeInterceptorsInjector.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/ComposeInterceptorsInjector.kt new file mode 100644 index 000000000..b77e880b5 --- /dev/null +++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/ComposeInterceptorsInjector.kt @@ -0,0 +1,27 @@ +package com.kaspersky.components.composesupport + +import com.kaspersky.components.composesupport.interceptors.behavior.SemanticsBehaviorInterceptor +import com.kaspersky.components.composesupport.interceptors.tolibrary.ComposeSemanticsInterceptor +import com.kaspersky.components.composesupport.interceptors.watcher.SemanticsWatcherInterceptor +import io.github.kakaocup.compose.KakaoCompose + +object ComposeInterceptorsInjector { + + fun injectKaspressoInKakaoCompose( + semanticsBehaviorInterceptors: List, + semanticsWatcherInterceptors: List + ) { + val composeInterceptor = + ComposeSemanticsInterceptor( + semanticsBehaviorInterceptors, + semanticsWatcherInterceptors + ) + + KakaoCompose.intercept { + onComposeInteraction { + onCheck(isOverride = true, interceptor = composeInterceptor::interceptCheck) + onPerform(isOverride = true, interceptor = composeInterceptor::interceptPerform) + } + } + } +} diff --git a/compose-support/src/main/java/com/kaspersky/components/composesupport/ComposeSupportKaspressoBuilder.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/ComposeSupportKaspressoBuilder.kt new file mode 100644 index 000000000..216503ef9 --- /dev/null +++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/ComposeSupportKaspressoBuilder.kt @@ -0,0 +1,55 @@ +package com.kaspersky.components.composesupport + +import com.kaspersky.components.composesupport.interceptors.behavior.SemanticsBehaviorInterceptor +import com.kaspersky.components.composesupport.interceptors.behavior.impl.autoscroll.AutoScrollSemanticsBehaviorInterceptor +import com.kaspersky.components.composesupport.interceptors.behavior.impl.elementloader.ElementLoaderSemanticsBehaviorInterceptor +import com.kaspersky.components.composesupport.interceptors.behavior.impl.failure.FailureLoggingSemanticsBehaviorInterceptor +import com.kaspersky.components.composesupport.interceptors.behavior.impl.flakysafety.FlakySafeSemanticsBehaviorInterceptor +import com.kaspersky.components.composesupport.interceptors.behavior.impl.systemsafety.SystemDialogSafetySemanticsBehaviorInterceptor +import com.kaspersky.components.composesupport.interceptors.watcher.SemanticsWatcherInterceptor +import com.kaspersky.components.composesupport.interceptors.watcher.impl.LoggingSemanticsWatcherInterceptor +import com.kaspersky.kaspresso.interceptors.behavior.impl.systemsafety.SystemDialogSafetyViewBehaviorInterceptor +import com.kaspersky.kaspresso.kaspresso.Kaspresso + +/** + * Kaspresso Builder that includes all appropriate interceptors to support Jetpack Compose. + */ +fun Kaspresso.Builder.Companion.withComposeSupport( + customize: Kaspresso.Builder.() -> Unit = {} +): Kaspresso.Builder = simple(customize).addComposeSupport() + +/** + * Kaspresso Builder that includes all appropriate interceptors to support Jetpack Compose. + */ +fun Kaspresso.Builder.addComposeSupport(): Kaspresso.Builder = apply { + val semanticsWatcherInterceptors: List = listOf( + LoggingSemanticsWatcherInterceptor(libLogger) + ) + + val semanticsBehaviorInterceptors: List = + if (isAndroidRuntime) { + listOf( + AutoScrollSemanticsBehaviorInterceptor(libLogger, autoScrollParams), + SystemDialogSafetySemanticsBehaviorInterceptor( + libLogger, + instrumentalDependencyProviderFactory.getInterceptorProvider(instrumentation), + adbServer + ), + ElementLoaderSemanticsBehaviorInterceptor(libLogger, elementLoaderParams), + FlakySafeSemanticsBehaviorInterceptor(flakySafetyParams, libLogger), + FailureLoggingSemanticsBehaviorInterceptor(libLogger) + ) + } else { + listOf( + AutoScrollSemanticsBehaviorInterceptor(libLogger, autoScrollParams), + ElementLoaderSemanticsBehaviorInterceptor(libLogger, elementLoaderParams), + FlakySafeSemanticsBehaviorInterceptor(flakySafetyParams, libLogger), + FailureLoggingSemanticsBehaviorInterceptor(libLogger) + ) + } + + ComposeInterceptorsInjector.injectKaspressoInKakaoCompose( + semanticsBehaviorInterceptors, + semanticsWatcherInterceptors + ) +} diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/autoscroll/SemanticsAutoScrollProviderImpl.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/autoscroll/SemanticsAutoScrollProviderImpl.kt similarity index 95% rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/autoscroll/SemanticsAutoScrollProviderImpl.kt rename to compose-support/src/main/java/com/kaspersky/components/composesupport/autoscroll/SemanticsAutoScrollProviderImpl.kt index a219088b0..0280681c9 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/autoscroll/SemanticsAutoScrollProviderImpl.kt +++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/autoscroll/SemanticsAutoScrollProviderImpl.kt @@ -1,6 +1,7 @@ -package com.kaspersky.kaspresso.autoscroll +package com.kaspersky.components.composesupport.autoscroll import androidx.compose.ui.test.performScrollTo +import com.kaspersky.kaspresso.autoscroll.AutoScrollProvider import com.kaspersky.kaspresso.internal.extensions.other.isAllowed import com.kaspersky.kaspresso.logger.UiTestLogger import com.kaspersky.kaspresso.params.AutoScrollParams diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/ComposeBehaviorInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/ComposeBehaviorInterceptor.kt similarity index 90% rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/ComposeBehaviorInterceptor.kt rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/ComposeBehaviorInterceptor.kt index 487d88ed2..128e2e521 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/ComposeBehaviorInterceptor.kt +++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/ComposeBehaviorInterceptor.kt @@ -1,4 +1,4 @@ -package com.kaspersky.kaspresso.interceptors.behaviorcompose +package com.kaspersky.components.composesupport.interceptors.behavior interface ComposeBehaviorInterceptor { diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/SemanticsBehaviorInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/SemanticsBehaviorInterceptor.kt similarity index 72% rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/SemanticsBehaviorInterceptor.kt rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/SemanticsBehaviorInterceptor.kt index d9fef53d3..157aa9838 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/SemanticsBehaviorInterceptor.kt +++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/SemanticsBehaviorInterceptor.kt @@ -1,4 +1,4 @@ -package com.kaspersky.kaspresso.interceptors.behaviorcompose +package com.kaspersky.components.composesupport.interceptors.behavior import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction import io.github.kakaocup.compose.intercept.operation.ComposeAction @@ -9,4 +9,4 @@ import io.github.kakaocup.compose.intercept.operation.ComposeAssertion * [ComposeInteraction.check] behavior. */ interface SemanticsBehaviorInterceptor : - ComposeBehaviorInterceptor + ComposeBehaviorInterceptor diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/autoscroll/AutoScrollSemanticsBehaviorInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/autoscroll/AutoScrollSemanticsBehaviorInterceptor.kt similarity index 85% rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/autoscroll/AutoScrollSemanticsBehaviorInterceptor.kt rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/autoscroll/AutoScrollSemanticsBehaviorInterceptor.kt index 4c5d0ca1a..99d4410aa 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/autoscroll/AutoScrollSemanticsBehaviorInterceptor.kt +++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/autoscroll/AutoScrollSemanticsBehaviorInterceptor.kt @@ -1,8 +1,8 @@ -package com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.autoscroll +package com.kaspersky.components.composesupport.interceptors.behavior.impl.autoscroll import com.kaspersky.kaspresso.autoscroll.AutoScrollProvider -import com.kaspersky.kaspresso.autoscroll.SemanticsAutoScrollProviderImpl -import com.kaspersky.kaspresso.interceptors.behaviorcompose.SemanticsBehaviorInterceptor +import com.kaspersky.components.composesupport.autoscroll.SemanticsAutoScrollProviderImpl +import com.kaspersky.components.composesupport.interceptors.behavior.SemanticsBehaviorInterceptor import com.kaspersky.kaspresso.logger.UiTestLogger import com.kaspersky.kaspresso.params.AutoScrollParams import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/elementloader/ElementLoaderSemanticsBehaviorInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/elementloader/ElementLoaderSemanticsBehaviorInterceptor.kt similarity index 90% rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/elementloader/ElementLoaderSemanticsBehaviorInterceptor.kt rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/elementloader/ElementLoaderSemanticsBehaviorInterceptor.kt index 6c7882708..b126c9cdb 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/elementloader/ElementLoaderSemanticsBehaviorInterceptor.kt +++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/elementloader/ElementLoaderSemanticsBehaviorInterceptor.kt @@ -1,8 +1,8 @@ -package com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.elementloader +package com.kaspersky.components.composesupport.interceptors.behavior.impl.elementloader import com.kaspersky.kaspresso.elementloader.ElementLoaderProvider import com.kaspersky.kaspresso.elementloader.ElementLoaderProviderImpl -import com.kaspersky.kaspresso.interceptors.behaviorcompose.SemanticsBehaviorInterceptor +import com.kaspersky.components.composesupport.interceptors.behavior.SemanticsBehaviorInterceptor import com.kaspersky.kaspresso.logger.UiTestLogger import com.kaspersky.kaspresso.params.ElementLoaderParams import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/failure/FailureLoggingSemanticsBehaviorInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/failure/FailureLoggingSemanticsBehaviorInterceptor.kt similarity index 91% rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/failure/FailureLoggingSemanticsBehaviorInterceptor.kt rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/failure/FailureLoggingSemanticsBehaviorInterceptor.kt index 4b88d1a67..7ce1c44d3 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/failure/FailureLoggingSemanticsBehaviorInterceptor.kt +++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/failure/FailureLoggingSemanticsBehaviorInterceptor.kt @@ -1,8 +1,8 @@ -package com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.failure +package com.kaspersky.components.composesupport.interceptors.behavior.impl.failure import com.kaspersky.kaspresso.failure.FailureLoggingProvider import com.kaspersky.kaspresso.failure.FailureLoggingProviderImpl -import com.kaspersky.kaspresso.interceptors.behaviorcompose.SemanticsBehaviorInterceptor +import com.kaspersky.components.composesupport.interceptors.behavior.SemanticsBehaviorInterceptor import com.kaspersky.kaspresso.logger.UiTestLogger import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction import io.github.kakaocup.compose.intercept.operation.ComposeAction diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/flakysafety/FlakySafeSemanticsBehaviorInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/flakysafety/FlakySafeSemanticsBehaviorInterceptor.kt similarity index 90% rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/flakysafety/FlakySafeSemanticsBehaviorInterceptor.kt rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/flakysafety/FlakySafeSemanticsBehaviorInterceptor.kt index 552cb2669..534ce44d8 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/flakysafety/FlakySafeSemanticsBehaviorInterceptor.kt +++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/flakysafety/FlakySafeSemanticsBehaviorInterceptor.kt @@ -1,8 +1,8 @@ -package com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.flakysafety +package com.kaspersky.components.composesupport.interceptors.behavior.impl.flakysafety import com.kaspersky.kaspresso.flakysafety.FlakySafetyProvider import com.kaspersky.kaspresso.flakysafety.FlakySafetyProviderSimpleImpl -import com.kaspersky.kaspresso.interceptors.behaviorcompose.SemanticsBehaviorInterceptor +import com.kaspersky.components.composesupport.interceptors.behavior.SemanticsBehaviorInterceptor import com.kaspersky.kaspresso.logger.UiTestLogger import com.kaspersky.kaspresso.params.FlakySafetyParams import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/systemsafety/SystemDialogSafetySemanticsBehaviorInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/systemsafety/SystemDialogSafetySemanticsBehaviorInterceptor.kt similarity index 91% rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/systemsafety/SystemDialogSafetySemanticsBehaviorInterceptor.kt rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/systemsafety/SystemDialogSafetySemanticsBehaviorInterceptor.kt index d95b1c7e3..13e4f5239 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/systemsafety/SystemDialogSafetySemanticsBehaviorInterceptor.kt +++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/systemsafety/SystemDialogSafetySemanticsBehaviorInterceptor.kt @@ -1,8 +1,8 @@ -package com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.systemsafety +package com.kaspersky.components.composesupport.interceptors.behavior.impl.systemsafety import com.kaspersky.kaspresso.device.server.AdbServer import com.kaspersky.kaspresso.instrumental.InstrumentalDependencyProvider -import com.kaspersky.kaspresso.interceptors.behaviorcompose.SemanticsBehaviorInterceptor +import com.kaspersky.components.composesupport.interceptors.behavior.SemanticsBehaviorInterceptor import com.kaspersky.kaspresso.logger.UiTestLogger import com.kaspersky.kaspresso.systemsafety.SystemDialogSafetyProvider import com.kaspersky.kaspresso.systemsafety.SystemDialogSafetyProviderImpl diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/compose/ComposeSemanticsInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/tolibrary/ComposeSemanticsInterceptor.kt similarity index 90% rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/compose/ComposeSemanticsInterceptor.kt rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/tolibrary/ComposeSemanticsInterceptor.kt index 2f71385c5..c0506a9ee 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/compose/ComposeSemanticsInterceptor.kt +++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/tolibrary/ComposeSemanticsInterceptor.kt @@ -1,8 +1,8 @@ -package com.kaspersky.kaspresso.interceptors.tolibrary.compose +package com.kaspersky.components.composesupport.interceptors.tolibrary -import com.kaspersky.kaspresso.interceptors.behaviorcompose.SemanticsBehaviorInterceptor +import com.kaspersky.components.composesupport.interceptors.behavior.SemanticsBehaviorInterceptor +import com.kaspersky.components.composesupport.interceptors.watcher.SemanticsWatcherInterceptor import com.kaspersky.kaspresso.interceptors.tolibrary.LibraryInterceptor -import com.kaspersky.kaspresso.interceptors.watcher.compose.SemanticsWatcherInterceptor import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction import io.github.kakaocup.compose.intercept.operation.ComposeAction import io.github.kakaocup.compose.intercept.operation.ComposeAssertion diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/watcher/compose/ComposeWatcherInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/watcher/ComposeWatcherInterceptor.kt similarity index 93% rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/watcher/compose/ComposeWatcherInterceptor.kt rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/watcher/ComposeWatcherInterceptor.kt index b79da6c08..84ce6cebd 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/watcher/compose/ComposeWatcherInterceptor.kt +++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/watcher/ComposeWatcherInterceptor.kt @@ -1,4 +1,4 @@ -package com.kaspersky.kaspresso.interceptors.watcher.compose +package com.kaspersky.components.composesupport.interceptors.watcher import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/watcher/compose/SemanticsWatcherInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/watcher/SemanticsWatcherInterceptor.kt similarity index 64% rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/watcher/compose/SemanticsWatcherInterceptor.kt rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/watcher/SemanticsWatcherInterceptor.kt index 2005a8c7e..7b7058728 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/watcher/compose/SemanticsWatcherInterceptor.kt +++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/watcher/SemanticsWatcherInterceptor.kt @@ -1,6 +1,5 @@ -package com.kaspersky.kaspresso.interceptors.watcher.compose +package com.kaspersky.components.composesupport.interceptors.watcher -import com.kaspersky.kaspresso.interceptors.watcher.kautomator.KautomatorWatcherInterceptor import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction import io.github.kakaocup.compose.intercept.operation.ComposeAction import io.github.kakaocup.compose.intercept.operation.ComposeAssertion @@ -10,4 +9,4 @@ import io.github.kakaocup.compose.intercept.operation.ComposeAssertion * [ComposeInteraction.check] behavior. */ interface SemanticsWatcherInterceptor : - KautomatorWatcherInterceptor + ComposeWatcherInterceptor diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/watcher/compose/impl/logging/LoggingSemanticsWatcherInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/watcher/impl/LoggingSemanticsWatcherInterceptor.kt similarity index 90% rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/watcher/compose/impl/logging/LoggingSemanticsWatcherInterceptor.kt rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/watcher/impl/LoggingSemanticsWatcherInterceptor.kt index 240586071..a69e21669 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/watcher/compose/impl/logging/LoggingSemanticsWatcherInterceptor.kt +++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/watcher/impl/LoggingSemanticsWatcherInterceptor.kt @@ -1,6 +1,6 @@ -package com.kaspersky.kaspresso.interceptors.watcher.compose.impl.logging +package com.kaspersky.components.composesupport.interceptors.watcher.impl -import com.kaspersky.kaspresso.interceptors.watcher.compose.SemanticsWatcherInterceptor +import com.kaspersky.components.composesupport.interceptors.watcher.SemanticsWatcherInterceptor import com.kaspersky.kaspresso.logger.UiTestLogger import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction import io.github.kakaocup.compose.intercept.operation.ComposeAction diff --git a/kaspresso/build.gradle.kts b/kaspresso/build.gradle.kts index 52a50fdc1..b26c71335 100644 --- a/kaspresso/build.gradle.kts +++ b/kaspresso/build.gradle.kts @@ -10,12 +10,10 @@ publish { dependencies { api(projects.kautomator) api(libs.kakao) - api(libs.kakaoCompose) api(libs.bundles.espresso) api(libs.uiAutomator) api(libs.androidXCore) api(libs.androidXTestRules) - api(libs.composeUiTest) implementation(libs.kotlinStdlib) implementation(libs.gson) diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/compose/pack/ActionsOnElementsPack.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/compose/pack/ActionsOnElementsPack.kt index 36ecab2b3..d464a4eee 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/compose/pack/ActionsOnElementsPack.kt +++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/compose/pack/ActionsOnElementsPack.kt @@ -14,10 +14,6 @@ import com.kaspersky.components.kautomator.intercept.operation.UiObjectAction import com.kaspersky.components.kautomator.intercept.operation.UiObjectAssertion import com.kaspersky.kaspresso.compose.pack.branch.ComplexComposeBranch import com.kaspersky.kaspresso.compose.pack.branch.ComplexComposeBranchBuilder -import io.github.kakaocup.compose.intercept.delegate.ComposeInterceptable -import io.github.kakaocup.compose.node.action.NodeActions -import io.github.kakaocup.compose.node.action.TextActions -import io.github.kakaocup.compose.node.assertion.NodeAssertions /** * The builder class for parameters of [com.kaspersky.kaspresso.compose.ComposeProvider.compose] method. @@ -54,20 +50,6 @@ class ActionsOnElementsPack { .also { complexComposeBranchBuilders += it } } - /** - * Adds the [element] of type [Type] and the [action] to [complexComposeBranchBuilders] and [action] for future composing - * where [Type] is bounding by UiBaseView (Kautomator) - * - * @param element the interacted view. - * @param action actions or assertions on the interacted view. - */ - fun or(element: Type, action: Type.() -> Unit): ComplexComposeBranchBuilder - where Type : NodeActions, Type : NodeAssertions, - Type : TextActions, Type : ComposeInterceptable { - return ComplexComposeBranchBuilder(element, { action.invoke(element) }) - .also { complexComposeBranchBuilders += it } - } - /** * @return the built parameters for [com.kaspersky.kaspresso.compose.ComposeProvider.compose] method. */ diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/flakysafety/scalpel/FlakySafeInterceptorScalpel.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/flakysafety/scalpel/FlakySafeInterceptorScalpel.kt index 32d7f2d2a..9d2c1d4a1 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/flakysafety/scalpel/FlakySafeInterceptorScalpel.kt +++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/flakysafety/scalpel/FlakySafeInterceptorScalpel.kt @@ -6,14 +6,11 @@ import com.kaspersky.kaspresso.interceptors.behavior.WebBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.behavior.impl.flakysafety.FlakySafeDataBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.behavior.impl.flakysafety.FlakySafeViewBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.behavior.impl.flakysafety.FlakySafeWebBehaviorInterceptor -import com.kaspersky.kaspresso.interceptors.behaviorcompose.SemanticsBehaviorInterceptor -import com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.flakysafety.FlakySafeSemanticsBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.behaviorkautomator.DeviceBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.behaviorkautomator.ObjectBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.behaviorkautomator.impl.flakysafety.FlakySafeDeviceBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.behaviorkautomator.impl.flakysafety.FlakySafeObjectBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.tolibrary.LibraryInterceptorsInjector.injectKaspressoInKakao -import com.kaspersky.kaspresso.interceptors.tolibrary.LibraryInterceptorsInjector.injectKaspressoInKakaoCompose import com.kaspersky.kaspresso.interceptors.tolibrary.LibraryInterceptorsInjector.injectKaspressoInKautomator import com.kaspersky.kaspresso.kaspresso.Kaspresso @@ -33,7 +30,6 @@ internal class FlakySafeInterceptorScalpel( actionToTakeScalp = { scalpKakaoInterceptors() scalpKautomatorInterceptors() - scalpComposeInterceptors() } ) } @@ -43,8 +39,7 @@ internal class FlakySafeInterceptorScalpel( kaspresso.dataBehaviorInterceptors.filterIsInstance().isNotEmpty() || kaspresso.webBehaviorInterceptors.filterIsInstance().isNotEmpty() || kaspresso.objectBehaviorInterceptors.filterIsInstance().isNotEmpty() || - kaspresso.deviceBehaviorInterceptors.filterIsInstance().isNotEmpty() || - kaspresso.semanticsBehaviorInterceptors.filterIsInstance().isNotEmpty() + kaspresso.deviceBehaviorInterceptors.filterIsInstance().isNotEmpty() private fun scalpKakaoInterceptors() { val scalpedViewBehaviorInterceptors: List = @@ -89,17 +84,6 @@ internal class FlakySafeInterceptorScalpel( ) } - private fun scalpComposeInterceptors() { - val scalpedSemanticsBehaviorInterceptors: List = - kaspresso.semanticsBehaviorInterceptors.filter { - it !is FlakySafeSemanticsBehaviorInterceptor - } - injectKaspressoInKakaoCompose( - scalpedSemanticsBehaviorInterceptors, - kaspresso.semanticsWatcherInterceptors - ) - } - fun restoreScalpToLibs() { scalpelSwitcher.attemptRestoreScalp { injectKaspressoInKakao( @@ -118,11 +102,6 @@ internal class FlakySafeInterceptorScalpel( kaspresso.objectWatcherInterceptors, kaspresso.deviceWatcherInterceptors ) - - injectKaspressoInKakaoCompose( - kaspresso.semanticsBehaviorInterceptors, - kaspresso.semanticsWatcherInterceptors - ) } } } diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/instrumental/InstrumentalDependencyProviderFactory.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/instrumental/InstrumentalDependencyProviderFactory.kt index 1cfcfb46f..dfba84a15 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/instrumental/InstrumentalDependencyProviderFactory.kt +++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/instrumental/InstrumentalDependencyProviderFactory.kt @@ -2,7 +2,7 @@ package com.kaspersky.kaspresso.instrumental import android.app.Instrumentation -internal class InstrumentalDependencyProviderFactory { +class InstrumentalDependencyProviderFactory { inline fun getComponentProvider(instrumentation: Instrumentation): InstrumentalDependencyProvider = InstrumentalDependencyProviderImpl(InstrumentalUsage.ComponentLocation(T::class.java.name), instrumentation) diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/instrumental/InstrumentalDependencyProviderImpl.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/instrumental/InstrumentalDependencyProviderImpl.kt index edee401ea..51dd4f851 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/instrumental/InstrumentalDependencyProviderImpl.kt +++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/instrumental/InstrumentalDependencyProviderImpl.kt @@ -9,7 +9,7 @@ import com.kaspersky.components.kautomator.common.Environment import com.kaspersky.components.kautomator.common.environment import com.kaspersky.kaspresso.instrumental.exception.NotSupportedInstrumentalTestException -internal class InstrumentalDependencyProviderImpl( +class InstrumentalDependencyProviderImpl( private val location: InstrumentalUsage, private val instrumentation: Instrumentation ) : InstrumentalDependencyProvider { @@ -37,7 +37,7 @@ internal class InstrumentalDependencyProviderImpl( else throw NotSupportedInstrumentalTestException(location, "UiAutomation") } -internal sealed class InstrumentalUsage { +sealed class InstrumentalUsage { data class ComponentLocation(val componentName: String) : InstrumentalUsage() data class InterceptorLocation(val interceptorName: String) : InstrumentalUsage() object TestLocation : InstrumentalUsage() diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/LibraryInterceptor.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/LibraryInterceptor.kt index 7e97f9d5c..5070170a6 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/LibraryInterceptor.kt +++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/LibraryInterceptor.kt @@ -3,7 +3,7 @@ package com.kaspersky.kaspresso.interceptors.tolibrary /** * The base class of libraries interceptors (Kakao/UiAutomator/Kakao-Compose) for Kaspresso's implementations */ -internal interface LibraryInterceptor { +interface LibraryInterceptor { fun interceptCheck(interaction: Interaction, assertion: Assertion) diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/LibraryInterceptorsInjector.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/LibraryInterceptorsInjector.kt index 33131737e..993dcfdb7 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/LibraryInterceptorsInjector.kt +++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/LibraryInterceptorsInjector.kt @@ -5,23 +5,19 @@ import com.kaspersky.components.kautomator.KautomatorConfigurator import com.kaspersky.kaspresso.interceptors.behavior.DataBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.behavior.ViewBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.behavior.WebBehaviorInterceptor -import com.kaspersky.kaspresso.interceptors.behaviorcompose.SemanticsBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.behaviorkautomator.DeviceBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.behaviorkautomator.ObjectBehaviorInterceptor -import com.kaspersky.kaspresso.interceptors.tolibrary.compose.ComposeSemanticsInterceptor import com.kaspersky.kaspresso.interceptors.tolibrary.kakao.KakaoDataInterceptor import com.kaspersky.kaspresso.interceptors.tolibrary.kakao.KakaoViewInterceptor import com.kaspersky.kaspresso.interceptors.tolibrary.kakao.KakaoWebInterceptor import com.kaspersky.kaspresso.interceptors.tolibrary.kautomator.KautomatorDeviceInterceptor import com.kaspersky.kaspresso.interceptors.tolibrary.kautomator.KautomatorObjectInterceptor -import com.kaspersky.kaspresso.interceptors.watcher.compose.SemanticsWatcherInterceptor import com.kaspersky.kaspresso.interceptors.watcher.kautomator.DeviceWatcherInterceptor import com.kaspersky.kaspresso.interceptors.watcher.kautomator.ObjectWatcherInterceptor import com.kaspersky.kaspresso.interceptors.watcher.view.AtomWatcherInterceptor import com.kaspersky.kaspresso.interceptors.watcher.view.ViewActionWatcherInterceptor import com.kaspersky.kaspresso.interceptors.watcher.view.ViewAssertionWatcherInterceptor import com.kaspersky.kaspresso.interceptors.watcher.view.WebAssertionWatcherInterceptor -import io.github.kakaocup.compose.KakaoCompose internal object LibraryInterceptorsInjector { @@ -96,22 +92,4 @@ internal object LibraryInterceptorsInjector { } } } - - fun injectKaspressoInKakaoCompose( - semanticsBehaviorInterceptors: List, - semanticsWatcherInterceptors: List - ) { - val composeInterceptor = - ComposeSemanticsInterceptor( - semanticsBehaviorInterceptors, - semanticsWatcherInterceptors - ) - - KakaoCompose.intercept { - onComposeInteraction { - onCheck(isOverride = true, interceptor = composeInterceptor::interceptCheck) - onPerform(isOverride = true, interceptor = composeInterceptor::interceptPerform) - } - } - } } diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/internal/extensions/other/ThrowableExt.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/internal/extensions/other/ThrowableExt.kt index 2776f03a7..9fe723984 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/internal/extensions/other/ThrowableExt.kt +++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/internal/extensions/other/ThrowableExt.kt @@ -43,7 +43,7 @@ internal fun List.throwAll() { /** * @return true if the given throwable is contained by [allowed] set, false otherwise. */ -internal fun T.isAllowed(allowed: Set>): Boolean { +fun T.isAllowed(allowed: Set>): Boolean { return when (this) { is ExtCompositeException -> { exceptions.find { e: Throwable -> diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/kaspresso/Kaspresso.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/kaspresso/Kaspresso.kt index 8e0b5be13..420323249 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/kaspresso/Kaspresso.kt +++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/kaspresso/Kaspresso.kt @@ -80,12 +80,6 @@ import com.kaspersky.kaspresso.interceptors.behavior.impl.flakysafety.FlakySafeW import com.kaspersky.kaspresso.interceptors.behavior.impl.systemsafety.SystemDialogSafetyDataBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.behavior.impl.systemsafety.SystemDialogSafetyViewBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.behavior.impl.systemsafety.SystemDialogSafetyWebBehaviorInterceptor -import com.kaspersky.kaspresso.interceptors.behaviorcompose.SemanticsBehaviorInterceptor -import com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.autoscroll.AutoScrollSemanticsBehaviorInterceptor -import com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.elementloader.ElementLoaderSemanticsBehaviorInterceptor -import com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.failure.FailureLoggingSemanticsBehaviorInterceptor -import com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.flakysafety.FlakySafeSemanticsBehaviorInterceptor -import com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.systemsafety.SystemDialogSafetySemanticsBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.behaviorkautomator.DeviceBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.behaviorkautomator.ObjectBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.behaviorkautomator.impl.autoscroll.AutoScrollObjectBehaviorInterceptor @@ -97,12 +91,9 @@ import com.kaspersky.kaspresso.interceptors.behaviorkautomator.impl.flakysafety. import com.kaspersky.kaspresso.interceptors.behaviorkautomator.impl.systemsafety.SystemDialogSafetyDeviceBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.behaviorkautomator.impl.systemsafety.SystemDialogSafetyObjectBehaviorInterceptor import com.kaspersky.kaspresso.interceptors.tolibrary.LibraryInterceptorsInjector.injectKaspressoInKakao -import com.kaspersky.kaspresso.interceptors.tolibrary.LibraryInterceptorsInjector.injectKaspressoInKakaoCompose import com.kaspersky.kaspresso.interceptors.tolibrary.LibraryInterceptorsInjector.injectKaspressoInKautomator import com.kaspersky.kaspresso.interceptors.tolibrary.kautomator.KautomatorDeviceInterceptor import com.kaspersky.kaspresso.interceptors.tolibrary.kautomator.KautomatorObjectInterceptor -import com.kaspersky.kaspresso.interceptors.watcher.compose.SemanticsWatcherInterceptor -import com.kaspersky.kaspresso.interceptors.watcher.compose.impl.logging.LoggingSemanticsWatcherInterceptor import com.kaspersky.kaspresso.interceptors.watcher.kautomator.DeviceWatcherInterceptor import com.kaspersky.kaspresso.interceptors.watcher.kautomator.ObjectWatcherInterceptor import com.kaspersky.kaspresso.interceptors.watcher.kautomator.impl.logging.LoggingDeviceWatcherInterceptor @@ -136,7 +127,6 @@ import com.kaspersky.kaspresso.params.StepParams import com.kaspersky.kaspresso.params.ScreenshotParams import com.kaspersky.kaspresso.params.VideoParams import com.kaspersky.kaspresso.testcases.core.testcontext.BaseTestContext -import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction /** * The storage of all Kaspresso preferences and entities, such as [AdbServer], [Device] and different interceptors. @@ -154,13 +144,11 @@ data class Kaspresso( internal val webAssertionWatcherInterceptors: List, internal val objectWatcherInterceptors: List, internal val deviceWatcherInterceptors: List, - internal val semanticsWatcherInterceptors: List, internal val viewBehaviorInterceptors: List, internal val dataBehaviorInterceptors: List, internal val webBehaviorInterceptors: List, internal val objectBehaviorInterceptors: List, internal val deviceBehaviorInterceptors: List, - internal val semanticsBehaviorInterceptors: List, internal val stepWatcherInterceptors: List, internal val testRunWatcherInterceptors: List ) { @@ -344,7 +332,7 @@ data class Kaspresso( */ val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation() - private val instrumentalDependencyProviderFactory: InstrumentalDependencyProviderFactory = InstrumentalDependencyProviderFactory() + val instrumentalDependencyProviderFactory: InstrumentalDependencyProviderFactory = InstrumentalDependencyProviderFactory() /** * Holds an environment state of a test. @@ -566,14 +554,6 @@ data class Kaspresso( */ lateinit var deviceWatcherInterceptors: MutableList - /** - * Holds the list of [SemanticsWatcherInterceptor]s. - * If it was not specified, Kaspresso will use no [SemanticsWatcherInterceptor]s. - * These interceptors are called by [ComposeSemanticsInterceptor] - * before actual [ComposeInteraction.check] and [ComposeInteraction.perform] call. - */ - lateinit var semanticsWatcherInterceptors: MutableList - /** * Holds the list of [ViewBehaviorInterceptor]s. * If it was not specified, Kaspresso will use no [ViewBehaviorInterceptor]s. @@ -636,18 +616,6 @@ data class Kaspresso( */ lateinit var deviceBehaviorInterceptors: MutableList - /** - * Holds the list of [SemanticsBehaviorInterceptor]s. - * If it was not specified, Kaspresso will use no [SemanticsBehaviorInterceptor]s. - * These interceptors are called by [ComposeSemanticsInterceptor] - * before actual [ComposeInteraction.check] and [ComposeInteraction.perform] call. - * Note that the order of [SemanticsBehaviorInterceptor]s in this list is significant: the first item wil be - * at the lowest level of intercepting chain, and the last item will be at the highest level. - * For example: the first item actually wraps the [ComposeInteraction.check] or [ComposeInteraction.perform] - * call, the second item wraps the first item, and so on. - */ - lateinit var semanticsBehaviorInterceptors: MutableList - /** * Holds the list of [StepWatcherInterceptor]s. * If it was not specified, Kaspresso will use no [StepWatcherInterceptor]s. @@ -856,10 +824,6 @@ data class Kaspresso( LoggingDeviceWatcherInterceptor(libLogger) ) - if (!::semanticsWatcherInterceptors.isInitialized) semanticsWatcherInterceptors = mutableListOf( - LoggingSemanticsWatcherInterceptor(libLogger) - ) - if (!::viewBehaviorInterceptors.isInitialized) viewBehaviorInterceptors = if (isAndroidRuntime) mutableListOf( AutoScrollViewBehaviorInterceptor(autoScrollParams, libLogger), @@ -932,28 +896,6 @@ data class Kaspresso( FailureLoggingDeviceBehaviorInterceptor(libLogger) ) - if (!::semanticsBehaviorInterceptors.isInitialized) semanticsBehaviorInterceptors = - if (isAndroidRuntime) { - mutableListOf( - AutoScrollSemanticsBehaviorInterceptor(libLogger, autoScrollParams), - SystemDialogSafetySemanticsBehaviorInterceptor( - libLogger, - instrumentalDependencyProviderFactory.getInterceptorProvider(instrumentation), - adbServer - ), - ElementLoaderSemanticsBehaviorInterceptor(libLogger, elementLoaderParams), - FlakySafeSemanticsBehaviorInterceptor(flakySafetyParams, libLogger), - FailureLoggingSemanticsBehaviorInterceptor(libLogger) - ) - } else { - mutableListOf( - AutoScrollSemanticsBehaviorInterceptor(libLogger, autoScrollParams), - ElementLoaderSemanticsBehaviorInterceptor(libLogger, elementLoaderParams), - FlakySafeSemanticsBehaviorInterceptor(flakySafetyParams, libLogger), - FailureLoggingSemanticsBehaviorInterceptor(libLogger) - ) - } - if (!::stepWatcherInterceptors.isInitialized) stepWatcherInterceptors = mutableListOf( LoggingStepWatcherInterceptor(libLogger) ) @@ -1020,8 +962,6 @@ data class Kaspresso( objectWatcherInterceptors = objectWatcherInterceptors, deviceWatcherInterceptors = deviceWatcherInterceptors, - semanticsWatcherInterceptors = semanticsWatcherInterceptors, - viewBehaviorInterceptors = viewBehaviorInterceptors, dataBehaviorInterceptors = dataBehaviorInterceptors, webBehaviorInterceptors = webBehaviorInterceptors, @@ -1029,8 +969,6 @@ data class Kaspresso( objectBehaviorInterceptors = objectBehaviorInterceptors, deviceBehaviorInterceptors = deviceBehaviorInterceptors, - semanticsBehaviorInterceptors = semanticsBehaviorInterceptors, - stepWatcherInterceptors = stepWatcherInterceptors, testRunWatcherInterceptors = testRunWatcherInterceptors ) @@ -1055,11 +993,6 @@ data class Kaspresso( kaspresso.deviceWatcherInterceptors ) - injectKaspressoInKakaoCompose( - kaspresso.semanticsBehaviorInterceptors, - kaspresso.semanticsWatcherInterceptors - ) - failureHandler?.let { Espresso.setFailureHandler(it) } return kaspresso diff --git a/samples/kaspresso-sample/build.gradle.kts b/samples/kaspresso-sample/build.gradle.kts index 2150996a8..9b9054982 100644 --- a/samples/kaspresso-sample/build.gradle.kts +++ b/samples/kaspresso-sample/build.gradle.kts @@ -53,6 +53,7 @@ dependencies { androidTestImplementation(libs.junit) androidTestImplementation(projects.kaspresso) + androidTestImplementation(projects.composeSupport) androidTestImplementation(libs.androidXTestRunner) androidTestImplementation(libs.androidXTestRules) androidTestImplementation(libs.androidXTestExtJunitKtx) @@ -61,6 +62,7 @@ dependencies { testImplementation(libs.junit) testImplementation(projects.kaspresso) + testImplementation(projects.composeSupport) testImplementation(libs.androidXTestRunner) testImplementation(libs.androidXTestRules) testImplementation(libs.androidXTestExtJunitKtx) diff --git a/samples/kaspresso-sample/src/sharedTest/kotlin/com/kaspersky/kaspressample/jetpack_compose_tests/ComposeSimpleFlakyTest.kt b/samples/kaspresso-sample/src/sharedTest/kotlin/com/kaspersky/kaspressample/jetpack_compose_tests/ComposeSimpleFlakyTest.kt index 7589abe00..d857407f4 100644 --- a/samples/kaspresso-sample/src/sharedTest/kotlin/com/kaspersky/kaspressample/jetpack_compose_tests/ComposeSimpleFlakyTest.kt +++ b/samples/kaspresso-sample/src/sharedTest/kotlin/com/kaspersky/kaspressample/jetpack_compose_tests/ComposeSimpleFlakyTest.kt @@ -2,9 +2,11 @@ package com.kaspersky.kaspressample.jetpack_compose_tests import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.kaspersky.components.composesupport.withComposeSupport import com.kaspersky.kaspressample.jetpackcompose.JetpackComposeActivity import com.kaspersky.kaspressample.jetpack_compose_screen.ComposeMainScreen import com.kaspersky.kaspressample.jetpack_compose_screen.ComposeSimpleFlakyScreen +import com.kaspersky.kaspresso.kaspresso.Kaspresso import com.kaspersky.kaspresso.testcases.api.testcase.TestCase import io.github.kakaocup.compose.node.element.ComposeScreen.Companion.onComposeScreen import org.junit.Rule @@ -12,7 +14,9 @@ import org.junit.Test import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) -class ComposeSimpleFlakyTest : TestCase() { +class ComposeSimpleFlakyTest : TestCase( + kaspressoBuilder = Kaspresso.Builder.withComposeSupport() +) { @get:Rule val composeTestRule = createAndroidComposeRule() diff --git a/samples/kaspresso-sample/src/sharedTest/kotlin/com/kaspersky/kaspressample/jetpack_compose_tests/JetpackComposeSimpleKaspressoComposeTest.kt b/samples/kaspresso-sample/src/sharedTest/kotlin/com/kaspersky/kaspressample/jetpack_compose_tests/JetpackComposeSimpleKaspressoComposeTest.kt deleted file mode 100644 index 777865670..000000000 --- a/samples/kaspresso-sample/src/sharedTest/kotlin/com/kaspersky/kaspressample/jetpack_compose_tests/JetpackComposeSimpleKaspressoComposeTest.kt +++ /dev/null @@ -1,78 +0,0 @@ -package com.kaspersky.kaspressample.jetpack_compose_tests - -import androidx.compose.ui.test.junit4.createAndroidComposeRule -import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.kaspersky.kaspressample.jetpackcompose.JetpackComposeActivity -import com.kaspersky.kaspressample.jetpack_compose_screen.ComposeMainScreen -import com.kaspersky.kaspressample.jetpack_compose_screen.ComposeSimpleFlakyScreen -import com.kaspersky.kaspresso.testcases.api.testcase.TestCase -import io.github.kakaocup.compose.node.element.ComposeScreen.Companion.onComposeScreen -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith - -@RunWith(AndroidJUnit4::class) -class JetpackComposeSimpleKaspressoComposeTest : TestCase() { - - @get:Rule - val composeTestRule = createAndroidComposeRule() - - private val simpleFlakyScreen = ComposeSimpleFlakyScreen(composeTestRule) - - @Test - fun test() = run { - step("Open Flaky screen") { - onComposeScreen(composeTestRule) { - simpleFlakyButton { - performClick() - } - } - } - - step("Click on the First button") { - simpleFlakyScreen { - compose { - or(firstButton) { - assertIsDisplayed() - } thenContinue { - performClick() - } - or(secondButton) { - assertIsDisplayed() - } thenContinue { - performClick() - } - } - } - } - - step("Click on the Second button") { - simpleFlakyScreen { - compose { - or(editText) { - assertIsDisplayed() - } thenContinue { - performClick() - } - or(secondButton) { - assertIsDisplayed() - } thenContinue { - performClick() - } - } - } - } - - step("Interaction with EditText") { - simpleFlakyScreen { - editText { - assertIsDisplayed() - assertTextContains("Some text") - performTextClearance() - performTextInput("New text") - assertTextContains("New text") - } - } - } - } -} diff --git a/settings.gradle.kts b/settings.gradle.kts index d5ef4d57d..beafad163 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -32,6 +32,7 @@ include( ":kaspresso", ":kautomator", ":allure-support", + ":compose-support", ":samples:adbserver-sample", ":samples:kaspresso-sample",