Home | History | Annotate | Download | only in cts
      1 /*
      2  * Copyright (C) 2009 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 com.android.cts.stub.R;
     20 
     21 
     22 import org.xmlpull.v1.XmlPullParser;
     23 import org.xmlpull.v1.XmlPullParserException;
     24 
     25 import android.app.Activity;
     26 import android.content.Context;
     27 import android.cts.util.PollingCheck;
     28 import android.test.ActivityInstrumentationTestCase2;
     29 import android.test.UiThreadTest;
     30 import android.util.AttributeSet;
     31 import android.util.Xml;
     32 import android.view.MotionEvent;
     33 import android.view.View;
     34 import android.widget.ImageView;
     35 import android.widget.SlidingDrawer;
     36 import android.widget.TextView;
     37 import android.widget.SlidingDrawer.OnDrawerCloseListener;
     38 import android.widget.SlidingDrawer.OnDrawerOpenListener;
     39 import android.widget.SlidingDrawer.OnDrawerScrollListener;
     40 
     41 import java.io.IOException;
     42 
     43 /**
     44  * Test {@link SlidingDrawer}.
     45  */
     46 public class SlidingDrawerTest
     47         extends ActivityInstrumentationTestCase2<SlidingDrawerStubActivity> {
     48 
     49     private static final long TEST_TIMEOUT = 5000L;
     50     private Activity mActivity;
     51     private Object mLock;
     52 
     53     public SlidingDrawerTest() {
     54         super("com.android.cts.stub", SlidingDrawerStubActivity.class);
     55     }
     56 
     57     @Override
     58     protected void setUp() throws Exception {
     59         super.setUp();
     60         mActivity = getActivity();
     61         mLock = new Object();
     62     }
     63 
     64     public void testConstructor() throws XmlPullParserException, IOException {
     65         XmlPullParser parser = mActivity.getResources().getLayout(R.layout.sliding_drawer_layout);
     66         AttributeSet attrs = Xml.asAttributeSet(parser);
     67 
     68         try {
     69             new SlidingDrawer(mActivity, attrs);
     70             fail("did not throw IllegalArgumentException");
     71         } catch (IllegalArgumentException e) {
     72             // expected
     73         }
     74 
     75         try {
     76             new SlidingDrawer(mActivity, attrs, 0);
     77             fail("did not throw IllegalArgumentException");
     78         } catch (IllegalArgumentException e) {
     79             // expected
     80         }
     81     }
     82 
     83     public void testGetHandle() {
     84         SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
     85         View handle = drawer.getHandle();
     86         assertTrue(handle instanceof ImageView);
     87         assertEquals(R.id.handle, handle.getId());
     88     }
     89 
     90     public void testGetContent() {
     91         SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
     92         View content = drawer.getContent();
     93         assertTrue(content instanceof TextView);
     94         assertEquals(R.id.content, content.getId());
     95     }
     96 
     97     @UiThreadTest
     98     public void testOpenAndClose() {
     99         SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
    100         View content = drawer.getContent();
    101         assertFalse(drawer.isOpened());
    102         assertEquals(View.GONE, content.getVisibility());
    103 
    104         drawer.open();
    105         assertTrue(drawer.isOpened());
    106         assertEquals(View.VISIBLE, content.getVisibility());
    107 
    108         drawer.close();
    109         assertFalse(drawer.isOpened());
    110         assertEquals(View.GONE, content.getVisibility());
    111     }
    112 
    113     public void testAnimateOpenAndClose() throws Throwable {
    114         final SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
    115         View content = drawer.getContent();
    116         assertFalse(drawer.isMoving());
    117         assertFalse(drawer.isOpened());
    118         assertEquals(View.GONE, content.getVisibility());
    119 
    120         runTestOnUiThread(new Runnable() {
    121             public void run() {
    122                 drawer.animateOpen();
    123             }
    124         });
    125         assertTrue(drawer.isMoving());
    126         assertOpened(false, drawer);
    127         assertEquals(View.GONE, content.getVisibility());
    128 
    129         new PollingCheck() {
    130             @Override
    131             protected boolean check() {
    132                 return !drawer.isMoving();
    133             }
    134         }.run();
    135         assertOpened(true, drawer);
    136         assertEquals(View.VISIBLE, content.getVisibility());
    137 
    138         runTestOnUiThread(new Runnable() {
    139             public void run() {
    140                 drawer.animateClose();
    141             }
    142         });
    143         assertTrue(drawer.isMoving());
    144         assertOpened(true, drawer);
    145         assertEquals(View.GONE, content.getVisibility());
    146 
    147         new PollingCheck() {
    148             @Override
    149             protected boolean check() {
    150                 return !drawer.isMoving();
    151             }
    152         }.run();
    153         assertOpened(false, drawer);
    154         assertEquals(View.GONE, content.getVisibility());
    155     }
    156 
    157     public void testAnimateToggle() throws Throwable {
    158         final SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
    159         View content = drawer.getContent();
    160         assertFalse(drawer.isMoving());
    161         assertFalse(drawer.isOpened());
    162         assertEquals(View.GONE, content.getVisibility());
    163 
    164         runTestOnUiThread(new Runnable() {
    165             public void run() {
    166                 drawer.animateToggle();
    167             }
    168         });
    169         assertTrue(drawer.isMoving());
    170         assertOpened(false, drawer);
    171         assertEquals(View.GONE, content.getVisibility());
    172 
    173         new PollingCheck() {
    174             @Override
    175             protected boolean check() {
    176                 return !drawer.isMoving();
    177             }
    178         }.run();
    179         assertOpened(true, drawer);
    180         assertEquals(View.VISIBLE, content.getVisibility());
    181 
    182         runTestOnUiThread(new Runnable() {
    183             public void run() {
    184                 drawer.animateToggle();
    185             }
    186         });
    187         assertTrue(drawer.isMoving());
    188         assertOpened(true, drawer);
    189         assertEquals(View.GONE, content.getVisibility());
    190 
    191         new PollingCheck() {
    192             @Override
    193             protected boolean check() {
    194                 return !drawer.isMoving();
    195             }
    196         }.run();
    197         assertOpened(false, drawer);
    198         assertEquals(View.GONE, content.getVisibility());
    199     }
    200 
    201     private void assertOpened(final boolean opened, final SlidingDrawer drawer) {
    202         new PollingCheck() {
    203             @Override
    204             protected boolean check() {
    205                 return drawer.isOpened() == opened;
    206             }
    207         }.run();
    208     }
    209 
    210     @UiThreadTest
    211     public void testToggle() {
    212         SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
    213         View content = drawer.getContent();
    214         assertFalse(drawer.isOpened());
    215         assertEquals(View.GONE, content.getVisibility());
    216 
    217         drawer.toggle();
    218         assertTrue(drawer.isOpened());
    219         assertEquals(View.VISIBLE, content.getVisibility());
    220 
    221         drawer.toggle();
    222         assertFalse(drawer.isOpened());
    223         assertEquals(View.GONE, content.getVisibility());
    224     }
    225 
    226     @UiThreadTest
    227     public void testLockAndUnlock() {
    228         SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
    229         View handle = drawer.getHandle();
    230         View content = drawer.getContent();
    231         assertFalse(drawer.isOpened());
    232         assertEquals(View.GONE, content.getVisibility());
    233 
    234         handle.performClick();
    235         assertTrue(drawer.isOpened());
    236         assertEquals(View.VISIBLE, content.getVisibility());
    237 
    238         handle.performClick();
    239         assertFalse(drawer.isOpened());
    240         assertEquals(View.GONE, content.getVisibility());
    241 
    242         drawer.lock();
    243         handle.performClick();
    244         assertFalse(drawer.isOpened());
    245         assertEquals(View.GONE, content.getVisibility());
    246 
    247         drawer.unlock();
    248         handle.performClick();
    249         assertTrue(drawer.isOpened());
    250         assertEquals(View.VISIBLE, content.getVisibility());
    251     }
    252 
    253     @UiThreadTest
    254     public void testSetOnDrawerOpenListener() {
    255         SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
    256         MockOnDrawerOpenListener listener = new MockOnDrawerOpenListener();
    257         drawer.setOnDrawerOpenListener(listener);
    258 
    259         assertFalse(listener.hadOpenedDrawer());
    260 
    261         drawer.open();
    262         assertTrue(listener.hadOpenedDrawer());
    263     }
    264 
    265     @UiThreadTest
    266     public void testSetOnDrawerCloseListener() {
    267         SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
    268         MockOnDrawerCloseListener listener = new MockOnDrawerCloseListener();
    269         drawer.setOnDrawerCloseListener(listener);
    270 
    271         assertFalse(listener.hadClosedDrawer());
    272 
    273         drawer.open();
    274         assertFalse(listener.hadClosedDrawer());
    275 
    276         drawer.close();
    277         assertTrue(listener.hadClosedDrawer());
    278     }
    279 
    280     public void testSetOnDrawerScrollListener() throws Throwable {
    281         final SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
    282         MockOnDrawerScrollListener listener = new MockOnDrawerScrollListener();
    283         drawer.setOnDrawerScrollListener(listener);
    284         assertFalse(listener.hadStartedScroll());
    285         assertFalse(listener.hadEndedScroll());
    286 
    287         runTestOnUiThread(new Runnable() {
    288             public void run() {
    289                 drawer.animateOpen();
    290             }
    291         });
    292         if ( !listener.hadStartedScroll() ) {
    293             synchronized (mLock) {
    294                 mLock.wait(TEST_TIMEOUT);
    295             }
    296         }
    297         assertTrue(listener.hadStartedScroll());
    298 
    299         if ( !listener.hadEndedScroll() ) {
    300             synchronized (mLock) {
    301                 mLock.wait(TEST_TIMEOUT);
    302             }
    303         }
    304         assertTrue(listener.hadStartedScroll());
    305         assertTrue(listener.hadEndedScroll());
    306     }
    307 
    308     public void testOnLayout() {
    309         // onLayout() is implementation details, do NOT test
    310     }
    311 
    312     public void testOnMeasure() {
    313         // onMeasure() is implementation details, do NOT test
    314     }
    315 
    316     public void testOnFinishInflate() {
    317         // onFinishInflate() is implementation details, do NOT test
    318     }
    319 
    320     public void testDispatchDraw() {
    321         // dispatchDraw() is implementation details, do NOT test
    322     }
    323 
    324     public void testOnInterceptTouchEvent() {
    325         // onInterceptTouchEvent() is implementation details, do NOT test
    326     }
    327 
    328     public void testOnTouchEvent() {
    329         // onTouchEvent() is implementation details, do NOT test
    330     }
    331 
    332     private static final class MockOnDrawerOpenListener implements OnDrawerOpenListener {
    333         private boolean mHadOpenedDrawer = false;
    334 
    335         public void onDrawerOpened() {
    336             mHadOpenedDrawer = true;
    337         }
    338 
    339         public boolean hadOpenedDrawer() {
    340             return mHadOpenedDrawer;
    341         }
    342     }
    343 
    344     private static final class MockOnDrawerCloseListener implements OnDrawerCloseListener {
    345         private boolean mHadClosedDrawer = false;
    346 
    347         public void onDrawerClosed() {
    348             mHadClosedDrawer = true;
    349         }
    350 
    351         public boolean hadClosedDrawer() {
    352             return mHadClosedDrawer;
    353         }
    354     }
    355 
    356     private final class MockOnDrawerScrollListener implements OnDrawerScrollListener {
    357         private boolean mHadEndedScroll = false;
    358         private boolean mHadStartedScroll = false;
    359 
    360         public void onScrollEnded() {
    361             synchronized (mLock) {
    362                 assertTrue(mHadStartedScroll);
    363                 mHadEndedScroll = true;
    364                 mLock.notify();
    365             }
    366         }
    367 
    368         public void onScrollStarted() {
    369             synchronized (mLock) {
    370                 mHadStartedScroll = true;
    371                 mLock.notify();
    372             }
    373         }
    374 
    375         public boolean hadEndedScroll() {
    376             return mHadEndedScroll;
    377         }
    378 
    379         public boolean hadStartedScroll() {
    380             return mHadStartedScroll;
    381         }
    382     }
    383 }
    384