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.assertFalse; 21 import static org.junit.Assert.assertSame; 22 import static org.junit.Assert.assertTrue; 23 24 import android.app.Activity; 25 import android.app.Instrumentation; 26 import android.os.SystemClock; 27 import android.support.test.InstrumentationRegistry; 28 import android.support.test.annotation.UiThreadTest; 29 import android.support.test.filters.LargeTest; 30 import android.support.test.filters.MediumTest; 31 import android.support.test.rule.ActivityTestRule; 32 import android.support.test.runner.AndroidJUnit4; 33 import android.util.AttributeSet; 34 import android.util.Xml; 35 import android.view.View; 36 import android.widget.TextView; 37 import android.widget.ViewFlipper; 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 /** 46 * Test {@link ViewFlipper}. 47 */ 48 @MediumTest 49 @RunWith(AndroidJUnit4.class) 50 public class ViewFlipperTest { 51 private Instrumentation mInstrumentation; 52 private Activity mActivity; 53 54 @Rule 55 public ActivityTestRule<ViewFlipperCtsActivity> mActivityRule = 56 new ActivityTestRule<>(ViewFlipperCtsActivity.class); 57 58 @Before 59 public void setup() { 60 mInstrumentation = InstrumentationRegistry.getInstrumentation(); 61 mActivity = mActivityRule.getActivity(); 62 } 63 64 @UiThreadTest 65 @Test 66 public void testConstructor() { 67 new ViewFlipper(mActivity); 68 69 new ViewFlipper(mActivity, null); 70 71 XmlPullParser parser = mActivity.getResources().getXml(R.layout.viewflipper_layout); 72 AttributeSet attrs = Xml.asAttributeSet(parser); 73 new ViewFlipper(mActivity, attrs); 74 } 75 76 @UiThreadTest 77 @Test(expected=NullPointerException.class) 78 public void testConstructorNullContext() { 79 new ViewFlipper(null, null); 80 } 81 82 @UiThreadTest 83 @Test 84 public void testSetFlipInterval() { 85 ViewFlipper viewFlipper = new ViewFlipper(mActivity); 86 viewFlipper.setFlipInterval(0); 87 viewFlipper.setFlipInterval(-1); 88 } 89 90 @LargeTest 91 @Test 92 public void testViewFlipper() throws Throwable { 93 final int flipInterval = mActivity.getResources().getInteger( 94 R.integer.view_flipper_interval); 95 96 mActivityRule.runOnUiThread(() -> { 97 ViewFlipper viewFlipper = 98 (ViewFlipper) mActivity.findViewById(R.id.viewflipper_test); 99 100 TextView iv1 = (TextView) mActivity.findViewById(R.id.viewflipper_textview1); 101 TextView iv2 = (TextView) mActivity.findViewById(R.id.viewflipper_textview2); 102 103 assertFalse(viewFlipper.isFlipping()); 104 assertSame(iv1, viewFlipper.getCurrentView()); 105 106 viewFlipper.startFlipping(); 107 assertTrue(viewFlipper.isFlipping()); 108 assertSame(iv1, viewFlipper.getCurrentView()); 109 assertEquals(View.VISIBLE, iv1.getVisibility()); 110 assertEquals(View.GONE, iv2.getVisibility()); 111 }); 112 113 // wait for a longer time to make sure the view flipping is completed. 114 SystemClock.sleep(flipInterval + 200); 115 mInstrumentation.waitForIdleSync(); 116 mActivityRule.runOnUiThread(() -> { 117 ViewFlipper viewFlipper = 118 (ViewFlipper) mActivity.findViewById(R.id.viewflipper_test); 119 120 TextView iv1 = (TextView) mActivity.findViewById(R.id.viewflipper_textview1); 121 TextView iv2 = (TextView) mActivity.findViewById(R.id.viewflipper_textview2); 122 123 assertSame(iv2, viewFlipper.getCurrentView()); 124 assertEquals(View.GONE, iv1.getVisibility()); 125 assertEquals(View.VISIBLE, iv2.getVisibility()); 126 }); 127 128 SystemClock.sleep(flipInterval + 200); 129 mInstrumentation.waitForIdleSync(); 130 mActivityRule.runOnUiThread(() -> { 131 ViewFlipper viewFlipper = 132 (ViewFlipper) mActivity.findViewById(R.id.viewflipper_test); 133 134 TextView iv1 = (TextView) mActivity.findViewById(R.id.viewflipper_textview1); 135 TextView iv2 = (TextView) mActivity.findViewById(R.id.viewflipper_textview2); 136 137 assertSame(iv1, viewFlipper.getCurrentView()); 138 assertEquals(View.VISIBLE, iv1.getVisibility()); 139 assertEquals(View.GONE, iv2.getVisibility()); 140 141 viewFlipper.stopFlipping(); 142 assertFalse(viewFlipper.isFlipping()); 143 }); 144 } 145 } 146