auto import from //depot/cupcake/@135843
diff --git a/test-runner/android/test/ViewAsserts.java b/test-runner/android/test/ViewAsserts.java
new file mode 100644
index 0000000..c575fc5
--- /dev/null
+++ b/test-runner/android/test/ViewAsserts.java
@@ -0,0 +1,373 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.test;
+
+import static junit.framework.Assert.*;
+
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * Some useful assertions about views.
+ */
+public class ViewAsserts {
+
+    private ViewAsserts() {}
+
+    /**
+     * Assert that view is on the screen.
+     * @param origin The root view of the screen.
+     * @param view The view.
+     */
+    static public void assertOnScreen(View origin, View view) {
+        int[] xy = new int[2];
+        view.getLocationOnScreen(xy);
+
+        int[] xyRoot = new int[2];
+        origin.getLocationOnScreen(xyRoot);
+
+        int y = xy[1] - xyRoot[1];
+
+        assertTrue("view should have positive y coordinate on screen",
+                y  >= 0);
+
+        assertTrue("view should have y location on screen less than drawing "
+                + "height of root view",
+                y <= view.getRootView().getHeight());
+    }
+
+    /**
+     * Assert that view is below the visible screen.
+     * @param origin The root view of the screen.
+     * @param view The view
+     */
+    static public void assertOffScreenBelow(View origin, View view) {
+        int[] xy = new int[2];
+        view.getLocationOnScreen(xy);
+
+        int[] xyRoot = new int[2];
+        origin.getLocationOnScreen(xyRoot);
+
+        int y = xy[1] - xyRoot[1];
+
+        assertTrue("view should have y location on screen greater than drawing "
+                + "height of origen view (" + y + " is not greater than "
+                + origin.getHeight() + ")",
+                y > origin.getHeight());
+    }
+
+    /**
+     * Assert that view is above the visible screen.
+     * @param origin Te root view of the screen.
+     * @param view The view
+     */
+    static public void assertOffScreenAbove(View origin, View view) {
+        int[] xy = new int[2];
+        view.getLocationOnScreen(xy);
+
+        int[] xyRoot = new int[2];
+        origin.getLocationOnScreen(xyRoot);
+
+        int y = xy[1] - xyRoot[1];
+
+        assertTrue("view should have y location less than that of origin view",
+                y < 0);
+    }
+
+    /**
+     * Assert that a view has a particular x and y position on the visible screen.
+     * @param origin The root view of the screen.
+     * @param view The view.
+     * @param x The expected x coordinate.
+     * @param y The expected y coordinate.
+     */
+    static public void assertHasScreenCoordinates(View origin, View view, int x, int y) {
+        int[] xy = new int[2];
+        view.getLocationOnScreen(xy);
+
+        int[] xyRoot = new int[2];
+        origin.getLocationOnScreen(xyRoot);
+
+        assertEquals("x coordinate", x, xy[0] - xyRoot[0]);
+        assertEquals("y coordinate", y, xy[1] - xyRoot[1]);
+    }
+
+    /**
+     * Assert that two views are aligned on their baseline, that is that their baselines
+     * are on the same y location.
+     *
+     * @param first The first view
+     * @param second The second view
+     */
+    static public void assertBaselineAligned(View first, View second) {
+        int[] xy = new int[2];
+        first.getLocationOnScreen(xy);
+        int firstTop = xy[1] + first.getBaseline();
+
+        second.getLocationOnScreen(xy);
+        int secondTop = xy[1] + second.getBaseline();
+
+        assertEquals("views are not baseline aligned", firstTop, secondTop);
+    }
+
+    /**
+     * Assert that two views are right aligned, that is that their right edges
+     * are on the same x location.
+     *
+     * @param first The first view
+     * @param second The second view
+     */
+    static public void assertRightAligned(View first, View second) {
+        int[] xy = new int[2];
+        first.getLocationOnScreen(xy);
+        int firstRight = xy[0] + first.getMeasuredWidth();
+
+        second.getLocationOnScreen(xy);
+        int secondRight = xy[0] + second.getMeasuredWidth();
+
+        assertEquals("views are not right aligned", firstRight, secondRight);
+    }
+
+    /**
+     * Assert that two views are right aligned, that is that their right edges
+     * are on the same x location, with respect to the specified margin.
+     *
+     * @param first The first view
+     * @param second The second view
+     * @param margin The margin between the first view and the second view
+     */
+    static public void assertRightAligned(View first, View second, int margin) {
+        int[] xy = new int[2];
+        first.getLocationOnScreen(xy);
+        int firstRight = xy[0] + first.getMeasuredWidth();
+
+        second.getLocationOnScreen(xy);
+        int secondRight = xy[0] + second.getMeasuredWidth();
+
+        assertEquals("views are not right aligned", Math.abs(firstRight - secondRight), margin);
+    }
+
+    /**
+     * Assert that two views are left aligned, that is that their left edges
+     * are on the same x location.
+     *
+     * @param first The first view
+     * @param second The second view
+     */
+    static public void assertLeftAligned(View first, View second) {
+        int[] xy = new int[2];
+        first.getLocationOnScreen(xy);
+        int firstLeft = xy[0];
+
+        second.getLocationOnScreen(xy);
+        int secondLeft = xy[0];
+
+        assertEquals("views are not left aligned", firstLeft, secondLeft);
+    }
+
+    /**
+     * Assert that two views are left aligned, that is that their left edges
+     * are on the same x location, with respect to the specified margin.
+     *
+     * @param first The first view
+     * @param second The second view
+     * @param margin The margin between the first view and the second view
+     */
+    static public void assertLeftAligned(View first, View second, int margin) {
+        int[] xy = new int[2];
+        first.getLocationOnScreen(xy);
+        int firstLeft = xy[0];
+
+        second.getLocationOnScreen(xy);
+        int secondLeft = xy[0];
+
+        assertEquals("views are not left aligned", Math.abs(firstLeft - secondLeft), margin);
+    }
+
+    /**
+     * Assert that two views are bottom aligned, that is that their bottom edges
+     * are on the same y location.
+     *
+     * @param first The first view
+     * @param second The second view
+     */
+    static public void assertBottomAligned(View first, View second) {
+        int[] xy = new int[2];
+        first.getLocationOnScreen(xy);
+        int firstBottom = xy[1] + first.getMeasuredHeight();
+
+        second.getLocationOnScreen(xy);
+        int secondBottom = xy[1] + second.getMeasuredHeight();
+
+        assertEquals("views are not bottom aligned", firstBottom, secondBottom);
+    }
+
+    /**
+     * Assert that two views are bottom aligned, that is that their bottom edges
+     * are on the same y location, with respect to the specified margin.
+     *
+     * @param first The first view
+     * @param second The second view
+     * @param margin The margin between the first view and the second view
+     */
+    static public void assertBottomAligned(View first, View second, int margin) {
+        int[] xy = new int[2];
+        first.getLocationOnScreen(xy);
+        int firstBottom = xy[1] + first.getMeasuredHeight();
+
+        second.getLocationOnScreen(xy);
+        int secondBottom = xy[1] + second.getMeasuredHeight();
+
+        assertEquals("views are not bottom aligned", Math.abs(firstBottom - secondBottom), margin);
+    }
+
+    /**
+     * Assert that two views are top aligned, that is that their top edges
+     * are on the same y location.
+     *
+     * @param first The first view
+     * @param second The second view
+     */
+    static public void assertTopAligned(View first, View second) {
+        int[] xy = new int[2];
+        first.getLocationOnScreen(xy);
+        int firstTop = xy[1];
+
+        second.getLocationOnScreen(xy);
+        int secondTop = xy[1];
+
+        assertEquals("views are not top aligned", firstTop, secondTop);
+    }
+
+    /**
+     * Assert that two views are top aligned, that is that their top edges
+     * are on the same y location, with respect to the specified margin.
+     *
+     * @param first The first view
+     * @param second The second view
+     * @param margin The margin between the first view and the second view
+     */
+    static public void assertTopAligned(View first, View second, int margin) {
+        int[] xy = new int[2];
+        first.getLocationOnScreen(xy);
+        int firstTop = xy[1];
+
+        second.getLocationOnScreen(xy);
+        int secondTop = xy[1];
+
+        assertEquals("views are not top aligned", Math.abs(firstTop - secondTop), margin);
+    }
+
+    /**
+     * Assert that the <code>test</code> view is horizontally center aligned
+     * with respect to the <code>reference</code> view.
+     *
+     * @param reference The reference view
+     * @param test The view that should be center aligned with the reference view
+     */
+    static public void assertHorizontalCenterAligned(View reference, View test) {
+        int[] xy = new int[2];
+        reference.getLocationOnScreen(xy);
+        int referenceLeft = xy[0];
+
+        test.getLocationOnScreen(xy);
+        int testLeft = xy[0];
+
+        int center = (reference.getMeasuredWidth() - test.getMeasuredWidth()) / 2;
+        int delta = testLeft - referenceLeft;
+
+        assertEquals("views are not horizontally center aligned", center, delta);
+    }
+
+    /**
+     * Assert that the <code>test</code> view is vertically center aligned
+     * with respect to the <code>reference</code> view.
+     *
+     * @param reference The reference view
+     * @param test The view that should be center aligned with the reference view
+     */
+    static public void assertVerticalCenterAligned(View reference, View test) {
+        int[] xy = new int[2];
+        reference.getLocationOnScreen(xy);
+        int referenceTop = xy[1];
+
+        test.getLocationOnScreen(xy);
+        int testTop = xy[1];
+
+        int center = (reference.getMeasuredHeight() - test.getMeasuredHeight()) / 2;
+        int delta = testTop - referenceTop;
+
+        assertEquals("views are not vertically center aligned", center, delta);
+    }
+
+    /**
+     * Assert the specified group's integrity. The children count should be >= 0 and each
+     * child should be non-null.
+     *
+     * @param parent The group whose integrity to check
+     */
+    static public void assertGroupIntegrity(ViewGroup parent) {
+        final int count = parent.getChildCount();
+        assertTrue("child count should be >= 0", count >= 0);
+
+        for (int i = 0; i < count; i++) {
+            assertNotNull("group should not contain null children", parent.getChildAt(i));
+            assertSame(parent, parent.getChildAt(i).getParent());
+        }
+    }
+
+    /**
+     * Assert that the specified group contains a specific child once and only once.
+     *
+     * @param parent The group
+     * @param child The child that should belong to group
+     */
+    static public void assertGroupContains(ViewGroup parent, View child) {
+        final int count = parent.getChildCount();
+        assertTrue("Child count should be >= 0", count >= 0);
+
+        boolean found = false;
+        for (int i = 0; i < count; i++) {
+            if (parent.getChildAt(i) == child) {
+                if (!found) {
+                    found = true;
+                } else {
+                    assertTrue("child " + child + " is duplicated in parent", false);
+                }
+            }
+        }
+
+        assertTrue("group does not contain " + child, found);
+    }
+
+    /**
+     * Assert that the specified group does not contain a specific child.
+     *
+     * @param parent The group
+     * @param child The child that should not belong to group
+     */
+    static public void assertGroupNotContains(ViewGroup parent, View child) {
+        final int count = parent.getChildCount();
+        assertTrue("Child count should be >= 0", count >= 0);
+
+        for (int i = 0; i < count; i++) {
+            if (parent.getChildAt(i) == child) {
+                assertTrue("child " + child + " is found in parent", false);
+            }
+        }
+    }
+}