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.widget.cts;
     18 
     19 import static org.junit.Assert.assertEquals;
     20 import static org.junit.Assert.assertNull;
     21 import static org.junit.Assert.assertSame;
     22 import static org.junit.Assert.assertTrue;
     23 
     24 import android.app.Activity;
     25 import android.support.test.annotation.UiThreadTest;
     26 import android.support.test.filters.MediumTest;
     27 import android.support.test.rule.ActivityTestRule;
     28 import android.support.test.runner.AndroidJUnit4;
     29 import android.util.AttributeSet;
     30 import android.util.Xml;
     31 import android.view.View;
     32 import android.view.ViewGroup.LayoutParams;
     33 import android.view.animation.AccelerateInterpolator;
     34 import android.view.animation.Animation;
     35 import android.view.animation.AnimationSet;
     36 import android.widget.RelativeLayout;
     37 import android.widget.ViewAnimator;
     38 
     39 import org.junit.Before;
     40 import org.junit.Rule;
     41 import org.junit.Test;
     42 import org.junit.runner.RunWith;
     43 import org.xmlpull.v1.XmlPullParser;
     44 
     45 @MediumTest
     46 @RunWith(AndroidJUnit4.class)
     47 public class ViewAnimatorTest {
     48     private Activity mActivity;
     49     private ViewAnimator mViewAnimator;
     50     private AttributeSet mAttributeSet;
     51 
     52     @Rule
     53     public ActivityTestRule<ViewAnimatorCtsActivity> mActivityRule =
     54             new ActivityTestRule<>(ViewAnimatorCtsActivity.class);
     55 
     56     @Before
     57     public void setup() {
     58         mActivity = mActivityRule.getActivity();
     59 
     60         XmlPullParser parser = mActivity.getResources().getXml(R.layout.viewanimator_layout);
     61         mAttributeSet = Xml.asAttributeSet(parser);
     62         mViewAnimator = new ViewAnimator(mActivity, mAttributeSet);
     63     }
     64 
     65     @Test
     66     public void testConstructor() {
     67         new ViewAnimator(mActivity);
     68         new ViewAnimator(mActivity, mAttributeSet);
     69     }
     70 
     71     @Test
     72     public void testAccessInAnimation() {
     73         AnimationSet expected = new AnimationSet(mActivity, mAttributeSet);
     74         assertNull(mViewAnimator.getInAnimation());
     75 
     76         mViewAnimator.setInAnimation(expected);
     77         assertSame(expected, mViewAnimator.getInAnimation());
     78 
     79         // input null as param
     80         mViewAnimator.setInAnimation(null);
     81         assertNull(mViewAnimator.getInAnimation());
     82 
     83         mViewAnimator.setInAnimation(mActivity, R.anim.anim_alpha);
     84         Animation animation = mViewAnimator.getInAnimation();
     85         assertTrue(animation.getInterpolator() instanceof AccelerateInterpolator);
     86         assertEquals(500, animation.getDuration());
     87     }
     88 
     89     @UiThreadTest
     90     @Test
     91     public void testShowNext() {
     92         final View v1 = mActivity.findViewById(R.id.ok);
     93         final View v2 = mActivity.findViewById(R.id.cancel);
     94         final View v3 = mActivity.findViewById(R.id.label);
     95         final View v4 = mActivity.findViewById(R.id.entry);
     96         final RelativeLayout parent = (RelativeLayout) v1.getParent();
     97 
     98         parent.removeView(v1);
     99         parent.removeView(v2);
    100         parent.removeView(v3);
    101         parent.removeView(v4);
    102         assertEquals(0, mViewAnimator.getChildCount());
    103 
    104         mViewAnimator.addView(v1);
    105         mViewAnimator.addView(v2);
    106         mViewAnimator.addView(v3);
    107         mViewAnimator.addView(v4);
    108         assertEquals(4, mViewAnimator.getChildCount());
    109 
    110         int current = 0;
    111 
    112         mViewAnimator.setDisplayedChild(current);
    113         assertEquals(current, mViewAnimator.getDisplayedChild());
    114 
    115         mViewAnimator.showNext();
    116         assertEquals(1, mViewAnimator.getDisplayedChild());
    117 
    118         mViewAnimator.showNext();
    119         assertEquals(2, mViewAnimator.getDisplayedChild());
    120 
    121         mViewAnimator.showNext();
    122         assertEquals(3, mViewAnimator.getDisplayedChild());
    123 
    124         mViewAnimator.removeAllViews();
    125         assertEquals(0, mViewAnimator.getChildCount());
    126     }
    127 
    128     @Test
    129     public void testSetAnimateFirstView() {
    130         mViewAnimator.setAnimateFirstView(true);
    131         mViewAnimator.setAnimateFirstView(false);
    132 
    133         // TODO: how to check
    134     }
    135 
    136     @UiThreadTest
    137     @Test
    138     public void testAccessDisplayedChild() {
    139         final View v1 = mActivity.findViewById(R.id.ok);
    140         final View v2 = mActivity.findViewById(R.id.cancel);
    141         final RelativeLayout parent = (RelativeLayout) v1.getParent();
    142 
    143         parent.removeView(v1);
    144         parent.removeView(v2);
    145         assertEquals(0, mViewAnimator.getChildCount());
    146 
    147         mViewAnimator.addView(v1);
    148         assertEquals(1, mViewAnimator.getChildCount());
    149 
    150         mViewAnimator.addView(v2);
    151         assertEquals(2, mViewAnimator.getChildCount());
    152 
    153         mViewAnimator.setDisplayedChild(0);
    154         assertEquals(0, mViewAnimator.getDisplayedChild());
    155 
    156         // set a negative value, then switch to getChildCount()-1.
    157         mViewAnimator.setDisplayedChild(-1);
    158         assertEquals(1, mViewAnimator.getDisplayedChild());
    159 
    160         // set larger than ChildCount, then switch to 0.
    161         mViewAnimator.setDisplayedChild(2);
    162         assertEquals(0, mViewAnimator.getDisplayedChild());
    163 
    164         mViewAnimator.setDisplayedChild(1);
    165         assertEquals(1, mViewAnimator.getDisplayedChild());
    166 
    167         mViewAnimator.removeAllViews();
    168         assertEquals(0, mViewAnimator.getChildCount());
    169     }
    170 
    171     @UiThreadTest
    172     @Test
    173     public void testAccessDisplayedChildBoundary() {
    174         final View v1 = mActivity.findViewById(R.id.ok);
    175         final View v2 = mActivity.findViewById(R.id.cancel);
    176         final RelativeLayout parent = (RelativeLayout) v1.getParent();
    177 
    178         parent.removeView(v1);
    179         parent.removeView(v2);
    180         assertEquals(0, mViewAnimator.getChildCount());
    181 
    182         mViewAnimator.addView(v1);
    183         assertEquals(1, mViewAnimator.getChildCount());
    184 
    185         mViewAnimator.addView(v2);
    186         assertEquals(2, mViewAnimator.getChildCount());
    187 
    188         int index = -1;
    189         mViewAnimator.setDisplayedChild(index);
    190         assertEquals(1, mViewAnimator.getDisplayedChild());
    191 
    192         index = 2;
    193         mViewAnimator.setDisplayedChild(index);
    194         assertEquals(0, mViewAnimator.getDisplayedChild());
    195 
    196         mViewAnimator.removeAllViews();
    197         assertEquals(0, mViewAnimator.getChildCount());
    198     }
    199 
    200     @UiThreadTest
    201     @Test
    202     public void testGetBaseline() {
    203         final View v1 = mActivity.findViewById(R.id.ok);
    204         final View v2 = mActivity.findViewById(R.id.cancel);
    205         final RelativeLayout parent = (RelativeLayout) v1.getParent();
    206 
    207         parent.removeView(v1);
    208         parent.removeView(v2);
    209         assertEquals(0, mViewAnimator.getChildCount());
    210 
    211         mViewAnimator.addView(v1);
    212         mViewAnimator.addView(v2);
    213         assertEquals(2, mViewAnimator.getChildCount());
    214 
    215         int expected = v1.getBaseline();
    216         mViewAnimator.setDisplayedChild(0);
    217         assertEquals(expected, mViewAnimator.getBaseline());
    218 
    219         expected = v2.getBaseline();
    220         mViewAnimator.setDisplayedChild(1);
    221         assertEquals(expected, mViewAnimator.getBaseline());
    222 
    223         mViewAnimator.removeAllViews();
    224         assertEquals(0, mViewAnimator.getChildCount());
    225     }
    226 
    227     @UiThreadTest
    228     @Test
    229     public void testShowPrevious() {
    230         final View v1 = mActivity.findViewById(R.id.ok);
    231         final View v2 = mActivity.findViewById(R.id.cancel);
    232         final View v3 = mActivity.findViewById(R.id.label);
    233         final View v4 = mActivity.findViewById(R.id.entry);
    234         final RelativeLayout parent = (RelativeLayout) v1.getParent();
    235 
    236         parent.removeView(v1);
    237         parent.removeView(v2);
    238         parent.removeView(v3);
    239         parent.removeView(v4);
    240         assertEquals(0, mViewAnimator.getChildCount());
    241 
    242         mViewAnimator.addView(v1);
    243         mViewAnimator.addView(v2);
    244         mViewAnimator.addView(v3);
    245         mViewAnimator.addView(v4);
    246         assertEquals(4, mViewAnimator.getChildCount());
    247 
    248         int current = 3;
    249 
    250         // set DisplayedChild by {@link mViewAnimator#setDisplayedChild(int)}
    251         mViewAnimator.setDisplayedChild(current);
    252         assertEquals(current, mViewAnimator.getDisplayedChild());
    253 
    254         mViewAnimator.showPrevious();
    255         assertEquals(2, mViewAnimator.getDisplayedChild());
    256 
    257         mViewAnimator.showPrevious();
    258         assertEquals(1, mViewAnimator.getDisplayedChild());
    259 
    260         mViewAnimator.showPrevious();
    261         assertEquals(0, mViewAnimator.getDisplayedChild());
    262 
    263         mViewAnimator.removeAllViews();
    264         assertEquals(0, mViewAnimator.getChildCount());
    265     }
    266 
    267     @UiThreadTest
    268     @Test
    269     public void testGetCurrentView() {
    270         final View v = mActivity.findViewById(R.id.label);
    271         final RelativeLayout parent = (RelativeLayout) v.getParent();
    272 
    273         parent.removeView(v);
    274         assertEquals(0, mViewAnimator.getChildCount());
    275 
    276         mViewAnimator.addView(v);
    277         assertEquals(1, mViewAnimator.getChildCount());
    278 
    279         int current = 0;
    280         mViewAnimator.setDisplayedChild(current);
    281         assertSame(v, mViewAnimator.getCurrentView());
    282 
    283         mViewAnimator.removeAllViews();
    284         assertEquals(0, mViewAnimator.getChildCount());
    285     }
    286 
    287     @UiThreadTest
    288     @Test
    289     public void testAddView() {
    290         final View v1 = mActivity.findViewById(R.id.ok);
    291         final View v2 = mActivity.findViewById(R.id.cancel);
    292         final RelativeLayout parent = (RelativeLayout) v1.getParent();
    293 
    294         parent.removeView(v1);
    295         parent.removeView(v2);
    296         assertEquals(0, mViewAnimator.getChildCount());
    297 
    298         LayoutParams p =
    299             new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    300         mViewAnimator.addView(v1, 0, p);
    301         assertEquals(1, mViewAnimator.getChildCount());
    302         assertEquals(0, mViewAnimator.indexOfChild(v1));
    303 
    304         mViewAnimator.addView(v2, 1, p);
    305         assertEquals(2, mViewAnimator.getChildCount());
    306         assertEquals(1, mViewAnimator.indexOfChild(v2));
    307 
    308         mViewAnimator.removeAllViews();
    309         assertEquals(0, mViewAnimator.getChildCount());
    310     }
    311 
    312     @Test
    313     public void testAccessOutAnimation() {
    314         AnimationSet expected = new AnimationSet(mActivity, mAttributeSet);
    315         assertNull(mViewAnimator.getOutAnimation());
    316 
    317         mViewAnimator.setOutAnimation(expected);
    318         assertSame(expected, mViewAnimator.getOutAnimation());
    319 
    320         mViewAnimator.setOutAnimation(null);
    321         assertNull(mViewAnimator.getOutAnimation());
    322 
    323         mViewAnimator.setOutAnimation(mActivity, R.anim.anim_alpha);
    324         Animation animation = mViewAnimator.getOutAnimation();
    325         assertTrue(animation.getInterpolator() instanceof AccelerateInterpolator);
    326         assertEquals(500, animation.getDuration());
    327     }
    328 
    329     @UiThreadTest
    330     @Test
    331     public void testRemoveViews() {
    332         final View v1 = mActivity.findViewById(R.id.ok);
    333         final View v2 = mActivity.findViewById(R.id.cancel);
    334         final View v3 = mActivity.findViewById(R.id.label);
    335         final View v4 = mActivity.findViewById(R.id.entry);
    336         final RelativeLayout parent = (RelativeLayout) v1.getParent();
    337 
    338         parent.removeView(v1);
    339         parent.removeView(v2);
    340         parent.removeView(v3);
    341         parent.removeView(v4);
    342         assertEquals(0, mViewAnimator.getChildCount());
    343 
    344         mViewAnimator.addView(v1);
    345         mViewAnimator.addView(v2);
    346         mViewAnimator.addView(v3);
    347         mViewAnimator.addView(v4);
    348         assertEquals(4, mViewAnimator.getChildCount());
    349 
    350         mViewAnimator.removeViewAt(3);
    351         assertEquals(3, mViewAnimator.getChildCount());
    352         assertSame(v1, mViewAnimator.getChildAt(0));
    353         assertSame(v2, mViewAnimator.getChildAt(1));
    354         assertSame(v3, mViewAnimator.getChildAt(2));
    355 
    356         mViewAnimator.removeView(v3);
    357         assertEquals(2, mViewAnimator.getChildCount());
    358         assertSame(v1, mViewAnimator.getChildAt(0));
    359         assertSame(v2, mViewAnimator.getChildAt(1));
    360 
    361         mViewAnimator.removeViewInLayout(v2);
    362         assertEquals(1, mViewAnimator.getChildCount());
    363         assertSame(v1, mViewAnimator.getChildAt(0));
    364 
    365         mViewAnimator.addView(v2);
    366         mViewAnimator.addView(v3);
    367         mViewAnimator.addView(v4);
    368         assertEquals(4, mViewAnimator.getChildCount());
    369 
    370         mViewAnimator.removeViews(0, 2);
    371         assertEquals(2, mViewAnimator.getChildCount());
    372 
    373         // the remain views should be v3, v4
    374         assertSame(v3, mViewAnimator.getChildAt(0));
    375         assertSame(v4, mViewAnimator.getChildAt(1));
    376 
    377         mViewAnimator.removeViewsInLayout(1, 1);
    378         assertEquals(1, mViewAnimator.getChildCount());
    379 
    380         // the remain view should be v3
    381         assertSame(v3, mViewAnimator.getChildAt(0));
    382 
    383         mViewAnimator.removeAllViews();
    384         assertEquals(0, mViewAnimator.getChildCount());
    385     }
    386 }
    387