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