Fix GeneralLocation using X and Y offsets the wrong way round.
Previously, CENTER_LEFT returned (0.5, 0) while TOP_CENTER gave (0, 0.5).
These should be the other way round.
It appears nothing in [] uses any locations other than CENTER or
TOP_LEFT, which are both unaffected (as the same offset is used on both
axes).
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=55913915
diff --git a/espresso/lib/src/main/java/com/google/android/apps/common/testing/ui/espresso/action/GeneralLocation.java b/espresso/lib/src/main/java/com/google/android/apps/common/testing/ui/espresso/action/GeneralLocation.java
index 1ac1d2a..aef0aba 100644
--- a/espresso/lib/src/main/java/com/google/android/apps/common/testing/ui/espresso/action/GeneralLocation.java
+++ b/espresso/lib/src/main/java/com/google/android/apps/common/testing/ui/espresso/action/GeneralLocation.java
@@ -65,8 +65,8 @@
private static float[] getCoordinates(View view, Position vertical, Position horizontal) {
final int[] xy = new int[2];
view.getLocationOnScreen(xy);
- final float x = vertical.getPosition(xy[0], view.getWidth());
- final float y = horizontal.getPosition(xy[1], view.getHeight());
+ final float x = horizontal.getPosition(xy[0], view.getWidth());
+ final float y = vertical.getPosition(xy[1], view.getHeight());
float[] coordinates = {x, y};
return coordinates;
}
diff --git a/espresso/libtests/src/main/java/com/google/android/apps/common/testing/ui/espresso/action/GeneralLocationTest.java b/espresso/libtests/src/main/java/com/google/android/apps/common/testing/ui/espresso/action/GeneralLocationTest.java
new file mode 100644
index 0000000..eea5512
--- /dev/null
+++ b/espresso/libtests/src/main/java/com/google/android/apps/common/testing/ui/espresso/action/GeneralLocationTest.java
@@ -0,0 +1,100 @@
+package com.google.android.apps.common.testing.ui.espresso.action;
+
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+import android.view.View;
+
+import junit.framework.TestCase;
+
+import org.junit.Test;
+import org.mockito.Spy;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+/**
+ * Unit tests for {@link GeneralLocation}.
+ */
+public class GeneralLocationTest extends TestCase {
+
+ private static final int VIEW_POSITION_X = 100;
+ private static final int VIEW_POSITION_Y = 50;
+ private static final int VIEW_WIDTH = 150;
+ private static final int VIEW_HEIGHT = 300;
+
+ private static final int AXIS_X = 0;
+ private static final int AXIS_Y = 1;
+
+ @Spy
+ private View mockView;
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ initMocks(this);
+
+ doAnswer(new Answer<Void>() {
+ @Override
+ public Void answer(InvocationOnMock invocation) throws Throwable {
+ int[] array = (int[]) invocation.getArguments()[0];
+ array[AXIS_X] = VIEW_POSITION_X;
+ array[AXIS_Y] = VIEW_POSITION_Y;
+ return null;
+ }
+ }).when(mockView).getLocationOnScreen(any(int[].class));
+
+ mockView.layout(
+ VIEW_POSITION_X,
+ VIEW_POSITION_Y,
+ VIEW_POSITION_X + VIEW_WIDTH,
+ VIEW_POSITION_Y + VIEW_HEIGHT);
+ }
+
+ @Test
+ public void testLeftLocationsX() {
+ assertPositionEquals(VIEW_POSITION_X, GeneralLocation.TOP_LEFT, AXIS_X);
+ assertPositionEquals(VIEW_POSITION_X, GeneralLocation.CENTER_LEFT, AXIS_X);
+ assertPositionEquals(VIEW_POSITION_X, GeneralLocation.BOTTOM_LEFT, AXIS_X);
+ }
+
+ @Test
+ public void testRightLocationsX() {
+ assertPositionEquals(VIEW_POSITION_X + VIEW_WIDTH, GeneralLocation.TOP_RIGHT, AXIS_X);
+ assertPositionEquals(VIEW_POSITION_X + VIEW_WIDTH, GeneralLocation.CENTER_RIGHT, AXIS_X);
+ assertPositionEquals(VIEW_POSITION_X + VIEW_WIDTH, GeneralLocation.BOTTOM_RIGHT, AXIS_X);
+ }
+
+ @Test
+ public void testTopLocationsY() {
+ assertPositionEquals(VIEW_POSITION_Y, GeneralLocation.TOP_LEFT, AXIS_Y);
+ assertPositionEquals(VIEW_POSITION_Y, GeneralLocation.TOP_CENTER, AXIS_Y);
+ assertPositionEquals(VIEW_POSITION_Y, GeneralLocation.TOP_RIGHT, AXIS_Y);
+ }
+
+ @Test
+ public void testBottomLocationsY() {
+ assertPositionEquals(VIEW_POSITION_Y + VIEW_HEIGHT, GeneralLocation.BOTTOM_LEFT, AXIS_Y);
+ assertPositionEquals(VIEW_POSITION_Y + VIEW_HEIGHT, GeneralLocation.BOTTOM_CENTER, AXIS_Y);
+ assertPositionEquals(VIEW_POSITION_Y + VIEW_HEIGHT, GeneralLocation.BOTTOM_RIGHT, AXIS_Y);
+ }
+
+ @Test
+ public void testCenterLocationsX() {
+ assertPositionEquals(VIEW_POSITION_X + VIEW_WIDTH / 2, GeneralLocation.CENTER, AXIS_X);
+ assertPositionEquals(VIEW_POSITION_X + VIEW_WIDTH / 2, GeneralLocation.TOP_CENTER, AXIS_X);
+ assertPositionEquals(VIEW_POSITION_X + VIEW_WIDTH / 2, GeneralLocation.BOTTOM_CENTER, AXIS_X);
+ }
+
+ @Test
+ public void testCenterLocationsY() {
+ assertPositionEquals(VIEW_POSITION_Y + VIEW_HEIGHT / 2, GeneralLocation.CENTER, AXIS_Y);
+ assertPositionEquals(VIEW_POSITION_Y + VIEW_HEIGHT / 2, GeneralLocation.CENTER_LEFT, AXIS_Y);
+ assertPositionEquals(VIEW_POSITION_Y + VIEW_HEIGHT / 2, GeneralLocation.CENTER_RIGHT, AXIS_Y);
+ }
+
+ private void assertPositionEquals(int expected, GeneralLocation location, int axis) {
+ assertEquals(expected, location.calculateCoordinates(mockView)[axis], 0.1f);
+ }
+
+}