Home | History | Annotate | Download | only in cts
      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