• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.view.cts;
18 
19 import android.test.suitebuilder.annotation.SmallTest;
20 import android.view.View;
21 
22 import android.graphics.Rect;
23 import android.test.AndroidTestCase;
24 import android.view.Gravity;
25 
26 /**
27  * Test {@link Gravity}.
28  */
29 public class GravityTest extends AndroidTestCase {
30     private Rect mInRect;
31     private Rect mOutRect;
32 
33     @Override
setUp()34     protected void setUp() throws Exception {
35         super.setUp();
36         mInRect = new Rect(1, 2, 3, 4);
37         mOutRect = new Rect();
38     }
39 
testConstructor()40     public void testConstructor() {
41         new Gravity();
42     }
43 
applyGravity(int gravity, int w, int h, Rect container, Rect outRect, boolean bRtl)44     private void applyGravity(int gravity, int w, int h, Rect container, Rect outRect, boolean bRtl) {
45         final int layoutDirection = bRtl ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR;
46         Gravity.apply(gravity, w, h, mInRect, mOutRect, layoutDirection);
47     }
48 
testApply()49     public void testApply() {
50         mInRect = new Rect(10, 20, 30, 40);
51         Gravity.apply(Gravity.TOP, 2, 3, mInRect, mOutRect);
52         assertEquals(19, mOutRect.left);
53         assertEquals(21, mOutRect.right);
54         assertEquals(20, mOutRect.top);
55         assertEquals(23, mOutRect.bottom);
56         Gravity.apply(Gravity.TOP, 2, 3, mInRect, 5, 5, mOutRect);
57         assertEquals(24, mOutRect.left);
58         assertEquals(26, mOutRect.right);
59         assertEquals(25, mOutRect.top);
60         assertEquals(28, mOutRect.bottom);
61         applyGravity(Gravity.TOP, 2, 3, mInRect, mOutRect, false /* LTR direction */);
62         assertEquals(19, mOutRect.left);
63         assertEquals(21, mOutRect.right);
64         assertEquals(20, mOutRect.top);
65         assertEquals(23, mOutRect.bottom);
66         applyGravity(Gravity.TOP, 2, 3, mInRect, mOutRect, true /* RTL direction */);
67         assertEquals(19, mOutRect.left);
68         assertEquals(21, mOutRect.right);
69         assertEquals(20, mOutRect.top);
70         assertEquals(23, mOutRect.bottom);
71 
72         Gravity.apply(Gravity.BOTTOM, 2, 3, mInRect, mOutRect);
73         assertEquals(19, mOutRect.left);
74         assertEquals(21, mOutRect.right);
75         assertEquals(37, mOutRect.top);
76         assertEquals(40, mOutRect.bottom);
77         Gravity.apply(Gravity.BOTTOM, 2, 3, mInRect, 5, 5, mOutRect);
78         assertEquals(24, mOutRect.left);
79         assertEquals(26, mOutRect.right);
80         assertEquals(32, mOutRect.top);
81         assertEquals(35, mOutRect.bottom);
82         applyGravity(Gravity.BOTTOM, 2, 3, mInRect, mOutRect, false /* LTR direction */);
83         assertEquals(19, mOutRect.left);
84         assertEquals(21, mOutRect.right);
85         assertEquals(37, mOutRect.top);
86         assertEquals(40, mOutRect.bottom);
87         applyGravity(Gravity.BOTTOM, 2, 3, mInRect, mOutRect, true /* RTL direction */);
88         assertEquals(19, mOutRect.left);
89         assertEquals(21, mOutRect.right);
90         assertEquals(37, mOutRect.top);
91         assertEquals(40, mOutRect.bottom);
92 
93         Gravity.apply(Gravity.LEFT, 2, 10, mInRect, mOutRect);
94         assertEquals(10, mOutRect.left);
95         assertEquals(12, mOutRect.right);
96         assertEquals(25, mOutRect.top);
97         assertEquals(35, mOutRect.bottom);
98         Gravity.apply(Gravity.LEFT, 2, 10, mInRect, 5, 5, mOutRect);
99         assertEquals(15, mOutRect.left);
100         assertEquals(17, mOutRect.right);
101         assertEquals(30, mOutRect.top);
102         assertEquals(40, mOutRect.bottom);
103         applyGravity(Gravity.LEFT, 2, 10, mInRect, mOutRect, false /* LTR direction */);
104         assertEquals(10, mOutRect.left);
105         assertEquals(12, mOutRect.right);
106         assertEquals(25, mOutRect.top);
107         assertEquals(35, mOutRect.bottom);
108         applyGravity(Gravity.LEFT, 2, 10, mInRect, mOutRect, true /* RTL direction */);
109         assertEquals(10, mOutRect.left);
110         assertEquals(12, mOutRect.right);
111         assertEquals(25, mOutRect.top);
112         assertEquals(35, mOutRect.bottom);
113 
114         Gravity.apply(Gravity.START, 2, 10, mInRect, mOutRect);
115         assertEquals(10, mOutRect.left);
116         assertEquals(12, mOutRect.right);
117         assertEquals(25, mOutRect.top);
118         assertEquals(35, mOutRect.bottom);
119         Gravity.apply(Gravity.START, 2, 10, mInRect, 5, 5, mOutRect);
120         assertEquals(15, mOutRect.left);
121         assertEquals(17, mOutRect.right);
122         assertEquals(30, mOutRect.top);
123         assertEquals(40, mOutRect.bottom);
124         applyGravity(Gravity.START, 2, 10, mInRect, mOutRect, false /* LTR direction */);
125         assertEquals(10, mOutRect.left);
126         assertEquals(12, mOutRect.right);
127         assertEquals(25, mOutRect.top);
128         assertEquals(35, mOutRect.bottom);
129         applyGravity(Gravity.START, 2, 10, mInRect, mOutRect, true /* RTL direction */);
130         assertEquals(28, mOutRect.left);
131         assertEquals(30, mOutRect.right);
132         assertEquals(25, mOutRect.top);
133         assertEquals(35, mOutRect.bottom);
134 
135         Gravity.apply(Gravity.RIGHT, 2, 10, mInRect, mOutRect);
136         assertEquals(28, mOutRect.left);
137         assertEquals(30, mOutRect.right);
138         assertEquals(25, mOutRect.top);
139         assertEquals(35, mOutRect.bottom);
140         Gravity.apply(Gravity.RIGHT, 2, 10, mInRect, 5, 5, mOutRect);
141         assertEquals(23, mOutRect.left);
142         assertEquals(25, mOutRect.right);
143         assertEquals(30, mOutRect.top);
144         assertEquals(40, mOutRect.bottom);
145         applyGravity(Gravity.RIGHT, 2, 10, mInRect, mOutRect, false /* LTR direction */);
146         assertEquals(28, mOutRect.left);
147         assertEquals(30, mOutRect.right);
148         assertEquals(25, mOutRect.top);
149         assertEquals(35, mOutRect.bottom);
150         applyGravity(Gravity.RIGHT, 2, 10, mInRect, mOutRect, true /* RTL direction */);
151         assertEquals(28, mOutRect.left);
152         assertEquals(30, mOutRect.right);
153         assertEquals(25, mOutRect.top);
154         assertEquals(35, mOutRect.bottom);
155 
156         Gravity.apply(Gravity.END, 2, 10, mInRect, mOutRect);
157         assertEquals(28, mOutRect.left);
158         assertEquals(30, mOutRect.right);
159         assertEquals(25, mOutRect.top);
160         assertEquals(35, mOutRect.bottom);
161         Gravity.apply(Gravity.END, 2, 10, mInRect, 5, 5, mOutRect);
162         assertEquals(23, mOutRect.left);
163         assertEquals(25, mOutRect.right);
164         assertEquals(30, mOutRect.top);
165         assertEquals(40, mOutRect.bottom);
166         applyGravity(Gravity.END, 2, 10, mInRect, mOutRect, false /* LTR direction */);
167         assertEquals(28, mOutRect.left);
168         assertEquals(30, mOutRect.right);
169         assertEquals(25, mOutRect.top);
170         assertEquals(35, mOutRect.bottom);
171         applyGravity(Gravity.END, 2, 10, mInRect, mOutRect, true /* RTL direction */);
172         assertEquals(10, mOutRect.left);
173         assertEquals(12, mOutRect.right);
174         assertEquals(25, mOutRect.top);
175         assertEquals(35, mOutRect.bottom);
176 
177         Gravity.apply(Gravity.CENTER_VERTICAL, 2, 10, mInRect, mOutRect);
178         assertEquals(19, mOutRect.left);
179         assertEquals(21, mOutRect.right);
180         assertEquals(25, mOutRect.top);
181         assertEquals(35, mOutRect.bottom);
182         Gravity.apply(Gravity.CENTER_VERTICAL, 2, 10, mInRect, 5, 5, mOutRect);
183         assertEquals(24, mOutRect.left);
184         assertEquals(26, mOutRect.right);
185         assertEquals(30, mOutRect.top);
186         assertEquals(40, mOutRect.bottom);
187         applyGravity(Gravity.CENTER_VERTICAL, 2, 10, mInRect, mOutRect, false /* LTR direction */);
188         assertEquals(19, mOutRect.left);
189         assertEquals(21, mOutRect.right);
190         assertEquals(25, mOutRect.top);
191         assertEquals(35, mOutRect.bottom);
192         applyGravity(Gravity.CENTER_VERTICAL, 2, 10, mInRect, mOutRect, true /* RTL direction */);
193         assertEquals(19, mOutRect.left);
194         assertEquals(21, mOutRect.right);
195         assertEquals(25, mOutRect.top);
196         assertEquals(35, mOutRect.bottom);
197 
198         Gravity.apply(Gravity.FILL_VERTICAL, 2, 10, mInRect, mOutRect);
199         assertEquals(19, mOutRect.left);
200         assertEquals(21, mOutRect.right);
201         assertEquals(20, mOutRect.top);
202         assertEquals(40, mOutRect.bottom);
203         Gravity.apply(Gravity.FILL_VERTICAL, 2, 10, mInRect, 5, 5, mOutRect);
204         assertEquals(24, mOutRect.left);
205         assertEquals(26, mOutRect.right);
206         assertEquals(25, mOutRect.top);
207         assertEquals(45, mOutRect.bottom);
208         applyGravity(Gravity.FILL_VERTICAL, 2, 10, mInRect, mOutRect, false /* LTR direction */);
209         assertEquals(19, mOutRect.left);
210         assertEquals(21, mOutRect.right);
211         assertEquals(20, mOutRect.top);
212         assertEquals(40, mOutRect.bottom);
213         applyGravity(Gravity.FILL_VERTICAL, 2, 10, mInRect, mOutRect, true /* RTL direction */);
214         assertEquals(19, mOutRect.left);
215         assertEquals(21, mOutRect.right);
216         assertEquals(20, mOutRect.top);
217         assertEquals(40, mOutRect.bottom);
218 
219         Gravity.apply(Gravity.CENTER_HORIZONTAL, 2, 10, mInRect, mOutRect);
220         assertEquals(19, mOutRect.left);
221         assertEquals(21, mOutRect.right);
222         assertEquals(25, mOutRect.top);
223         assertEquals(35, mOutRect.bottom);
224         Gravity.apply(Gravity.CENTER_HORIZONTAL, 2, 10, mInRect, 5, 5, mOutRect);
225         assertEquals(24, mOutRect.left);
226         assertEquals(26, mOutRect.right);
227         assertEquals(30, mOutRect.top);
228         assertEquals(40, mOutRect.bottom);
229         applyGravity(Gravity.CENTER_HORIZONTAL, 2, 10, mInRect, mOutRect, false /* LTR direction */);
230         assertEquals(19, mOutRect.left);
231         assertEquals(21, mOutRect.right);
232         assertEquals(25, mOutRect.top);
233         assertEquals(35, mOutRect.bottom);
234         applyGravity(Gravity.CENTER_HORIZONTAL, 2, 10, mInRect, mOutRect, true /* RTL direction */);
235         assertEquals(19, mOutRect.left);
236         assertEquals(21, mOutRect.right);
237         assertEquals(25, mOutRect.top);
238         assertEquals(35, mOutRect.bottom);
239 
240         Gravity.apply(Gravity.FILL_HORIZONTAL, 2, 10, mInRect, mOutRect);
241         assertEquals(10, mOutRect.left);
242         assertEquals(30, mOutRect.right);
243         assertEquals(25, mOutRect.top);
244         assertEquals(35, mOutRect.bottom);
245         Gravity.apply(Gravity.FILL_HORIZONTAL, 2, 10, mInRect, 5, 5, mOutRect);
246         assertEquals(15, mOutRect.left);
247         assertEquals(35, mOutRect.right);
248         assertEquals(30, mOutRect.top);
249         assertEquals(40, mOutRect.bottom);
250         applyGravity(Gravity.FILL_HORIZONTAL, 2, 10, mInRect, mOutRect, false /* LTR direction */);
251         assertEquals(10, mOutRect.left);
252         assertEquals(30, mOutRect.right);
253         assertEquals(25, mOutRect.top);
254         assertEquals(35, mOutRect.bottom);
255         applyGravity(Gravity.FILL_HORIZONTAL, 2, 10, mInRect, mOutRect, true /* RTL direction */);
256         assertEquals(10, mOutRect.left);
257         assertEquals(30, mOutRect.right);
258         assertEquals(25, mOutRect.top);
259         assertEquals(35, mOutRect.bottom);
260     }
261 
testIsVertical()262     public void testIsVertical() {
263         assertFalse(Gravity.isVertical(-1));
264         assertTrue(Gravity.isVertical(Gravity.VERTICAL_GRAVITY_MASK));
265         assertFalse(Gravity.isVertical(Gravity.NO_GRAVITY));
266     }
267 
testIsHorizontal()268     public void testIsHorizontal() {
269         assertFalse(Gravity.isHorizontal(-1));
270         assertTrue(Gravity.isHorizontal(Gravity.HORIZONTAL_GRAVITY_MASK));
271         assertTrue(Gravity.isHorizontal(Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK));
272         assertFalse(Gravity.isHorizontal(Gravity.NO_GRAVITY));
273     }
274 
testApplyDisplay()275     public void testApplyDisplay() {
276         Rect display = new Rect(20, 30, 40, 50);
277         Rect inoutRect = new Rect(10, 10, 30, 60);
278         Gravity.applyDisplay(Gravity.DISPLAY_CLIP_VERTICAL, display, inoutRect);
279         assertEquals(20, inoutRect.left);
280         assertEquals(40, inoutRect.right);
281         assertEquals(30, inoutRect.top);
282         assertEquals(50, inoutRect.bottom);
283 
284         display = new Rect(20, 30, 40, 50);
285         inoutRect = new Rect(10, 10, 30, 60);
286         Gravity.applyDisplay(Gravity.DISPLAY_CLIP_HORIZONTAL, display, inoutRect);
287         assertEquals(20, inoutRect.left);
288         assertEquals(30, inoutRect.right);
289         assertEquals(30, inoutRect.top);
290         assertEquals(50, inoutRect.bottom);
291     }
292 
293     @SmallTest
testGetAbsoluteGravity()294     public void testGetAbsoluteGravity() throws Exception {
295         assertOneGravity(Gravity.LEFT, Gravity.LEFT, false);
296         assertOneGravity(Gravity.LEFT, Gravity.LEFT, true);
297 
298         assertOneGravity(Gravity.RIGHT, Gravity.RIGHT, false);
299         assertOneGravity(Gravity.RIGHT, Gravity.RIGHT, true);
300 
301         assertOneGravity(Gravity.TOP, Gravity.TOP, false);
302         assertOneGravity(Gravity.TOP, Gravity.TOP, true);
303 
304         assertOneGravity(Gravity.BOTTOM, Gravity.BOTTOM, false);
305         assertOneGravity(Gravity.BOTTOM, Gravity.BOTTOM, true);
306 
307         assertOneGravity(Gravity.CENTER_VERTICAL, Gravity.CENTER_VERTICAL, false);
308         assertOneGravity(Gravity.CENTER_VERTICAL, Gravity.CENTER_VERTICAL, true);
309 
310         assertOneGravity(Gravity.CENTER_HORIZONTAL, Gravity.CENTER_HORIZONTAL, false);
311         assertOneGravity(Gravity.CENTER_HORIZONTAL, Gravity.CENTER_HORIZONTAL, true);
312 
313         assertOneGravity(Gravity.CENTER, Gravity.CENTER, false);
314         assertOneGravity(Gravity.CENTER, Gravity.CENTER, true);
315 
316         assertOneGravity(Gravity.FILL_VERTICAL, Gravity.FILL_VERTICAL, false);
317         assertOneGravity(Gravity.FILL_VERTICAL, Gravity.FILL_VERTICAL, true);
318 
319         assertOneGravity(Gravity.FILL_HORIZONTAL, Gravity.FILL_HORIZONTAL, false);
320         assertOneGravity(Gravity.FILL_HORIZONTAL, Gravity.FILL_HORIZONTAL, true);
321 
322         assertOneGravity(Gravity.FILL, Gravity.FILL, false);
323         assertOneGravity(Gravity.FILL, Gravity.FILL, true);
324 
325         assertOneGravity(Gravity.CLIP_HORIZONTAL, Gravity.CLIP_HORIZONTAL, false);
326         assertOneGravity(Gravity.CLIP_HORIZONTAL, Gravity.CLIP_HORIZONTAL, true);
327 
328         assertOneGravity(Gravity.CLIP_VERTICAL, Gravity.CLIP_VERTICAL, false);
329         assertOneGravity(Gravity.CLIP_VERTICAL, Gravity.CLIP_VERTICAL, true);
330 
331         assertOneGravity(Gravity.LEFT, Gravity.START, false);
332         assertOneGravity(Gravity.RIGHT, Gravity.START, true);
333 
334         assertOneGravity(Gravity.RIGHT, Gravity.END, false);
335         assertOneGravity(Gravity.LEFT, Gravity.END, true);
336     }
337 
assertOneGravity(int expected, int initial, boolean isRtl)338     private void assertOneGravity(int expected, int initial, boolean isRtl) {
339         final int layoutDirection = isRtl ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR;
340 
341         assertEquals(expected, Gravity.getAbsoluteGravity(initial, layoutDirection));
342     }
343 }
344