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);
+  }
+
+}