From 78c640ceca13218f2551fec852892a1e0fb7fb49 Mon Sep 17 00:00:00 2001 From: Konstantin Aksenov Date: Fri, 30 Jun 2023 14:14:52 +1000 Subject: [PATCH 01/11] feat(clicks): abstract clicks implimentation --- .../kotlin/io/github/kakaocup/kakao/Kakao.kt | 9 ++++++++ .../kakao/common/actions/BaseActions.kt | 22 ++++--------------- .../common/actions/clicks/ClickAction.kt | 8 +++++++ .../actions/clicks/EspressoDoubleClick.kt | 20 +++++++++++++++++ .../actions/clicks/EspressoLongClick.kt | 20 +++++++++++++++++ .../actions/clicks/EspressoSingleClick.kt | 20 +++++++++++++++++ 6 files changed, 81 insertions(+), 18 deletions(-) create mode 100644 kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/ClickAction.kt create mode 100644 kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoDoubleClick.kt create mode 100644 kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoLongClick.kt create mode 100644 kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoSingleClick.kt diff --git a/kakao/src/main/kotlin/io/github/kakaocup/kakao/Kakao.kt b/kakao/src/main/kotlin/io/github/kakaocup/kakao/Kakao.kt index 7b67b1b7c..0fc828cf0 100644 --- a/kakao/src/main/kotlin/io/github/kakaocup/kakao/Kakao.kt +++ b/kakao/src/main/kotlin/io/github/kakaocup/kakao/Kakao.kt @@ -7,6 +7,11 @@ import androidx.test.espresso.ViewInteraction import androidx.test.espresso.web.assertion.WebAssertion import androidx.test.espresso.web.model.Atom import androidx.test.espresso.web.sugar.Web +import io.github.kakaocup.kakao.common.actions.BaseActions +import io.github.kakaocup.kakao.common.actions.clicks.ClickAction +import io.github.kakaocup.kakao.common.actions.clicks.EspressoDoubleClick +import io.github.kakaocup.kakao.common.actions.clicks.EspressoLongClick +import io.github.kakaocup.kakao.common.actions.clicks.EspressoSingleClick import io.github.kakaocup.kakao.intercept.Interceptor object Kakao { @@ -50,4 +55,8 @@ object Kakao { dataInterceptor = null webInterceptor = null } + + var clickAction: ClickAction = EspressoSingleClick() + var doubleClickAction: ClickAction = EspressoDoubleClick() + var longClickAction: ClickAction = EspressoLongClick() } diff --git a/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/BaseActions.kt b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/BaseActions.kt index 3869e59f9..ce446a4dc 100644 --- a/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/BaseActions.kt +++ b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/BaseActions.kt @@ -12,6 +12,7 @@ import androidx.test.espresso.action.GeneralLocation import androidx.test.espresso.action.Press import androidx.test.espresso.action.Tap import androidx.test.espresso.action.ViewActions +import io.github.kakaocup.kakao.Kakao import io.github.kakaocup.kakao.common.builders.ViewBuilder import io.github.kakaocup.kakao.delegate.ViewInteractionDelegate import org.hamcrest.Matcher @@ -35,12 +36,7 @@ interface BaseActions { * @param location Location of view where it should be clicked (VISIBLE_CENTER by default) */ fun click(location: GeneralLocation = GeneralLocation.VISIBLE_CENTER) { - view.perform( - GeneralClickAction( - Tap.SINGLE, location, Press.FINGER, - InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY - ) - ) + Kakao.clickAction.click(view, location) } /** @@ -49,12 +45,7 @@ interface BaseActions { * @param location Location of view where it should be clicked (VISIBLE_CENTER by default) */ fun doubleClick(location: GeneralLocation = GeneralLocation.VISIBLE_CENTER) { - view.perform( - GeneralClickAction( - Tap.DOUBLE, location, Press.FINGER, - InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY - ) - ) + Kakao.doubleClickAction.click(view, location) } /** @@ -63,12 +54,7 @@ interface BaseActions { * @param location Location of view where it should be clicked (VISIBLE_CENTER by default) */ fun longClick(location: GeneralLocation = GeneralLocation.VISIBLE_CENTER) { - view.perform( - GeneralClickAction( - Tap.LONG, location, Press.FINGER, - InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY - ) - ) + Kakao.longClickAction.click(view, location) } /** diff --git a/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/ClickAction.kt b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/ClickAction.kt new file mode 100644 index 000000000..67ae8c80f --- /dev/null +++ b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/ClickAction.kt @@ -0,0 +1,8 @@ +package io.github.kakaocup.kakao.common.actions.clicks + +import androidx.test.espresso.action.GeneralLocation +import io.github.kakaocup.kakao.delegate.ViewInteractionDelegate + +interface ClickAction { + fun click(view: ViewInteractionDelegate, location: GeneralLocation) +} \ No newline at end of file diff --git a/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoDoubleClick.kt b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoDoubleClick.kt new file mode 100644 index 000000000..1c4bcac35 --- /dev/null +++ b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoDoubleClick.kt @@ -0,0 +1,20 @@ +package io.github.kakaocup.kakao.common.actions.clicks + +import android.view.InputDevice +import android.view.MotionEvent +import androidx.test.espresso.action.GeneralClickAction +import androidx.test.espresso.action.GeneralLocation +import androidx.test.espresso.action.Press +import androidx.test.espresso.action.Tap +import io.github.kakaocup.kakao.delegate.ViewInteractionDelegate + +class EspressoDoubleClick : ClickAction { + override fun click(view: ViewInteractionDelegate, location: GeneralLocation) { + view.perform( + GeneralClickAction( + Tap.DOUBLE, location, Press.FINGER, + InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY + ) + ) + } +} \ No newline at end of file diff --git a/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoLongClick.kt b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoLongClick.kt new file mode 100644 index 000000000..03f605aad --- /dev/null +++ b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoLongClick.kt @@ -0,0 +1,20 @@ +package io.github.kakaocup.kakao.common.actions.clicks + +import android.view.InputDevice +import android.view.MotionEvent +import androidx.test.espresso.action.GeneralClickAction +import androidx.test.espresso.action.GeneralLocation +import androidx.test.espresso.action.Press +import androidx.test.espresso.action.Tap +import io.github.kakaocup.kakao.delegate.ViewInteractionDelegate + +class EspressoLongClick : ClickAction { + override fun click(view: ViewInteractionDelegate, location: GeneralLocation) { + view.perform( + GeneralClickAction( + Tap.LONG, location, Press.FINGER, + InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY + ) + ) + } +} \ No newline at end of file diff --git a/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoSingleClick.kt b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoSingleClick.kt new file mode 100644 index 000000000..957c7d855 --- /dev/null +++ b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoSingleClick.kt @@ -0,0 +1,20 @@ +package io.github.kakaocup.kakao.common.actions.clicks + +import android.view.InputDevice +import android.view.MotionEvent +import androidx.test.espresso.action.GeneralClickAction +import androidx.test.espresso.action.GeneralLocation +import androidx.test.espresso.action.Press +import androidx.test.espresso.action.Tap +import io.github.kakaocup.kakao.delegate.ViewInteractionDelegate + +class EspressoSingleClick : ClickAction { + override fun click(view: ViewInteractionDelegate, location: GeneralLocation) { + view.perform( + GeneralClickAction( + Tap.SINGLE, location, Press.FINGER, + InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY + ) + ) + } +} \ No newline at end of file From d6f399fb66bfe59007a88e472a6bde255903215c Mon Sep 17 00:00:00 2001 From: Konstantin Aksenov Date: Fri, 30 Jun 2023 14:53:17 +1000 Subject: [PATCH 02/11] feat(clicks): add test rule --- kakao-ext-clicks/build.gradle.kts | 30 ++++++++++ kakao-ext-clicks/src/main/AndroidManifest.xml | 5 ++ .../kakao/ext/clicks/KakaoClicksTestRule.kt | 26 ++++++++ .../kakao/ext/clicks/KakaoDoubleClick.kt | 16 +++++ .../kakao/ext/clicks/KakaoLongClick.kt | 16 +++++ .../kakao/ext/clicks/KakaoSingleClick.kt | 16 +++++ .../kotlin/io/github/kakaocup/kakao/Kakao.kt | 3 +- .../kakao/common/actions/BaseActions.kt | 11 +--- .../common/actions/clicks/ClickAction.kt | 3 +- .../actions/clicks/EspressoDoubleClick.kt | 12 ++-- .../actions/clicks/EspressoLongClick.kt | 13 ++-- .../actions/clicks/EspressoSingleClick.kt | 13 ++-- sample/build.gradle.kts | 1 + .../kakaocup/sample/ButtonClickRuleTest.kt | 42 +++++++++++++ .../github/kakaocup/sample/ButtonClickTest.kt | 59 +++++++++++++++++++ .../sample/screen/ButtonClickScreen.kt | 9 +++ sample/src/main/AndroidManifest.xml | 4 ++ .../kakaocup/sample/ButtonClickActivity.kt | 23 ++++++++ .../res/layout/activity_button_clicks.xml | 12 ++++ settings.gradle.kts | 1 + 20 files changed, 279 insertions(+), 36 deletions(-) create mode 100644 kakao-ext-clicks/build.gradle.kts create mode 100644 kakao-ext-clicks/src/main/AndroidManifest.xml create mode 100644 kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoClicksTestRule.kt create mode 100644 kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoDoubleClick.kt create mode 100644 kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoLongClick.kt create mode 100644 kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoSingleClick.kt create mode 100644 sample/src/androidTest/kotlin/io/github/kakaocup/sample/ButtonClickRuleTest.kt create mode 100644 sample/src/androidTest/kotlin/io/github/kakaocup/sample/ButtonClickTest.kt create mode 100644 sample/src/androidTest/kotlin/io/github/kakaocup/sample/screen/ButtonClickScreen.kt create mode 100644 sample/src/main/kotlin/io/github/kakaocup/sample/ButtonClickActivity.kt create mode 100644 sample/src/main/res/layout/activity_button_clicks.xml diff --git a/kakao-ext-clicks/build.gradle.kts b/kakao-ext-clicks/build.gradle.kts new file mode 100644 index 000000000..713ba622e --- /dev/null +++ b/kakao-ext-clicks/build.gradle.kts @@ -0,0 +1,30 @@ +plugins { + id("com.android.library") + id("kotlin-android") + id("com.github.ben-manes.versions") version Versions.gradle_versions +} + +android { + compileSdk = 33 + defaultConfig { + minSdk = 14 + targetSdk = 33 + multiDexEnabled = true + } + + sourceSets { + getByName("main") { + java.srcDir("src/main/kotlin") + res.srcDir("src/main/res") + } + getByName("test") { + java.srcDir("src/test/kotlin") + } + } +} + +dependencies { + implementation(Libraries.kotlin_stdlib) + implementation(Libraries.espresso_core) + implementation(project(":kakao")) +} diff --git a/kakao-ext-clicks/src/main/AndroidManifest.xml b/kakao-ext-clicks/src/main/AndroidManifest.xml new file mode 100644 index 000000000..b4560fe5a --- /dev/null +++ b/kakao-ext-clicks/src/main/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoClicksTestRule.kt b/kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoClicksTestRule.kt new file mode 100644 index 000000000..ea357c6e3 --- /dev/null +++ b/kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoClicksTestRule.kt @@ -0,0 +1,26 @@ +package io.github.kakaocup.kakao.ext.clicks + +import io.github.kakaocup.kakao.Kakao +import org.junit.rules.TestRule +import org.junit.runner.Description +import org.junit.runners.model.Statement + +class KakaoClicksTestRule : TestRule { + override fun apply(base: Statement, description: Description) = object : Statement() { + override fun evaluate() { + val oldSingleClickAction = Kakao.singleClickAction + val oldDoubleClickAction = Kakao.doubleClickAction + val oldLongClickAction = Kakao.longClickAction + + Kakao.singleClickAction = KakaoSingleClick() + Kakao.doubleClickAction = KakaoDoubleClick() + Kakao.longClickAction = KakaoLongClick() + + base.evaluate() + + Kakao.singleClickAction = oldSingleClickAction + Kakao.doubleClickAction = oldDoubleClickAction + Kakao.longClickAction = oldLongClickAction + } + } +} \ No newline at end of file diff --git a/kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoDoubleClick.kt b/kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoDoubleClick.kt new file mode 100644 index 000000000..b595ac22f --- /dev/null +++ b/kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoDoubleClick.kt @@ -0,0 +1,16 @@ +package io.github.kakaocup.kakao.ext.clicks + +import android.view.InputDevice +import android.view.MotionEvent +import androidx.test.espresso.action.GeneralClickAction +import androidx.test.espresso.action.GeneralLocation +import androidx.test.espresso.action.Press +import androidx.test.espresso.action.Tap +import io.github.kakaocup.kakao.common.actions.clicks.ClickAction + +class KakaoDoubleClick : ClickAction { + override fun click(location: GeneralLocation) = GeneralClickAction( + Tap.DOUBLE, location, Press.FINGER, + InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY + ) +} \ No newline at end of file diff --git a/kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoLongClick.kt b/kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoLongClick.kt new file mode 100644 index 000000000..fe7d1b337 --- /dev/null +++ b/kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoLongClick.kt @@ -0,0 +1,16 @@ +package io.github.kakaocup.kakao.ext.clicks + +import android.view.InputDevice +import android.view.MotionEvent +import androidx.test.espresso.action.GeneralClickAction +import androidx.test.espresso.action.GeneralLocation +import androidx.test.espresso.action.Press +import androidx.test.espresso.action.Tap +import io.github.kakaocup.kakao.common.actions.clicks.ClickAction + +class KakaoLongClick : ClickAction { + override fun click(location: GeneralLocation) = GeneralClickAction( + Tap.LONG, location, Press.FINGER, + InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY + ) +} \ No newline at end of file diff --git a/kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoSingleClick.kt b/kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoSingleClick.kt new file mode 100644 index 000000000..863ea2d46 --- /dev/null +++ b/kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoSingleClick.kt @@ -0,0 +1,16 @@ +package io.github.kakaocup.kakao.ext.clicks + +import android.view.InputDevice +import android.view.MotionEvent +import androidx.test.espresso.action.GeneralClickAction +import androidx.test.espresso.action.GeneralLocation +import androidx.test.espresso.action.Press +import androidx.test.espresso.action.Tap +import io.github.kakaocup.kakao.common.actions.clicks.ClickAction + +class KakaoSingleClick : ClickAction { + override fun click(location: GeneralLocation) = GeneralClickAction( + Tap.SINGLE, location, Press.FINGER, + InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY + ) +} \ No newline at end of file diff --git a/kakao/src/main/kotlin/io/github/kakaocup/kakao/Kakao.kt b/kakao/src/main/kotlin/io/github/kakaocup/kakao/Kakao.kt index 0fc828cf0..9d045e5cf 100644 --- a/kakao/src/main/kotlin/io/github/kakaocup/kakao/Kakao.kt +++ b/kakao/src/main/kotlin/io/github/kakaocup/kakao/Kakao.kt @@ -7,7 +7,6 @@ import androidx.test.espresso.ViewInteraction import androidx.test.espresso.web.assertion.WebAssertion import androidx.test.espresso.web.model.Atom import androidx.test.espresso.web.sugar.Web -import io.github.kakaocup.kakao.common.actions.BaseActions import io.github.kakaocup.kakao.common.actions.clicks.ClickAction import io.github.kakaocup.kakao.common.actions.clicks.EspressoDoubleClick import io.github.kakaocup.kakao.common.actions.clicks.EspressoLongClick @@ -56,7 +55,7 @@ object Kakao { webInterceptor = null } - var clickAction: ClickAction = EspressoSingleClick() + var singleClickAction: ClickAction = EspressoSingleClick() var doubleClickAction: ClickAction = EspressoDoubleClick() var longClickAction: ClickAction = EspressoLongClick() } diff --git a/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/BaseActions.kt b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/BaseActions.kt index ce446a4dc..d8ae1d31e 100644 --- a/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/BaseActions.kt +++ b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/BaseActions.kt @@ -2,15 +2,10 @@ package io.github.kakaocup.kakao.common.actions -import android.view.InputDevice -import android.view.MotionEvent import android.view.View import androidx.test.espresso.FailureHandler import androidx.test.espresso.ViewAction -import androidx.test.espresso.action.GeneralClickAction import androidx.test.espresso.action.GeneralLocation -import androidx.test.espresso.action.Press -import androidx.test.espresso.action.Tap import androidx.test.espresso.action.ViewActions import io.github.kakaocup.kakao.Kakao import io.github.kakaocup.kakao.common.builders.ViewBuilder @@ -36,7 +31,7 @@ interface BaseActions { * @param location Location of view where it should be clicked (VISIBLE_CENTER by default) */ fun click(location: GeneralLocation = GeneralLocation.VISIBLE_CENTER) { - Kakao.clickAction.click(view, location) + view.perform(Kakao.singleClickAction.click(location)) } /** @@ -45,7 +40,7 @@ interface BaseActions { * @param location Location of view where it should be clicked (VISIBLE_CENTER by default) */ fun doubleClick(location: GeneralLocation = GeneralLocation.VISIBLE_CENTER) { - Kakao.doubleClickAction.click(view, location) + view.perform(Kakao.doubleClickAction.click(location)) } /** @@ -54,7 +49,7 @@ interface BaseActions { * @param location Location of view where it should be clicked (VISIBLE_CENTER by default) */ fun longClick(location: GeneralLocation = GeneralLocation.VISIBLE_CENTER) { - Kakao.longClickAction.click(view, location) + view.perform(Kakao.longClickAction.click(location)) } /** diff --git a/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/ClickAction.kt b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/ClickAction.kt index 67ae8c80f..799112da3 100644 --- a/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/ClickAction.kt +++ b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/ClickAction.kt @@ -1,8 +1,9 @@ package io.github.kakaocup.kakao.common.actions.clicks +import androidx.test.espresso.ViewAction import androidx.test.espresso.action.GeneralLocation import io.github.kakaocup.kakao.delegate.ViewInteractionDelegate interface ClickAction { - fun click(view: ViewInteractionDelegate, location: GeneralLocation) + fun click(location: GeneralLocation): ViewAction } \ No newline at end of file diff --git a/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoDoubleClick.kt b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoDoubleClick.kt index 1c4bcac35..fbbf0e9b2 100644 --- a/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoDoubleClick.kt +++ b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoDoubleClick.kt @@ -9,12 +9,8 @@ import androidx.test.espresso.action.Tap import io.github.kakaocup.kakao.delegate.ViewInteractionDelegate class EspressoDoubleClick : ClickAction { - override fun click(view: ViewInteractionDelegate, location: GeneralLocation) { - view.perform( - GeneralClickAction( - Tap.DOUBLE, location, Press.FINGER, - InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY - ) - ) - } + override fun click(location: GeneralLocation) = GeneralClickAction( + Tap.DOUBLE, location, Press.FINGER, + InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY + ) } \ No newline at end of file diff --git a/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoLongClick.kt b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoLongClick.kt index 03f605aad..67dd2e22c 100644 --- a/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoLongClick.kt +++ b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoLongClick.kt @@ -6,15 +6,10 @@ import androidx.test.espresso.action.GeneralClickAction import androidx.test.espresso.action.GeneralLocation import androidx.test.espresso.action.Press import androidx.test.espresso.action.Tap -import io.github.kakaocup.kakao.delegate.ViewInteractionDelegate class EspressoLongClick : ClickAction { - override fun click(view: ViewInteractionDelegate, location: GeneralLocation) { - view.perform( - GeneralClickAction( - Tap.LONG, location, Press.FINGER, - InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY - ) - ) - } + override fun click(location: GeneralLocation) = GeneralClickAction( + Tap.LONG, location, Press.FINGER, + InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY + ) } \ No newline at end of file diff --git a/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoSingleClick.kt b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoSingleClick.kt index 957c7d855..d1b16f08d 100644 --- a/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoSingleClick.kt +++ b/kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/EspressoSingleClick.kt @@ -2,6 +2,7 @@ package io.github.kakaocup.kakao.common.actions.clicks import android.view.InputDevice import android.view.MotionEvent +import androidx.test.espresso.ViewAction import androidx.test.espresso.action.GeneralClickAction import androidx.test.espresso.action.GeneralLocation import androidx.test.espresso.action.Press @@ -9,12 +10,8 @@ import androidx.test.espresso.action.Tap import io.github.kakaocup.kakao.delegate.ViewInteractionDelegate class EspressoSingleClick : ClickAction { - override fun click(view: ViewInteractionDelegate, location: GeneralLocation) { - view.perform( - GeneralClickAction( - Tap.SINGLE, location, Press.FINGER, - InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY - ) - ) - } + override fun click(location: GeneralLocation): ViewAction = GeneralClickAction( + Tap.SINGLE, location, Press.FINGER, + InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY + ) } \ No newline at end of file diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts index 7d3ec227c..8823cd849 100644 --- a/sample/build.gradle.kts +++ b/sample/build.gradle.kts @@ -42,6 +42,7 @@ dependencies { testImplementation(Libraries.junit) androidTestImplementation(project(":kakao")) + androidTestImplementation(project(":kakao-ext-clicks")) androidTestImplementation(Libraries.annotation) androidTestImplementation(Libraries.espresso_runner) diff --git a/sample/src/androidTest/kotlin/io/github/kakaocup/sample/ButtonClickRuleTest.kt b/sample/src/androidTest/kotlin/io/github/kakaocup/sample/ButtonClickRuleTest.kt new file mode 100644 index 000000000..372a7b581 --- /dev/null +++ b/sample/src/androidTest/kotlin/io/github/kakaocup/sample/ButtonClickRuleTest.kt @@ -0,0 +1,42 @@ +package io.github.kakaocup.sample + +import androidx.test.ext.junit.rules.ActivityScenarioRule +import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner +import io.github.kakaocup.kakao.Kakao +import io.github.kakaocup.kakao.ext.clicks.KakaoClicksTestRule +import io.github.kakaocup.kakao.ext.clicks.KakaoDoubleClick +import io.github.kakaocup.kakao.ext.clicks.KakaoLongClick +import io.github.kakaocup.kakao.ext.clicks.KakaoSingleClick +import io.github.kakaocup.kakao.screen.Screen +import io.github.kakaocup.sample.screen.ButtonClickScreen +import org.junit.Rule +import org.junit.Test +import org.junit.rules.RuleChain +import org.junit.rules.TestRule +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4ClassRunner::class) +class ButtonClickRuleTest { + @Rule + @JvmField + var chain: TestRule = RuleChain.outerRule(ActivityScenarioRule(ButtonClickActivity::class.java)) + .around(KakaoClicksTestRule()) + + @Test + fun testEspressoClickAction() { + Screen.onScreen { + Kakao { + assert(singleClickAction is KakaoSingleClick) + assert(doubleClickAction is KakaoDoubleClick) + assert(longClickAction is KakaoLongClick) + } + + button { + click() + hasText("Single Click") + longClick() + hasText("Long Click") + } + } + } +} diff --git a/sample/src/androidTest/kotlin/io/github/kakaocup/sample/ButtonClickTest.kt b/sample/src/androidTest/kotlin/io/github/kakaocup/sample/ButtonClickTest.kt new file mode 100644 index 000000000..6adf4dd7f --- /dev/null +++ b/sample/src/androidTest/kotlin/io/github/kakaocup/sample/ButtonClickTest.kt @@ -0,0 +1,59 @@ +package io.github.kakaocup.sample + +import androidx.test.ext.junit.rules.ActivityScenarioRule +import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner +import io.github.kakaocup.kakao.Kakao +import io.github.kakaocup.kakao.common.actions.clicks.EspressoDoubleClick +import io.github.kakaocup.kakao.common.actions.clicks.EspressoLongClick +import io.github.kakaocup.kakao.common.actions.clicks.EspressoSingleClick +import io.github.kakaocup.kakao.ext.clicks.KakaoDoubleClick +import io.github.kakaocup.kakao.ext.clicks.KakaoLongClick +import io.github.kakaocup.kakao.ext.clicks.KakaoSingleClick +import io.github.kakaocup.kakao.screen.Screen +import io.github.kakaocup.sample.screen.ButtonClickScreen +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4ClassRunner::class) +class ButtonClickTest { + @Rule + @JvmField + val rule = ActivityScenarioRule(ButtonClickActivity::class.java) + + @Test + fun testEspressoClickAction() { + Screen.onScreen { + Kakao { + singleClickAction = EspressoSingleClick() + doubleClickAction = EspressoDoubleClick() + longClickAction = EspressoLongClick() + } + + button { + click() + hasText("Single Click") + longClick() + hasText("Long Click") + } + } + } + + @Test + fun testKakaoClickAction() { + Screen.onScreen { + Kakao { + singleClickAction = KakaoSingleClick() + doubleClickAction = KakaoDoubleClick() + longClickAction = KakaoLongClick() + } + + button { + click() + hasText("Single Click") + longClick() + hasText("Long Click") + } + } + } +} diff --git a/sample/src/androidTest/kotlin/io/github/kakaocup/sample/screen/ButtonClickScreen.kt b/sample/src/androidTest/kotlin/io/github/kakaocup/sample/screen/ButtonClickScreen.kt new file mode 100644 index 000000000..ee7686b05 --- /dev/null +++ b/sample/src/androidTest/kotlin/io/github/kakaocup/sample/screen/ButtonClickScreen.kt @@ -0,0 +1,9 @@ +package io.github.kakaocup.sample.screen + +import io.github.kakaocup.kakao.screen.Screen +import io.github.kakaocup.kakao.text.KButton +import io.github.kakaocup.sample.R + +class ButtonClickScreen : Screen() { + val button = KButton { withId(R.id.button) } +} diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml index 44cb7bfdb..54b5bfdb1 100644 --- a/sample/src/main/AndroidManifest.xml +++ b/sample/src/main/AndroidManifest.xml @@ -105,6 +105,10 @@ android:name="io.github.kakaocup.sample.ImageViewActivity" android:label="Text activity" android:theme="@style/MaterialAppTheme" /> + diff --git a/sample/src/main/kotlin/io/github/kakaocup/sample/ButtonClickActivity.kt b/sample/src/main/kotlin/io/github/kakaocup/sample/ButtonClickActivity.kt new file mode 100644 index 000000000..97785f333 --- /dev/null +++ b/sample/src/main/kotlin/io/github/kakaocup/sample/ButtonClickActivity.kt @@ -0,0 +1,23 @@ +package io.github.kakaocup.sample + +import android.os.Bundle +import android.widget.Button +import android.widget.TextSwitcher +import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity + +class ButtonClickActivity : AppCompatActivity() { + private val button: Button by lazy { findViewById(R.id.button) } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_button_clicks) + button.setOnClickListener { + button.text = "Single Click" + } + + button.setOnLongClickListener { + button.text = "Long Click" + true + } + } +} diff --git a/sample/src/main/res/layout/activity_button_clicks.xml b/sample/src/main/res/layout/activity_button_clicks.xml new file mode 100644 index 000000000..8939d139d --- /dev/null +++ b/sample/src/main/res/layout/activity_button_clicks.xml @@ -0,0 +1,12 @@ + + + +