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