blob: c43c3e629c8a4b0687287802d3a4172c6ce56566 [file] [log] [blame]
/*
* Copyright (C) 2016 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 com.android.systemui.qs;
import static junit.framework.Assert.assertEquals;
import android.test.suitebuilder.annotation.SmallTest;
import android.view.View;
import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.qs.TouchAnimator.Listener;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
@SmallTest
@RunWith(AndroidJUnit4.class)
public class TouchAnimatorTest extends SysuiTestCase {
private Listener mTouchListener;
private View mTestView;
@Before
public void setUp() throws Exception {
mTestView = new View(getContext());
mTouchListener = Mockito.mock(Listener.class);
}
@Test
public void testSetValueFloat() {
TouchAnimator animator = new TouchAnimator.Builder()
.addFloat(mTestView, "x", 0, 50)
.build();
animator.setPosition(0);
assertEquals(0f, mTestView.getX());
animator.setPosition(.5f);
assertEquals(25f, mTestView.getX());
animator.setPosition(1);
assertEquals(50f, mTestView.getX());
}
@Test
public void testSetValueFloat_threeValues() {
TouchAnimator animator = new TouchAnimator.Builder()
.addFloat(mTestView, "x", 0, 20, 50)
.build();
animator.setPosition(0);
assertEquals(0f, mTestView.getX());
animator.setPosition(.25f);
assertEquals(10f, mTestView.getX());
animator.setPosition(.5f);
assertEquals(20f, mTestView.getX());
animator.setPosition(.75f);
assertEquals(35f, mTestView.getX());
animator.setPosition(1);
assertEquals(50f, mTestView.getX());
}
@Test
public void testSetValueInt() {
TouchAnimator animator = new TouchAnimator.Builder()
.addInt(mTestView, "top", 0, 50)
.build();
animator.setPosition(0);
assertEquals(0, mTestView.getTop());
animator.setPosition(.5f);
assertEquals(25, mTestView.getTop());
animator.setPosition(1);
assertEquals(50, mTestView.getTop());
}
@Test
public void testStartDelay() {
TouchAnimator animator = new TouchAnimator.Builder()
.addFloat(mTestView, "x", 0, 50)
.setStartDelay(.5f)
.build();
animator.setPosition(0);
assertEquals(0f, mTestView.getX());
animator.setPosition(.5f);
assertEquals(0f, mTestView.getX());
animator.setPosition(.75f);
assertEquals(25f, mTestView.getX());
animator.setPosition(1);
assertEquals(50f, mTestView.getX());
}
@Test
public void testEndDelay() {
TouchAnimator animator = new TouchAnimator.Builder()
.addFloat(mTestView, "x", 0, 50)
.setEndDelay(.5f)
.build();
animator.setPosition(0);
assertEquals(0f, mTestView.getX());
animator.setPosition(.25f);
assertEquals(25f, mTestView.getX());
animator.setPosition(.5f);
assertEquals(50f, mTestView.getX());
animator.setPosition(1);
assertEquals(50f, mTestView.getX());
}
@Test
public void testOnAnimationAtStartCallback() {
TouchAnimator animator = new TouchAnimator.Builder()
.setListener(mTouchListener)
.build();
// Called on init.
animator.setPosition(0);
verifyOnAnimationAtStart(1);
// Not called from same state.
animator.setPosition(0);
verifyOnAnimationAtStart(1);
// Called after starting and moving back to start.
animator.setPosition(.5f);
animator.setPosition(0);
verifyOnAnimationAtStart(2);
// Called when move from end to end.
animator.setPosition(1);
animator.setPosition(0);
verifyOnAnimationAtStart(3);
}
@Test
public void testOnAnimationAtEndCallback() {
TouchAnimator animator = new TouchAnimator.Builder()
.setListener(mTouchListener)
.build();
// Called on init.
animator.setPosition(1);
verifyOnAnimationAtEnd(1);
// Not called from same state.
animator.setPosition(1);
verifyOnAnimationAtEnd(1);
// Called after starting and moving back to end.
animator.setPosition(.5f);
animator.setPosition(1);
verifyOnAnimationAtEnd(2);
// Called when move from end to end.
animator.setPosition(0);
animator.setPosition(1);
verifyOnAnimationAtEnd(3);
}
@Test
public void testOnAnimationStartedCallback() {
TouchAnimator animator = new TouchAnimator.Builder()
.setListener(mTouchListener)
.build();
// Called on init.
animator.setPosition(.5f);
verifyOnAnimationStarted(1);
// Not called from same state.
animator.setPosition(.6f);
verifyOnAnimationStarted(1);
// Called after going to end then moving again.
animator.setPosition(1);
animator.setPosition(.5f);
verifyOnAnimationStarted(2);
// Called after moving to start then moving again.
animator.setPosition(0);
animator.setPosition(.5f);
verifyOnAnimationStarted(3);
}
// TODO: Add test for interpolator.
private void verifyOnAnimationAtStart(int times) {
Mockito.verify(mTouchListener, Mockito.times(times)).onAnimationAtStart();
}
private void verifyOnAnimationAtEnd(int times) {
Mockito.verify(mTouchListener, Mockito.times(times)).onAnimationAtEnd();
}
private void verifyOnAnimationStarted(int times) {
Mockito.verify(mTouchListener, Mockito.times(times)).onAnimationStarted();
}
}