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 import dalvik.annotation.TestLevel;
     22 import dalvik.annotation.TestTargetClass;
     23 import dalvik.annotation.TestTargetNew;
     24 import dalvik.annotation.TestTargets;
     25 
     26 import org.xmlpull.v1.XmlPullParser;
     27 import org.xmlpull.v1.XmlPullParserException;
     28 
     29 import android.app.Activity;
     30 import android.content.Context;
     31 import android.test.ActivityInstrumentationTestCase2;
     32 import android.test.UiThreadTest;
     33 import android.util.AttributeSet;
     34 import android.util.Xml;
     35 import android.view.MotionEvent;
     36 import android.view.View;
     37 import android.view.animation.cts.DelayedCheck;
     38 import android.widget.ImageView;
     39 import android.widget.SlidingDrawer;
     40 import android.widget.TextView;
     41 import android.widget.SlidingDrawer.OnDrawerCloseListener;
     42 import android.widget.SlidingDrawer.OnDrawerOpenListener;
     43 import android.widget.SlidingDrawer.OnDrawerScrollListener;
     44 
     45 import java.io.IOException;
     46 
     47 /**
     48  * Test {@link SlidingDrawer}.
     49  */
     50 @TestTargetClass(SlidingDrawer.class)
     51 public class SlidingDrawerTest
     52         extends ActivityInstrumentationTestCase2<SlidingDrawerStubActivity> {
     53 
     54     private static final long TEST_TIMEOUT = 5000L;
     55     private Activity mActivity;
     56     private Object mLock;
     57 
     58     public SlidingDrawerTest() {
     59         super("com.android.cts.stub", SlidingDrawerStubActivity.class);
     60     }
     61 
     62     @Override
     63     protected void setUp() throws Exception {
     64         super.setUp();
     65         mActivity = getActivity();
     66         mLock = new Object();
     67     }
     68 
     69     @TestTargets({
     70         @TestTargetNew(
     71             level = TestLevel.COMPLETE,
     72             method = "SlidingDrawer",
     73             args = {Context.class, AttributeSet.class}
     74         ),
     75         @TestTargetNew(
     76             level = TestLevel.COMPLETE,
     77             method = "SlidingDrawer",
     78             args = {Context.class, AttributeSet.class, int.class}
     79         )
     80     })
     81     public void testConstructor() throws XmlPullParserException, IOException {
     82         XmlPullParser parser = mActivity.getResources().getLayout(R.layout.sliding_drawer_layout);
     83         AttributeSet attrs = Xml.asAttributeSet(parser);
     84 
     85         try {
     86             new SlidingDrawer(mActivity, attrs);
     87             fail("did not throw IllegalArgumentException");
     88         } catch (IllegalArgumentException e) {
     89             // expected
     90         }
     91 
     92         try {
     93             new SlidingDrawer(mActivity, attrs, 0);
     94             fail("did not throw IllegalArgumentException");
     95         } catch (IllegalArgumentException e) {
     96             // expected
     97         }
     98     }
     99 
    100     @TestTargetNew(
    101         level = TestLevel.COMPLETE,
    102         method = "getHandle",
    103         args = {}
    104     )
    105     public void testGetHandle() {
    106         SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
    107         View handle = drawer.getHandle();
    108         assertTrue(handle instanceof ImageView);
    109         assertEquals(R.id.handle, handle.getId());
    110     }
    111 
    112     @TestTargetNew(
    113         level = TestLevel.COMPLETE,
    114         method = "getContent",
    115         args = {}
    116     )
    117     public void testGetContent() {
    118         SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
    119         View content = drawer.getContent();
    120         assertTrue(content instanceof TextView);
    121         assertEquals(R.id.content, content.getId());
    122     }
    123 
    124     @TestTargets({
    125         @TestTargetNew(
    126             level = TestLevel.COMPLETE,
    127             method = "open",
    128             args = {}
    129         ),
    130         @TestTargetNew(
    131             level = TestLevel.COMPLETE,
    132             method = "close",
    133             args = {}
    134         ),
    135         @TestTargetNew(
    136             level = TestLevel.COMPLETE,
    137             method = "isOpened",
    138             args = {}
    139         )
    140     })
    141     @UiThreadTest
    142     public void testOpenAndClose() {
    143         SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
    144         View content = drawer.getContent();
    145         assertFalse(drawer.isOpened());
    146         assertEquals(View.GONE, content.getVisibility());
    147 
    148         drawer.open();
    149         assertTrue(drawer.isOpened());
    150         assertEquals(View.VISIBLE, content.getVisibility());
    151 
    152         drawer.close();
    153         assertFalse(drawer.isOpened());
    154         assertEquals(View.GONE, content.getVisibility());
    155     }
    156 
    157     @TestTargets({
    158         @TestTargetNew(
    159             level = TestLevel.COMPLETE,
    160             method = "animateOpen",
    161             args = {}
    162         ),
    163         @TestTargetNew(
    164             level = TestLevel.COMPLETE,
    165             method = "animateClose",
    166             args = {}
    167         ),
    168         @TestTargetNew(
    169             level = TestLevel.COMPLETE,
    170             method = "isOpened",
    171             args = {}
    172         ),
    173         @TestTargetNew(
    174             level = TestLevel.COMPLETE,
    175             method = "isMoving",
    176             args = {}
    177         )
    178     })
    179     public void testAnimateOpenAndClose() throws Throwable {
    180         final SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
    181         View content = drawer.getContent();
    182         assertFalse(drawer.isMoving());
    183         assertFalse(drawer.isOpened());
    184         assertEquals(View.GONE, content.getVisibility());
    185 
    186         runTestOnUiThread(new Runnable() {
    187             public void run() {
    188                 drawer.animateOpen();
    189             }
    190         });
    191         assertTrue(drawer.isMoving());
    192         assertFalse(drawer.isOpened());
    193         assertEquals(View.GONE, content.getVisibility());
    194 
    195         new DelayedCheck() {
    196             @Override
    197             protected boolean check() {
    198                 return !drawer.isMoving();
    199             }
    200         }.run();
    201         assertTrue(drawer.isOpened());
    202         assertEquals(View.VISIBLE, content.getVisibility());
    203 
    204         runTestOnUiThread(new Runnable() {
    205             public void run() {
    206                 drawer.animateClose();
    207             }
    208         });
    209         assertTrue(drawer.isMoving());
    210         assertTrue(drawer.isOpened());
    211         assertEquals(View.GONE, content.getVisibility());
    212 
    213         new DelayedCheck() {
    214             @Override
    215             protected boolean check() {
    216                 return !drawer.isMoving();
    217             }
    218         }.run();
    219         assertFalse(drawer.isOpened());
    220         assertEquals(View.GONE, content.getVisibility());
    221     }
    222 
    223     @TestTargets({
    224         @TestTargetNew(
    225             level = TestLevel.COMPLETE,
    226             method = "animateToggle",
    227             args = {}
    228         ),
    229         @TestTargetNew(
    230             level = TestLevel.COMPLETE,
    231             method = "isOpened",
    232             args = {}
    233         ),
    234         @TestTargetNew(
    235             level = TestLevel.COMPLETE,
    236             method = "isMoving",
    237             args = {}
    238         )
    239     })
    240     public void testAnimateToggle() throws Throwable {
    241         final SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
    242         View content = drawer.getContent();
    243         assertFalse(drawer.isMoving());
    244         assertFalse(drawer.isOpened());
    245         assertEquals(View.GONE, content.getVisibility());
    246 
    247         runTestOnUiThread(new Runnable() {
    248             public void run() {
    249                 drawer.animateToggle();
    250             }
    251         });
    252         assertTrue(drawer.isMoving());
    253         assertFalse(drawer.isOpened());
    254         assertEquals(View.GONE, content.getVisibility());
    255 
    256         new DelayedCheck() {
    257             @Override
    258             protected boolean check() {
    259                 return !drawer.isMoving();
    260             }
    261         }.run();
    262         assertTrue(drawer.isOpened());
    263         assertEquals(View.VISIBLE, content.getVisibility());
    264 
    265         runTestOnUiThread(new Runnable() {
    266             public void run() {
    267                 drawer.animateToggle();
    268             }
    269         });
    270         assertTrue(drawer.isMoving());
    271         assertTrue(drawer.isOpened());
    272         assertEquals(View.GONE, content.getVisibility());
    273 
    274         new DelayedCheck() {
    275             @Override
    276             protected boolean check() {
    277                 return !drawer.isMoving();
    278             }
    279         }.run();
    280         assertFalse(drawer.isOpened());
    281         assertEquals(View.GONE, content.getVisibility());
    282     }
    283 
    284     @TestTargets({
    285         @TestTargetNew(
    286             level = TestLevel.COMPLETE,
    287             method = "toggle",
    288             args = {}
    289         ),
    290         @TestTargetNew(
    291             level = TestLevel.COMPLETE,
    292             method = "isOpened",
    293             args = {}
    294         )
    295     })
    296     @UiThreadTest
    297     public void testToggle() {
    298         SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
    299         View content = drawer.getContent();
    300         assertFalse(drawer.isOpened());
    301         assertEquals(View.GONE, content.getVisibility());
    302 
    303         drawer.toggle();
    304         assertTrue(drawer.isOpened());
    305         assertEquals(View.VISIBLE, content.getVisibility());
    306 
    307         drawer.toggle();
    308         assertFalse(drawer.isOpened());
    309         assertEquals(View.GONE, content.getVisibility());
    310     }
    311 
    312     @TestTargets({
    313         @TestTargetNew(
    314             level = TestLevel.COMPLETE,
    315             method = "lock",
    316             args = {}
    317         ),
    318         @TestTargetNew(
    319             level = TestLevel.COMPLETE,
    320             method = "unlock",
    321             args = {}
    322         )
    323     })
    324     @UiThreadTest
    325     public void testLockAndUnlock() {
    326         SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
    327         View handle = drawer.getHandle();
    328         View content = drawer.getContent();
    329         assertFalse(drawer.isOpened());
    330         assertEquals(View.GONE, content.getVisibility());
    331 
    332         handle.performClick();
    333         assertTrue(drawer.isOpened());
    334         assertEquals(View.VISIBLE, content.getVisibility());
    335 
    336         handle.performClick();
    337         assertFalse(drawer.isOpened());
    338         assertEquals(View.GONE, content.getVisibility());
    339 
    340         drawer.lock();
    341         handle.performClick();
    342         assertFalse(drawer.isOpened());
    343         assertEquals(View.GONE, content.getVisibility());
    344 
    345         drawer.unlock();
    346         handle.performClick();
    347         assertTrue(drawer.isOpened());
    348         assertEquals(View.VISIBLE, content.getVisibility());
    349     }
    350 
    351     @TestTargetNew(
    352         level = TestLevel.COMPLETE,
    353         method = "setOnDrawerOpenListener",
    354         args = {android.widget.SlidingDrawer.OnDrawerOpenListener.class}
    355     )
    356     @UiThreadTest
    357     public void testSetOnDrawerOpenListener() {
    358         SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
    359         MockOnDrawerOpenListener listener = new MockOnDrawerOpenListener();
    360         drawer.setOnDrawerOpenListener(listener);
    361 
    362         assertFalse(listener.hadOpenedDrawer());
    363 
    364         drawer.open();
    365         assertTrue(listener.hadOpenedDrawer());
    366     }
    367 
    368     @TestTargetNew(
    369         level = TestLevel.COMPLETE,
    370         method = "setOnDrawerCloseListener",
    371         args = {android.widget.SlidingDrawer.OnDrawerCloseListener.class}
    372     )
    373     @UiThreadTest
    374     public void testSetOnDrawerCloseListener() {
    375         SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
    376         MockOnDrawerCloseListener listener = new MockOnDrawerCloseListener();
    377         drawer.setOnDrawerCloseListener(listener);
    378 
    379         assertFalse(listener.hadClosedDrawer());
    380 
    381         drawer.open();
    382         assertFalse(listener.hadClosedDrawer());
    383 
    384         drawer.close();
    385         assertTrue(listener.hadClosedDrawer());
    386     }
    387 
    388     @TestTargetNew(
    389         level = TestLevel.COMPLETE,
    390         method = "setOnDrawerScrollListener",
    391         args = {android.widget.SlidingDrawer.OnDrawerScrollListener.class}
    392     )
    393     public void testSetOnDrawerScrollListener() throws Throwable {
    394         final SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
    395         MockOnDrawerScrollListener listener = new MockOnDrawerScrollListener();
    396         drawer.setOnDrawerScrollListener(listener);
    397         assertFalse(listener.hadStartedScroll());
    398         assertFalse(listener.hadEndedScroll());
    399 
    400         runTestOnUiThread(new Runnable() {
    401             public void run() {
    402                 drawer.animateOpen();
    403             }
    404         });
    405         if ( !listener.hadStartedScroll() ) {
    406             synchronized (mLock) {
    407                 mLock.wait(TEST_TIMEOUT);
    408             }
    409         }
    410         assertTrue(listener.hadStartedScroll());
    411 
    412         if ( !listener.hadEndedScroll() ) {
    413             synchronized (mLock) {
    414                 mLock.wait(TEST_TIMEOUT);
    415             }
    416         }
    417         assertTrue(listener.hadStartedScroll());
    418         assertTrue(listener.hadEndedScroll());
    419     }
    420 
    421     @TestTargetNew(
    422         level = TestLevel.NOT_NECESSARY,
    423         method = "onLayout",
    424         args = {boolean.class, int.class, int.class, int.class, int.class}
    425     )
    426     public void testOnLayout() {
    427         // onLayout() is implementation details, do NOT test
    428     }
    429 
    430     @TestTargetNew(
    431         level = TestLevel.NOT_NECESSARY,
    432         method = "onMeasure",
    433         args = {int.class, int.class}
    434     )
    435     public void testOnMeasure() {
    436         // onMeasure() is implementation details, do NOT test
    437     }
    438 
    439     @TestTargetNew(
    440         level = TestLevel.NOT_NECESSARY,
    441         method = "onFinishInflate",
    442         args = {}
    443     )
    444     public void testOnFinishInflate() {
    445         // onFinishInflate() is implementation details, do NOT test
    446     }
    447 
    448     @TestTargetNew(
    449         level = TestLevel.NOT_NECESSARY,
    450         method = "dispatchDraw",
    451         args = {android.graphics.Canvas.class}
    452     )
    453     public void testDispatchDraw() {
    454         // dispatchDraw() is implementation details, do NOT test
    455     }
    456 
    457     @TestTargetNew(
    458         level = TestLevel.NOT_NECESSARY,
    459         method = "onInterceptTouchEvent",
    460         args = {MotionEvent.class}
    461     )
    462     public void testOnInterceptTouchEvent() {
    463         // onInterceptTouchEvent() is implementation details, do NOT test
    464     }
    465 
    466     @TestTargetNew(
    467         level = TestLevel.NOT_NECESSARY,
    468         method = "onTouchEvent",
    469         args = {MotionEvent.class}
    470     )
    471     public void testOnTouchEvent() {
    472         // onTouchEvent() is implementation details, do NOT test
    473     }
    474 
    475     private static final class MockOnDrawerOpenListener implements OnDrawerOpenListener {
    476         private boolean mHadOpenedDrawer = false;
    477 
    478         public void onDrawerOpened() {
    479             mHadOpenedDrawer = true;
    480         }
    481 
    482         public boolean hadOpenedDrawer() {
    483             return mHadOpenedDrawer;
    484         }
    485     }
    486 
    487     private static final class MockOnDrawerCloseListener implements OnDrawerCloseListener {
    488         private boolean mHadClosedDrawer = false;
    489 
    490         public void onDrawerClosed() {
    491             mHadClosedDrawer = true;
    492         }
    493 
    494         public boolean hadClosedDrawer() {
    495             return mHadClosedDrawer;
    496         }
    497     }
    498 
    499     private final class MockOnDrawerScrollListener implements OnDrawerScrollListener {
    500         private boolean mHadEndedScroll = false;
    501         private boolean mHadStartedScroll = false;
    502 
    503         public void onScrollEnded() {
    504             synchronized (mLock) {
    505                 assertTrue(mHadStartedScroll);
    506                 mHadEndedScroll = true;
    507                 mLock.notify();
    508             }
    509         }
    510 
    511         public void onScrollStarted() {
    512             synchronized (mLock) {
    513                 mHadStartedScroll = true;
    514                 mLock.notify();
    515             }
    516         }
    517 
    518         public boolean hadEndedScroll() {
    519             return mHadEndedScroll;
    520         }
    521 
    522         public boolean hadStartedScroll() {
    523             return mHadStartedScroll;
    524         }
    525     }
    526 }
    527