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 static org.junit.Assert.assertEquals; 20 import static org.junit.Assert.assertFalse; 21 import static org.junit.Assert.assertTrue; 22 23 import android.graphics.Rect; 24 import android.support.test.filters.SmallTest; 25 import android.support.test.runner.AndroidJUnit4; 26 import android.view.Gravity; 27 import android.view.View; 28 29 import org.junit.Before; 30 import org.junit.Test; 31 import org.junit.runner.RunWith; 32 33 /** 34 * Test {@link Gravity}. 35 */ 36 @SmallTest 37 @RunWith(AndroidJUnit4.class) 38 public class GravityTest { 39 private Rect mInRect; 40 private Rect mOutRect; 41 42 @Before 43 public void setup() { 44 mInRect = new Rect(1, 2, 3, 4); 45 mOutRect = new Rect(); 46 } 47 48 @Test 49 public void testConstructor() { 50 new Gravity(); 51 } 52 53 private void applyGravity(int gravity, int w, int h, boolean bRtl) { 54 final int layoutDirection = bRtl ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR; 55 Gravity.apply(gravity, w, h, mInRect, mOutRect, layoutDirection); 56 } 57 58 @Test 59 public void testApply() { 60 mInRect = new Rect(10, 20, 30, 40); 61 Gravity.apply(Gravity.TOP, 2, 3, mInRect, mOutRect); 62 assertEquals(19, mOutRect.left); 63 assertEquals(21, mOutRect.right); 64 assertEquals(20, mOutRect.top); 65 assertEquals(23, mOutRect.bottom); 66 Gravity.apply(Gravity.TOP, 2, 3, mInRect, 5, 5, mOutRect); 67 assertEquals(24, mOutRect.left); 68 assertEquals(26, mOutRect.right); 69 assertEquals(25, mOutRect.top); 70 assertEquals(28, mOutRect.bottom); 71 applyGravity(Gravity.TOP, 2, 3, false /* LTR direction */); 72 assertEquals(19, mOutRect.left); 73 assertEquals(21, mOutRect.right); 74 assertEquals(20, mOutRect.top); 75 assertEquals(23, mOutRect.bottom); 76 applyGravity(Gravity.TOP, 2, 3, true /* RTL direction */); 77 assertEquals(19, mOutRect.left); 78 assertEquals(21, mOutRect.right); 79 assertEquals(20, mOutRect.top); 80 assertEquals(23, mOutRect.bottom); 81 82 Gravity.apply(Gravity.BOTTOM, 2, 3, mInRect, mOutRect); 83 assertEquals(19, mOutRect.left); 84 assertEquals(21, mOutRect.right); 85 assertEquals(37, mOutRect.top); 86 assertEquals(40, mOutRect.bottom); 87 Gravity.apply(Gravity.BOTTOM, 2, 3, mInRect, 5, 5, mOutRect); 88 assertEquals(24, mOutRect.left); 89 assertEquals(26, mOutRect.right); 90 assertEquals(32, mOutRect.top); 91 assertEquals(35, mOutRect.bottom); 92 applyGravity(Gravity.BOTTOM, 2, 3, false /* LTR direction */); 93 assertEquals(19, mOutRect.left); 94 assertEquals(21, mOutRect.right); 95 assertEquals(37, mOutRect.top); 96 assertEquals(40, mOutRect.bottom); 97 applyGravity(Gravity.BOTTOM, 2, 3, true /* RTL direction */); 98 assertEquals(19, mOutRect.left); 99 assertEquals(21, mOutRect.right); 100 assertEquals(37, mOutRect.top); 101 assertEquals(40, mOutRect.bottom); 102 103 Gravity.apply(Gravity.LEFT, 2, 10, mInRect, mOutRect); 104 assertEquals(10, mOutRect.left); 105 assertEquals(12, mOutRect.right); 106 assertEquals(25, mOutRect.top); 107 assertEquals(35, mOutRect.bottom); 108 Gravity.apply(Gravity.LEFT, 2, 10, mInRect, 5, 5, mOutRect); 109 assertEquals(15, mOutRect.left); 110 assertEquals(17, mOutRect.right); 111 assertEquals(30, mOutRect.top); 112 assertEquals(40, mOutRect.bottom); 113 applyGravity(Gravity.LEFT, 2, 10, false /* LTR direction */); 114 assertEquals(10, mOutRect.left); 115 assertEquals(12, mOutRect.right); 116 assertEquals(25, mOutRect.top); 117 assertEquals(35, mOutRect.bottom); 118 applyGravity(Gravity.LEFT, 2, 10, true /* RTL direction */); 119 assertEquals(10, mOutRect.left); 120 assertEquals(12, mOutRect.right); 121 assertEquals(25, mOutRect.top); 122 assertEquals(35, mOutRect.bottom); 123 124 Gravity.apply(Gravity.START, 2, 10, mInRect, mOutRect); 125 assertEquals(10, mOutRect.left); 126 assertEquals(12, mOutRect.right); 127 assertEquals(25, mOutRect.top); 128 assertEquals(35, mOutRect.bottom); 129 Gravity.apply(Gravity.START, 2, 10, mInRect, 5, 5, mOutRect); 130 assertEquals(15, mOutRect.left); 131 assertEquals(17, mOutRect.right); 132 assertEquals(30, mOutRect.top); 133 assertEquals(40, mOutRect.bottom); 134 applyGravity(Gravity.START, 2, 10, false /* LTR direction */); 135 assertEquals(10, mOutRect.left); 136 assertEquals(12, mOutRect.right); 137 assertEquals(25, mOutRect.top); 138 assertEquals(35, mOutRect.bottom); 139 applyGravity(Gravity.START, 2, 10, true /* RTL direction */); 140 assertEquals(28, mOutRect.left); 141 assertEquals(30, mOutRect.right); 142 assertEquals(25, mOutRect.top); 143 assertEquals(35, mOutRect.bottom); 144 145 Gravity.apply(Gravity.RIGHT, 2, 10, mInRect, mOutRect); 146 assertEquals(28, mOutRect.left); 147 assertEquals(30, mOutRect.right); 148 assertEquals(25, mOutRect.top); 149 assertEquals(35, mOutRect.bottom); 150 Gravity.apply(Gravity.RIGHT, 2, 10, mInRect, 5, 5, mOutRect); 151 assertEquals(23, mOutRect.left); 152 assertEquals(25, mOutRect.right); 153 assertEquals(30, mOutRect.top); 154 assertEquals(40, mOutRect.bottom); 155 applyGravity(Gravity.RIGHT, 2, 10, false /* LTR direction */); 156 assertEquals(28, mOutRect.left); 157 assertEquals(30, mOutRect.right); 158 assertEquals(25, mOutRect.top); 159 assertEquals(35, mOutRect.bottom); 160 applyGravity(Gravity.RIGHT, 2, 10, true /* RTL direction */); 161 assertEquals(28, mOutRect.left); 162 assertEquals(30, mOutRect.right); 163 assertEquals(25, mOutRect.top); 164 assertEquals(35, mOutRect.bottom); 165 166 Gravity.apply(Gravity.END, 2, 10, mInRect, mOutRect); 167 assertEquals(28, mOutRect.left); 168 assertEquals(30, mOutRect.right); 169 assertEquals(25, mOutRect.top); 170 assertEquals(35, mOutRect.bottom); 171 Gravity.apply(Gravity.END, 2, 10, mInRect, 5, 5, mOutRect); 172 assertEquals(23, mOutRect.left); 173 assertEquals(25, mOutRect.right); 174 assertEquals(30, mOutRect.top); 175 assertEquals(40, mOutRect.bottom); 176 applyGravity(Gravity.END, 2, 10, false /* LTR direction */); 177 assertEquals(28, mOutRect.left); 178 assertEquals(30, mOutRect.right); 179 assertEquals(25, mOutRect.top); 180 assertEquals(35, mOutRect.bottom); 181 applyGravity(Gravity.END, 2, 10, true /* RTL direction */); 182 assertEquals(10, mOutRect.left); 183 assertEquals(12, mOutRect.right); 184 assertEquals(25, mOutRect.top); 185 assertEquals(35, mOutRect.bottom); 186 187 Gravity.apply(Gravity.CENTER_VERTICAL, 2, 10, mInRect, mOutRect); 188 assertEquals(19, mOutRect.left); 189 assertEquals(21, mOutRect.right); 190 assertEquals(25, mOutRect.top); 191 assertEquals(35, mOutRect.bottom); 192 Gravity.apply(Gravity.CENTER_VERTICAL, 2, 10, mInRect, 5, 5, mOutRect); 193 assertEquals(24, mOutRect.left); 194 assertEquals(26, mOutRect.right); 195 assertEquals(30, mOutRect.top); 196 assertEquals(40, mOutRect.bottom); 197 applyGravity(Gravity.CENTER_VERTICAL, 2, 10, false /* LTR direction */); 198 assertEquals(19, mOutRect.left); 199 assertEquals(21, mOutRect.right); 200 assertEquals(25, mOutRect.top); 201 assertEquals(35, mOutRect.bottom); 202 applyGravity(Gravity.CENTER_VERTICAL, 2, 10, true /* RTL direction */); 203 assertEquals(19, mOutRect.left); 204 assertEquals(21, mOutRect.right); 205 assertEquals(25, mOutRect.top); 206 assertEquals(35, mOutRect.bottom); 207 208 Gravity.apply(Gravity.FILL_VERTICAL, 2, 10, mInRect, mOutRect); 209 assertEquals(19, mOutRect.left); 210 assertEquals(21, mOutRect.right); 211 assertEquals(20, mOutRect.top); 212 assertEquals(40, mOutRect.bottom); 213 Gravity.apply(Gravity.FILL_VERTICAL, 2, 10, mInRect, 5, 5, mOutRect); 214 assertEquals(24, mOutRect.left); 215 assertEquals(26, mOutRect.right); 216 assertEquals(25, mOutRect.top); 217 assertEquals(45, mOutRect.bottom); 218 applyGravity(Gravity.FILL_VERTICAL, 2, 10, false /* LTR direction */); 219 assertEquals(19, mOutRect.left); 220 assertEquals(21, mOutRect.right); 221 assertEquals(20, mOutRect.top); 222 assertEquals(40, mOutRect.bottom); 223 applyGravity(Gravity.FILL_VERTICAL, 2, 10, true /* RTL direction */); 224 assertEquals(19, mOutRect.left); 225 assertEquals(21, mOutRect.right); 226 assertEquals(20, mOutRect.top); 227 assertEquals(40, mOutRect.bottom); 228 229 Gravity.apply(Gravity.CENTER_HORIZONTAL, 2, 10, mInRect, mOutRect); 230 assertEquals(19, mOutRect.left); 231 assertEquals(21, mOutRect.right); 232 assertEquals(25, mOutRect.top); 233 assertEquals(35, mOutRect.bottom); 234 Gravity.apply(Gravity.CENTER_HORIZONTAL, 2, 10, mInRect, 5, 5, mOutRect); 235 assertEquals(24, mOutRect.left); 236 assertEquals(26, mOutRect.right); 237 assertEquals(30, mOutRect.top); 238 assertEquals(40, mOutRect.bottom); 239 applyGravity(Gravity.CENTER_HORIZONTAL, 2, 10, false /* LTR direction */); 240 assertEquals(19, mOutRect.left); 241 assertEquals(21, mOutRect.right); 242 assertEquals(25, mOutRect.top); 243 assertEquals(35, mOutRect.bottom); 244 applyGravity(Gravity.CENTER_HORIZONTAL, 2, 10, true /* RTL direction */); 245 assertEquals(19, mOutRect.left); 246 assertEquals(21, mOutRect.right); 247 assertEquals(25, mOutRect.top); 248 assertEquals(35, mOutRect.bottom); 249 250 Gravity.apply(Gravity.FILL_HORIZONTAL, 2, 10, mInRect, mOutRect); 251 assertEquals(10, mOutRect.left); 252 assertEquals(30, mOutRect.right); 253 assertEquals(25, mOutRect.top); 254 assertEquals(35, mOutRect.bottom); 255 Gravity.apply(Gravity.FILL_HORIZONTAL, 2, 10, mInRect, 5, 5, mOutRect); 256 assertEquals(15, mOutRect.left); 257 assertEquals(35, mOutRect.right); 258 assertEquals(30, mOutRect.top); 259 assertEquals(40, mOutRect.bottom); 260 applyGravity(Gravity.FILL_HORIZONTAL, 2, 10, false /* LTR direction */); 261 assertEquals(10, mOutRect.left); 262 assertEquals(30, mOutRect.right); 263 assertEquals(25, mOutRect.top); 264 assertEquals(35, mOutRect.bottom); 265 applyGravity(Gravity.FILL_HORIZONTAL, 2, 10, true /* RTL direction */); 266 assertEquals(10, mOutRect.left); 267 assertEquals(30, mOutRect.right); 268 assertEquals(25, mOutRect.top); 269 assertEquals(35, mOutRect.bottom); 270 } 271 272 @Test 273 public void testIsVertical() { 274 assertFalse(Gravity.isVertical(-1)); 275 assertTrue(Gravity.isVertical(Gravity.VERTICAL_GRAVITY_MASK)); 276 assertFalse(Gravity.isVertical(Gravity.NO_GRAVITY)); 277 } 278 279 @Test 280 public void testIsHorizontal() { 281 assertFalse(Gravity.isHorizontal(-1)); 282 assertTrue(Gravity.isHorizontal(Gravity.HORIZONTAL_GRAVITY_MASK)); 283 assertTrue(Gravity.isHorizontal(Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK)); 284 assertFalse(Gravity.isHorizontal(Gravity.NO_GRAVITY)); 285 } 286 287 @Test 288 public void testApplyDisplay() { 289 Rect display = new Rect(20, 30, 40, 50); 290 Rect inoutRect = new Rect(10, 10, 30, 60); 291 Gravity.applyDisplay(Gravity.DISPLAY_CLIP_VERTICAL, display, inoutRect); 292 assertEquals(20, inoutRect.left); 293 assertEquals(40, inoutRect.right); 294 assertEquals(30, inoutRect.top); 295 assertEquals(50, inoutRect.bottom); 296 297 display = new Rect(20, 30, 40, 50); 298 inoutRect = new Rect(10, 10, 30, 60); 299 Gravity.applyDisplay(Gravity.DISPLAY_CLIP_HORIZONTAL, display, inoutRect); 300 assertEquals(20, inoutRect.left); 301 assertEquals(30, inoutRect.right); 302 assertEquals(30, inoutRect.top); 303 assertEquals(50, inoutRect.bottom); 304 } 305 306 @Test 307 public void testGetAbsoluteGravity() { 308 verifyOneGravity(Gravity.LEFT, Gravity.LEFT, false); 309 verifyOneGravity(Gravity.LEFT, Gravity.LEFT, true); 310 311 verifyOneGravity(Gravity.RIGHT, Gravity.RIGHT, false); 312 verifyOneGravity(Gravity.RIGHT, Gravity.RIGHT, true); 313 314 verifyOneGravity(Gravity.TOP, Gravity.TOP, false); 315 verifyOneGravity(Gravity.TOP, Gravity.TOP, true); 316 317 verifyOneGravity(Gravity.BOTTOM, Gravity.BOTTOM, false); 318 verifyOneGravity(Gravity.BOTTOM, Gravity.BOTTOM, true); 319 320 verifyOneGravity(Gravity.CENTER_VERTICAL, Gravity.CENTER_VERTICAL, false); 321 verifyOneGravity(Gravity.CENTER_VERTICAL, Gravity.CENTER_VERTICAL, true); 322 323 verifyOneGravity(Gravity.CENTER_HORIZONTAL, Gravity.CENTER_HORIZONTAL, false); 324 verifyOneGravity(Gravity.CENTER_HORIZONTAL, Gravity.CENTER_HORIZONTAL, true); 325 326 verifyOneGravity(Gravity.CENTER, Gravity.CENTER, false); 327 verifyOneGravity(Gravity.CENTER, Gravity.CENTER, true); 328 329 verifyOneGravity(Gravity.FILL_VERTICAL, Gravity.FILL_VERTICAL, false); 330 verifyOneGravity(Gravity.FILL_VERTICAL, Gravity.FILL_VERTICAL, true); 331 332 verifyOneGravity(Gravity.FILL_HORIZONTAL, Gravity.FILL_HORIZONTAL, false); 333 verifyOneGravity(Gravity.FILL_HORIZONTAL, Gravity.FILL_HORIZONTAL, true); 334 335 verifyOneGravity(Gravity.FILL, Gravity.FILL, false); 336 verifyOneGravity(Gravity.FILL, Gravity.FILL, true); 337 338 verifyOneGravity(Gravity.CLIP_HORIZONTAL, Gravity.CLIP_HORIZONTAL, false); 339 verifyOneGravity(Gravity.CLIP_HORIZONTAL, Gravity.CLIP_HORIZONTAL, true); 340 341 verifyOneGravity(Gravity.CLIP_VERTICAL, Gravity.CLIP_VERTICAL, false); 342 verifyOneGravity(Gravity.CLIP_VERTICAL, Gravity.CLIP_VERTICAL, true); 343 344 verifyOneGravity(Gravity.LEFT, Gravity.START, false); 345 verifyOneGravity(Gravity.RIGHT, Gravity.START, true); 346 347 verifyOneGravity(Gravity.RIGHT, Gravity.END, false); 348 verifyOneGravity(Gravity.LEFT, Gravity.END, true); 349 } 350 351 private void verifyOneGravity(int expected, int initial, boolean isRtl) { 352 final int layoutDirection = isRtl ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR; 353 354 assertEquals(expected, Gravity.getAbsoluteGravity(initial, layoutDirection)); 355 } 356 } 357