blob: 9fa68e4856b211f48e087a18572027c20dad9f92 [file] [log] [blame]
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.widget.cts;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import android.app.Activity;
import android.util.AttributeSet;
import android.util.Xml;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.widget.RelativeLayout;
import android.widget.ViewAnimator;
import androidx.test.annotation.UiThreadTest;
import androidx.test.filters.MediumTest;
import androidx.test.rule.ActivityTestRule;
import androidx.test.runner.AndroidJUnit4;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.xmlpull.v1.XmlPullParser;
@MediumTest
@RunWith(AndroidJUnit4.class)
public class ViewAnimatorTest {
private Activity mActivity;
private ViewAnimator mViewAnimator;
private AttributeSet mAttributeSet;
@Rule
public ActivityTestRule<ViewAnimatorCtsActivity> mActivityRule =
new ActivityTestRule<>(ViewAnimatorCtsActivity.class);
@Before
public void setup() {
mActivity = mActivityRule.getActivity();
XmlPullParser parser = mActivity.getResources().getXml(R.layout.viewanimator_layout);
mAttributeSet = Xml.asAttributeSet(parser);
mViewAnimator = new ViewAnimator(mActivity, mAttributeSet);
}
@Test
public void testConstructor() {
new ViewAnimator(mActivity);
new ViewAnimator(mActivity, mAttributeSet);
}
@Test
public void testAccessInAnimation() {
AnimationSet expected = new AnimationSet(mActivity, mAttributeSet);
assertNull(mViewAnimator.getInAnimation());
mViewAnimator.setInAnimation(expected);
assertSame(expected, mViewAnimator.getInAnimation());
// input null as param
mViewAnimator.setInAnimation(null);
assertNull(mViewAnimator.getInAnimation());
mViewAnimator.setInAnimation(mActivity, R.anim.anim_alpha);
Animation animation = mViewAnimator.getInAnimation();
assertTrue(animation.getInterpolator() instanceof AccelerateInterpolator);
assertEquals(500, animation.getDuration());
}
@UiThreadTest
@Test
public void testShowNext() {
final View v1 = mActivity.findViewById(R.id.ok);
final View v2 = mActivity.findViewById(R.id.cancel);
final View v3 = mActivity.findViewById(R.id.label);
final View v4 = mActivity.findViewById(R.id.entry);
final RelativeLayout parent = (RelativeLayout) v1.getParent();
parent.removeView(v1);
parent.removeView(v2);
parent.removeView(v3);
parent.removeView(v4);
assertEquals(0, mViewAnimator.getChildCount());
mViewAnimator.addView(v1);
mViewAnimator.addView(v2);
mViewAnimator.addView(v3);
mViewAnimator.addView(v4);
assertEquals(4, mViewAnimator.getChildCount());
int current = 0;
mViewAnimator.setDisplayedChild(current);
assertEquals(current, mViewAnimator.getDisplayedChild());
mViewAnimator.showNext();
assertEquals(1, mViewAnimator.getDisplayedChild());
mViewAnimator.showNext();
assertEquals(2, mViewAnimator.getDisplayedChild());
mViewAnimator.showNext();
assertEquals(3, mViewAnimator.getDisplayedChild());
mViewAnimator.removeAllViews();
assertEquals(0, mViewAnimator.getChildCount());
}
@Test
public void testSetAnimateFirstView() {
mViewAnimator.setAnimateFirstView(true);
mViewAnimator.setAnimateFirstView(false);
// TODO: how to check
}
@UiThreadTest
@Test
public void testAccessDisplayedChild() {
final View v1 = mActivity.findViewById(R.id.ok);
final View v2 = mActivity.findViewById(R.id.cancel);
final RelativeLayout parent = (RelativeLayout) v1.getParent();
parent.removeView(v1);
parent.removeView(v2);
assertEquals(0, mViewAnimator.getChildCount());
mViewAnimator.addView(v1);
assertEquals(1, mViewAnimator.getChildCount());
mViewAnimator.addView(v2);
assertEquals(2, mViewAnimator.getChildCount());
mViewAnimator.setDisplayedChild(0);
assertEquals(0, mViewAnimator.getDisplayedChild());
// set a negative value, then switch to getChildCount()-1.
mViewAnimator.setDisplayedChild(-1);
assertEquals(1, mViewAnimator.getDisplayedChild());
// set larger than ChildCount, then switch to 0.
mViewAnimator.setDisplayedChild(2);
assertEquals(0, mViewAnimator.getDisplayedChild());
mViewAnimator.setDisplayedChild(1);
assertEquals(1, mViewAnimator.getDisplayedChild());
mViewAnimator.removeAllViews();
assertEquals(0, mViewAnimator.getChildCount());
}
@UiThreadTest
@Test
public void testAccessDisplayedChildBoundary() {
final View v1 = mActivity.findViewById(R.id.ok);
final View v2 = mActivity.findViewById(R.id.cancel);
final RelativeLayout parent = (RelativeLayout) v1.getParent();
parent.removeView(v1);
parent.removeView(v2);
assertEquals(0, mViewAnimator.getChildCount());
mViewAnimator.addView(v1);
assertEquals(1, mViewAnimator.getChildCount());
mViewAnimator.addView(v2);
assertEquals(2, mViewAnimator.getChildCount());
int index = -1;
mViewAnimator.setDisplayedChild(index);
assertEquals(1, mViewAnimator.getDisplayedChild());
index = 2;
mViewAnimator.setDisplayedChild(index);
assertEquals(0, mViewAnimator.getDisplayedChild());
mViewAnimator.removeAllViews();
assertEquals(0, mViewAnimator.getChildCount());
}
@UiThreadTest
@Test
public void testGetBaseline() {
final View v1 = mActivity.findViewById(R.id.ok);
final View v2 = mActivity.findViewById(R.id.cancel);
final RelativeLayout parent = (RelativeLayout) v1.getParent();
parent.removeView(v1);
parent.removeView(v2);
assertEquals(0, mViewAnimator.getChildCount());
mViewAnimator.addView(v1);
mViewAnimator.addView(v2);
assertEquals(2, mViewAnimator.getChildCount());
int expected = v1.getBaseline();
mViewAnimator.setDisplayedChild(0);
assertEquals(expected, mViewAnimator.getBaseline());
expected = v2.getBaseline();
mViewAnimator.setDisplayedChild(1);
assertEquals(expected, mViewAnimator.getBaseline());
mViewAnimator.removeAllViews();
assertEquals(0, mViewAnimator.getChildCount());
}
@UiThreadTest
@Test
public void testShowPrevious() {
final View v1 = mActivity.findViewById(R.id.ok);
final View v2 = mActivity.findViewById(R.id.cancel);
final View v3 = mActivity.findViewById(R.id.label);
final View v4 = mActivity.findViewById(R.id.entry);
final RelativeLayout parent = (RelativeLayout) v1.getParent();
parent.removeView(v1);
parent.removeView(v2);
parent.removeView(v3);
parent.removeView(v4);
assertEquals(0, mViewAnimator.getChildCount());
mViewAnimator.addView(v1);
mViewAnimator.addView(v2);
mViewAnimator.addView(v3);
mViewAnimator.addView(v4);
assertEquals(4, mViewAnimator.getChildCount());
int current = 3;
// set DisplayedChild by {@link mViewAnimator#setDisplayedChild(int)}
mViewAnimator.setDisplayedChild(current);
assertEquals(current, mViewAnimator.getDisplayedChild());
mViewAnimator.showPrevious();
assertEquals(2, mViewAnimator.getDisplayedChild());
mViewAnimator.showPrevious();
assertEquals(1, mViewAnimator.getDisplayedChild());
mViewAnimator.showPrevious();
assertEquals(0, mViewAnimator.getDisplayedChild());
mViewAnimator.removeAllViews();
assertEquals(0, mViewAnimator.getChildCount());
}
@UiThreadTest
@Test
public void testGetCurrentView() {
final View v = mActivity.findViewById(R.id.label);
final RelativeLayout parent = (RelativeLayout) v.getParent();
parent.removeView(v);
assertEquals(0, mViewAnimator.getChildCount());
mViewAnimator.addView(v);
assertEquals(1, mViewAnimator.getChildCount());
int current = 0;
mViewAnimator.setDisplayedChild(current);
assertSame(v, mViewAnimator.getCurrentView());
mViewAnimator.removeAllViews();
assertEquals(0, mViewAnimator.getChildCount());
}
@UiThreadTest
@Test
public void testAddView() {
final View v1 = mActivity.findViewById(R.id.ok);
final View v2 = mActivity.findViewById(R.id.cancel);
final RelativeLayout parent = (RelativeLayout) v1.getParent();
parent.removeView(v1);
parent.removeView(v2);
assertEquals(0, mViewAnimator.getChildCount());
LayoutParams p =
new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
mViewAnimator.addView(v1, 0, p);
assertEquals(1, mViewAnimator.getChildCount());
assertEquals(0, mViewAnimator.indexOfChild(v1));
mViewAnimator.addView(v2, 1, p);
assertEquals(2, mViewAnimator.getChildCount());
assertEquals(1, mViewAnimator.indexOfChild(v2));
mViewAnimator.removeAllViews();
assertEquals(0, mViewAnimator.getChildCount());
}
@Test
public void testAccessOutAnimation() {
AnimationSet expected = new AnimationSet(mActivity, mAttributeSet);
assertNull(mViewAnimator.getOutAnimation());
mViewAnimator.setOutAnimation(expected);
assertSame(expected, mViewAnimator.getOutAnimation());
mViewAnimator.setOutAnimation(null);
assertNull(mViewAnimator.getOutAnimation());
mViewAnimator.setOutAnimation(mActivity, R.anim.anim_alpha);
Animation animation = mViewAnimator.getOutAnimation();
assertTrue(animation.getInterpolator() instanceof AccelerateInterpolator);
assertEquals(500, animation.getDuration());
}
@UiThreadTest
@Test
public void testRemoveViews() {
final View v1 = mActivity.findViewById(R.id.ok);
final View v2 = mActivity.findViewById(R.id.cancel);
final View v3 = mActivity.findViewById(R.id.label);
final View v4 = mActivity.findViewById(R.id.entry);
final RelativeLayout parent = (RelativeLayout) v1.getParent();
parent.removeView(v1);
parent.removeView(v2);
parent.removeView(v3);
parent.removeView(v4);
assertEquals(0, mViewAnimator.getChildCount());
mViewAnimator.addView(v1);
mViewAnimator.addView(v2);
mViewAnimator.addView(v3);
mViewAnimator.addView(v4);
assertEquals(4, mViewAnimator.getChildCount());
mViewAnimator.removeViewAt(3);
assertEquals(3, mViewAnimator.getChildCount());
assertSame(v1, mViewAnimator.getChildAt(0));
assertSame(v2, mViewAnimator.getChildAt(1));
assertSame(v3, mViewAnimator.getChildAt(2));
mViewAnimator.removeView(v3);
assertEquals(2, mViewAnimator.getChildCount());
assertSame(v1, mViewAnimator.getChildAt(0));
assertSame(v2, mViewAnimator.getChildAt(1));
mViewAnimator.removeViewInLayout(v2);
assertEquals(1, mViewAnimator.getChildCount());
assertSame(v1, mViewAnimator.getChildAt(0));
mViewAnimator.addView(v2);
mViewAnimator.addView(v3);
mViewAnimator.addView(v4);
assertEquals(4, mViewAnimator.getChildCount());
mViewAnimator.removeViews(0, 2);
assertEquals(2, mViewAnimator.getChildCount());
// the remain views should be v3, v4
assertSame(v3, mViewAnimator.getChildAt(0));
assertSame(v4, mViewAnimator.getChildAt(1));
mViewAnimator.removeViewsInLayout(1, 1);
assertEquals(1, mViewAnimator.getChildCount());
// the remain view should be v3
assertSame(v3, mViewAnimator.getChildAt(0));
mViewAnimator.removeAllViews();
assertEquals(0, mViewAnimator.getChildCount());
}
}