-
-
Notifications
You must be signed in to change notification settings - Fork 28
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
VisibleCenterGlobalCoordinatesProvider (#84)
* ClickAction now accepts CoordinatesProvider add VisibleCenterGlobalCoordinatesProvider for special cases with translation animations involved * add test to demonstrate transition animation click problem and VisibleCenterGlobalCoordinatesProvider usability add tests that shows VisibleCenterGlobalCoordinatesProvider is also ok for general usage * refactor RelativeCoordinatesProvider, use assertThrows * trying to make AnimatedButtonClickTest fails more reproducible * remove debug sleep * ignore assertThrows tests in AnimatedButtonClickTest
- Loading branch information
Showing
18 changed files
with
223 additions
and
37 deletions.
There are no files selected for viewing
4 changes: 2 additions & 2 deletions
4
kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoDoubleClick.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4 changes: 2 additions & 2 deletions
4
kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoLongClick.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
6 changes: 3 additions & 3 deletions
6
kakao-ext-clicks/src/main/kotlin/io/github/kakaocup/kakao/ext/clicks/KakaoSingleClick.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
14 changes: 14 additions & 0 deletions
14
...ain/kotlin/io/github/kakaocup/kakao/ext/clicks/coordinates/RelativeCoordinatesProvider.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package io.github.kakaocup.kakao.ext.clicks.coordinates | ||
|
||
import android.view.View | ||
import androidx.test.espresso.action.CoordinatesProvider | ||
|
||
internal class RelativeCoordinatesProvider( | ||
private val coordinatesProvider: CoordinatesProvider | ||
) : CoordinatesProvider { | ||
override fun calculateCoordinates(view: View): FloatArray { | ||
val (offsetX, offsetY) = IntArray(2).apply(view.rootView::getLocationOnScreen) | ||
val (viewX, viewY) = coordinatesProvider.calculateCoordinates(view) | ||
return floatArrayOf(viewX - offsetX, viewY - offsetY) | ||
} | ||
} |
21 changes: 21 additions & 0 deletions
21
...io/github/kakaocup/kakao/ext/clicks/coordinates/VisibleCenterGlobalCoordinatesProvider.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package io.github.kakaocup.kakao.ext.clicks.coordinates | ||
|
||
import android.graphics.Rect | ||
import android.view.View | ||
import androidx.test.espresso.action.CoordinatesProvider | ||
|
||
/** | ||
* Returns center of a visible part | ||
* | ||
* It's a replacement of androidx.test.espresso.action.GeneralLocation.VISIBLE_CENTER. | ||
* Espresso implementation can miss on property animated views (e.g. rotated and scaled) | ||
* | ||
* Known issues: | ||
* - It can miss in case of clipping when a view is rotated. | ||
*/ | ||
class VisibleCenterGlobalCoordinatesProvider : CoordinatesProvider { | ||
override fun calculateCoordinates(view: View): FloatArray { | ||
val rect = Rect().apply(view::getGlobalVisibleRect) | ||
return floatArrayOf(rect.centerX().toFloat(), rect.centerY().toFloat()) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4 changes: 2 additions & 2 deletions
4
kakao/src/main/kotlin/io/github/kakaocup/kakao/common/actions/clicks/ClickAction.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,8 @@ | ||
package io.github.kakaocup.kakao.common.actions.clicks | ||
|
||
import androidx.test.espresso.ViewAction | ||
import androidx.test.espresso.action.GeneralLocation | ||
import androidx.test.espresso.action.CoordinatesProvider | ||
|
||
interface ClickAction { | ||
fun click(location: GeneralLocation): ViewAction | ||
fun click(location: CoordinatesProvider): ViewAction | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
61 changes: 61 additions & 0 deletions
61
sample/src/androidTest/kotlin/io/github/kakaocup/sample/AnimatedButtonClickTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
package io.github.kakaocup.sample | ||
|
||
import androidx.test.ext.junit.rules.ActivityScenarioRule | ||
import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner | ||
import io.github.kakaocup.kakao.ext.clicks.coordinates.VisibleCenterGlobalCoordinatesProvider | ||
import io.github.kakaocup.kakao.screen.Screen | ||
import io.github.kakaocup.sample.screen.AnimatedButtonClickScreen | ||
import io.github.kakaocup.sample.tools.applyEspressoClickExtension | ||
import io.github.kakaocup.sample.tools.applyKakaoClickExtension | ||
import org.junit.Assert.assertThrows | ||
import org.junit.Ignore | ||
import org.junit.Rule | ||
import org.junit.Test | ||
import org.junit.runner.RunWith | ||
|
||
@RunWith(AndroidJUnit4ClassRunner::class) | ||
class AnimatedButtonClickTest { | ||
@Rule | ||
@JvmField | ||
val rule = ActivityScenarioRule(AnimatedButtonClickActivity::class.java) | ||
|
||
@Ignore("Not failing on CI emulators as expected, passing locally") | ||
@Test | ||
fun testEspressoClickAction() { | ||
Screen.onScreen<AnimatedButtonClickScreen> { | ||
applyEspressoClickExtension() | ||
|
||
animatedView.click() | ||
assertThrows(AssertionError::class.java) { | ||
clickIndicator.isVisible() | ||
} | ||
} | ||
} | ||
|
||
@Ignore("Not failing on CI emulators as expected, passing locally") | ||
@Test | ||
fun testKakaoClickAction() { | ||
Screen.onScreen<AnimatedButtonClickScreen> { | ||
applyKakaoClickExtension() | ||
|
||
animatedView.click() | ||
assertThrows(AssertionError::class.java) { | ||
clickIndicator.isVisible() | ||
} | ||
|
||
applyEspressoClickExtension() | ||
} | ||
} | ||
|
||
@Test | ||
fun testKakaoClickActionOnGlobalCenter() { | ||
Screen.onScreen<AnimatedButtonClickScreen> { | ||
applyKakaoClickExtension() | ||
|
||
animatedView.click(VisibleCenterGlobalCoordinatesProvider()) | ||
clickIndicator.isVisible() | ||
|
||
applyEspressoClickExtension() | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
11 changes: 11 additions & 0 deletions
11
sample/src/androidTest/kotlin/io/github/kakaocup/sample/screen/AnimatedButtonClickScreen.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package io.github.kakaocup.sample.screen | ||
|
||
import io.github.kakaocup.kakao.common.views.KView | ||
import io.github.kakaocup.kakao.screen.Screen | ||
import io.github.kakaocup.kakao.text.KTextView | ||
import io.github.kakaocup.sample.R | ||
|
||
class AnimatedButtonClickScreen : Screen<AnimatedButtonClickScreen>() { | ||
val animatedView = KView { withId(R.id.animated_view) } | ||
val clickIndicator = KTextView { withId(R.id.animated_view_click_indicator) } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.