blob: fac9ff9b9bb80317bc35e70cd12a11ba934f667f [file] [log] [blame]
/*
* Copyright (C) 2012 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.animation.cts;
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.test.ActivityInstrumentationTestCase2;
import android.test.UiThreadTest;
import android.view.animation.AccelerateInterpolator;
import java.util.List;
public class AnimatorTest extends ActivityInstrumentationTestCase2<AnimationActivity> {
private AnimationActivity mActivity;
private Animator mAnimator;
private long mDuration = 1000;
public AnimatorTest() {
super(AnimationActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
setActivityInitialTouchMode(false);
mActivity = getActivity();
mAnimator = mActivity.createAnimatorWithDuration(mDuration);
}
public void testConstructor() {
mAnimator = new ValueAnimator();
assertNotNull(mAnimator);
}
public void testClone() {
Animator animatorClone = mAnimator.clone();
assertEquals(mAnimator.getDuration(), animatorClone.getDuration());
}
public void testStartDelay() {
long startDelay = 1000;
mAnimator.setStartDelay(startDelay);
assertEquals(startDelay, mAnimator.getStartDelay());
}
@UiThreadTest
public void testStart() throws Exception {
mAnimator.start();
assertTrue(mAnimator.isRunning());
assertTrue(mAnimator.isStarted());
}
public void testGetDuration() throws Throwable {
final long duration = 2000;
Animator animatorLocal = mActivity.createAnimatorWithDuration(duration);
startAnimation(animatorLocal);
assertEquals(duration, animatorLocal.getDuration());
}
public void testIsRunning() throws Throwable {
assertFalse(mAnimator.isRunning());
startAnimation(mAnimator);
assertTrue(mAnimator.isRunning());
}
public void testIsStarted() throws Throwable {
assertFalse(mAnimator.isRunning());
assertFalse(mAnimator.isStarted());
long startDelay = 10000;
mAnimator.setStartDelay(startDelay);
startAnimation(mAnimator);
assertFalse(mAnimator.isRunning());
assertTrue(mAnimator.isStarted());
}
public void testSetInterpolator() throws Throwable {
AccelerateInterpolator interpolator = new AccelerateInterpolator();
ValueAnimator mValueAnimator = mActivity.createAnimatorWithInterpolator(interpolator);
startAnimation(mValueAnimator);
assertTrue(interpolator.equals(mValueAnimator.getInterpolator()));
}
public void testCancel() throws Throwable {
startAnimation(mAnimator);
Thread.sleep(100);
runTestOnUiThread(new Runnable() {
public void run() {
mAnimator.cancel();
}
});
assertFalse(mAnimator.isRunning());
}
public void testEnd() throws Throwable {
Object object = mActivity.view.newBall;
String property = "y";
float startY = mActivity.mStartY;
float endY = mActivity.mStartY + mActivity.mDeltaY;
Animator animator = ObjectAnimator.ofFloat(object, property, startY, endY);
animator.setDuration(mDuration);
((ObjectAnimator)animator).setRepeatCount(ValueAnimator.INFINITE);
animator.setInterpolator(new AccelerateInterpolator());
((ObjectAnimator)animator).setRepeatMode(ValueAnimator.REVERSE);
startAnimation(animator);
Thread.sleep(100);
endAnimation(animator);
float y = mActivity.view.newBall.getY();
assertEquals(y, endY);
}
public void testSetListener() throws Throwable {
List<Animator.AnimatorListener> listListeners = mAnimator.getListeners();
assertNull(listListeners);
MyListener listener = new MyListener();
assertFalse(listener.mStart);
assertFalse(listener.mEnd);
assertEquals(listener.mRepeat, 0);
mAnimator.addListener(listener);
mAnimator.setDuration(100l);
startAnimation(mAnimator);
Thread.sleep(200);
assertTrue(listener.mStart);
assertFalse(listener.mEnd);
assertTrue(listener.mRepeat >= 0);
mActivity.runOnUiThread(new Runnable() {
public void run() {
mAnimator.cancel();
}
});
getInstrumentation().waitForIdleSync();
assertTrue(listener.mCancel);
mActivity.runOnUiThread(new Runnable() {
public void run() {
mAnimator.end();
}
});
getInstrumentation().waitForIdleSync();
assertTrue(listener.mEnd);
}
public void testRemoveListener() throws Throwable {
List<Animator.AnimatorListener> listListenersOne = mAnimator.getListeners();
assertNull(listListenersOne);
MyListener listener = new MyListener();
mAnimator.addListener(listener);
List<Animator.AnimatorListener> listListenersTwo = mAnimator.getListeners();
assertEquals(listListenersTwo.size(), 1);
mAnimator.removeListener(listener);
List<Animator.AnimatorListener> listListenersThree = mAnimator.getListeners();
assertNull(listListenersThree);
}
public void testRemoveAllListenerers() throws Throwable {
MyListener listener1 = new MyListener();
MyListener listener2 = new MyListener();
mAnimator.addListener(listener1);
mAnimator.addListener(listener2);
List<Animator.AnimatorListener> listListenersOne = mAnimator.getListeners();
assertEquals(listListenersOne.size(), 2);
mAnimator.removeAllListeners();
List<Animator.AnimatorListener> listListenersTwo = mAnimator.getListeners();
assertNull(listListenersTwo);
}
class MyListener implements Animator.AnimatorListener{
boolean mStart = false;
boolean mEnd = false;
boolean mCancel = false;
int mRepeat = 0;
public void onAnimationCancel(Animator animation) {
mCancel = true;
}
public void onAnimationEnd(Animator animation) {
mEnd = true;
}
public void onAnimationRepeat(Animator animation) {
mRepeat++;
}
public void onAnimationStart(Animator animation) {
mStart = true;
}
}
private void startAnimation(final Animator animator) throws Throwable {
this.runTestOnUiThread(new Runnable() {
public void run() {
mActivity.startAnimation(animator);
}
});
}
private void endAnimation(final Animator animator) throws Throwable {
Thread animationRunnable = new Thread() {
public void run() {
animator.end();
}
};
this.runTestOnUiThread(animationRunnable);
}
}