19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.test; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport static junit.framework.Assert.*; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ViewGroup; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Some useful assertions about views. 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ViewAsserts { 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ViewAsserts() {} 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Assert that view is on the screen. 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param origin The root view of the screen. 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The view. 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public void assertOnScreen(View origin, View view) { 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xy = new int[2]; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project view.getLocationOnScreen(xy); 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xyRoot = new int[2]; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project origin.getLocationOnScreen(xyRoot); 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int y = xy[1] - xyRoot[1]; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("view should have positive y coordinate on screen", 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project y >= 0); 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("view should have y location on screen less than drawing " 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "height of root view", 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project y <= view.getRootView().getHeight()); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Assert that view is below the visible screen. 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param origin The root view of the screen. 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The view 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public void assertOffScreenBelow(View origin, View view) { 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xy = new int[2]; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project view.getLocationOnScreen(xy); 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xyRoot = new int[2]; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project origin.getLocationOnScreen(xyRoot); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int y = xy[1] - xyRoot[1]; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("view should have y location on screen greater than drawing " 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "height of origen view (" + y + " is not greater than " 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + origin.getHeight() + ")", 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project y > origin.getHeight()); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Assert that view is above the visible screen. 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param origin Te root view of the screen. 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The view 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public void assertOffScreenAbove(View origin, View view) { 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xy = new int[2]; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project view.getLocationOnScreen(xy); 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xyRoot = new int[2]; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project origin.getLocationOnScreen(xyRoot); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int y = xy[1] - xyRoot[1]; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("view should have y location less than that of origin view", 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project y < 0); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Assert that a view has a particular x and y position on the visible screen. 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param origin The root view of the screen. 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The view. 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x The expected x coordinate. 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y The expected y coordinate. 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public void assertHasScreenCoordinates(View origin, View view, int x, int y) { 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xy = new int[2]; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project view.getLocationOnScreen(xy); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xyRoot = new int[2]; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project origin.getLocationOnScreen(xyRoot); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("x coordinate", x, xy[0] - xyRoot[0]); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("y coordinate", y, xy[1] - xyRoot[1]); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Assert that two views are aligned on their baseline, that is that their baselines 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are on the same y location. 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param first The first view 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param second The second view 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public void assertBaselineAligned(View first, View second) { 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xy = new int[2]; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project first.getLocationOnScreen(xy); 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int firstTop = xy[1] + first.getBaseline(); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project second.getLocationOnScreen(xy); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int secondTop = xy[1] + second.getBaseline(); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("views are not baseline aligned", firstTop, secondTop); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Assert that two views are right aligned, that is that their right edges 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are on the same x location. 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param first The first view 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param second The second view 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public void assertRightAligned(View first, View second) { 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xy = new int[2]; 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project first.getLocationOnScreen(xy); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int firstRight = xy[0] + first.getMeasuredWidth(); 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project second.getLocationOnScreen(xy); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int secondRight = xy[0] + second.getMeasuredWidth(); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("views are not right aligned", firstRight, secondRight); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Assert that two views are right aligned, that is that their right edges 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are on the same x location, with respect to the specified margin. 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param first The first view 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param second The second view 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param margin The margin between the first view and the second view 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public void assertRightAligned(View first, View second, int margin) { 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xy = new int[2]; 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project first.getLocationOnScreen(xy); 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int firstRight = xy[0] + first.getMeasuredWidth(); 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project second.getLocationOnScreen(xy); 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int secondRight = xy[0] + second.getMeasuredWidth(); 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("views are not right aligned", Math.abs(firstRight - secondRight), margin); 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Assert that two views are left aligned, that is that their left edges 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are on the same x location. 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param first The first view 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param second The second view 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public void assertLeftAligned(View first, View second) { 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xy = new int[2]; 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project first.getLocationOnScreen(xy); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int firstLeft = xy[0]; 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project second.getLocationOnScreen(xy); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int secondLeft = xy[0]; 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("views are not left aligned", firstLeft, secondLeft); 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Assert that two views are left aligned, that is that their left edges 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are on the same x location, with respect to the specified margin. 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param first The first view 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param second The second view 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param margin The margin between the first view and the second view 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public void assertLeftAligned(View first, View second, int margin) { 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xy = new int[2]; 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project first.getLocationOnScreen(xy); 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int firstLeft = xy[0]; 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project second.getLocationOnScreen(xy); 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int secondLeft = xy[0]; 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("views are not left aligned", Math.abs(firstLeft - secondLeft), margin); 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Assert that two views are bottom aligned, that is that their bottom edges 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are on the same y location. 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param first The first view 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param second The second view 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public void assertBottomAligned(View first, View second) { 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xy = new int[2]; 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project first.getLocationOnScreen(xy); 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int firstBottom = xy[1] + first.getMeasuredHeight(); 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project second.getLocationOnScreen(xy); 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int secondBottom = xy[1] + second.getMeasuredHeight(); 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("views are not bottom aligned", firstBottom, secondBottom); 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Assert that two views are bottom aligned, that is that their bottom edges 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are on the same y location, with respect to the specified margin. 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param first The first view 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param second The second view 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param margin The margin between the first view and the second view 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public void assertBottomAligned(View first, View second, int margin) { 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xy = new int[2]; 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project first.getLocationOnScreen(xy); 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int firstBottom = xy[1] + first.getMeasuredHeight(); 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project second.getLocationOnScreen(xy); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int secondBottom = xy[1] + second.getMeasuredHeight(); 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("views are not bottom aligned", Math.abs(firstBottom - secondBottom), margin); 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Assert that two views are top aligned, that is that their top edges 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are on the same y location. 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param first The first view 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param second The second view 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public void assertTopAligned(View first, View second) { 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xy = new int[2]; 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project first.getLocationOnScreen(xy); 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int firstTop = xy[1]; 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project second.getLocationOnScreen(xy); 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int secondTop = xy[1]; 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("views are not top aligned", firstTop, secondTop); 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Assert that two views are top aligned, that is that their top edges 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are on the same y location, with respect to the specified margin. 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param first The first view 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param second The second view 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param margin The margin between the first view and the second view 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public void assertTopAligned(View first, View second, int margin) { 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xy = new int[2]; 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project first.getLocationOnScreen(xy); 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int firstTop = xy[1]; 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project second.getLocationOnScreen(xy); 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int secondTop = xy[1]; 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("views are not top aligned", Math.abs(firstTop - secondTop), margin); 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Assert that the <code>test</code> view is horizontally center aligned 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with respect to the <code>reference</code> view. 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param reference The reference view 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param test The view that should be center aligned with the reference view 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public void assertHorizontalCenterAligned(View reference, View test) { 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xy = new int[2]; 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reference.getLocationOnScreen(xy); 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int referenceLeft = xy[0]; 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project test.getLocationOnScreen(xy); 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int testLeft = xy[0]; 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int center = (reference.getMeasuredWidth() - test.getMeasuredWidth()) / 2; 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int delta = testLeft - referenceLeft; 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("views are not horizontally center aligned", center, delta); 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Assert that the <code>test</code> view is vertically center aligned 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with respect to the <code>reference</code> view. 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param reference The reference view 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param test The view that should be center aligned with the reference view 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public void assertVerticalCenterAligned(View reference, View test) { 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] xy = new int[2]; 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reference.getLocationOnScreen(xy); 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int referenceTop = xy[1]; 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project test.getLocationOnScreen(xy); 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int testTop = xy[1]; 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int center = (reference.getMeasuredHeight() - test.getMeasuredHeight()) / 2; 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int delta = testTop - referenceTop; 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("views are not vertically center aligned", center, delta); 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Assert the specified group's integrity. The children count should be >= 0 and each 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * child should be non-null. 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param parent The group whose integrity to check 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public void assertGroupIntegrity(ViewGroup parent) { 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = parent.getChildCount(); 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("child count should be >= 0", count >= 0); 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotNull("group should not contain null children", parent.getChildAt(i)); 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertSame(parent, parent.getChildAt(i).getParent()); 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Assert that the specified group contains a specific child once and only once. 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param parent The group 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param child The child that should belong to group 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public void assertGroupContains(ViewGroup parent, View child) { 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = parent.getChildCount(); 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("Child count should be >= 0", count >= 0); 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean found = false; 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (parent.getChildAt(i) == child) { 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!found) { 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project found = true; 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("child " + child + " is duplicated in parent", false); 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("group does not contain " + child, found); 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Assert that the specified group does not contain a specific child. 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param parent The group 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param child The child that should not belong to group 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public void assertGroupNotContains(ViewGroup parent, View child) { 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = parent.getChildCount(); 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("Child count should be >= 0", count >= 0); 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (parent.getChildAt(i) == child) { 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("child " + child + " is found in parent", false); 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 374