Add tests for TouchAnimator
Also fix existing tests
Bug: 27392084
Change-Id: I70299512e8fa3e0cb86c868b47df7703e04d6084
diff --git a/packages/SystemUI/tests/AndroidManifest.xml b/packages/SystemUI/tests/AndroidManifest.xml
index 2825601..5389c804 100644
--- a/packages/SystemUI/tests/AndroidManifest.xml
+++ b/packages/SystemUI/tests/AndroidManifest.xml
@@ -20,6 +20,8 @@
<uses-permission android:name="android.permission.INJECT_EVENTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
+ <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
+ <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<uses-permission android:name="android.permission.MANAGE_USERS" />
<application>
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/TouchAnimatorTests.java b/packages/SystemUI/tests/src/com/android/systemui/qs/TouchAnimatorTests.java
new file mode 100644
index 0000000..1d81fd4
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/TouchAnimatorTests.java
@@ -0,0 +1,188 @@
+/*
+ * 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 android.view.View;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.qs.TouchAnimator.Listener;
+import org.mockito.Mockito;
+
+public class TouchAnimatorTests extends SysuiTestCase {
+
+ private Listener mTouchListener;
+ private View mTestView;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ mTestView = new View(getContext());
+ mTouchListener = Mockito.mock(Listener.class);
+ }
+
+ 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());
+ }
+
+ 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());
+ }
+
+ 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());
+ }
+
+ 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());
+ }
+
+ 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);
+ }
+
+ 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);
+ }
+
+ 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();
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTests.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTests.java
index c4ca039..1841251 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTests.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTests.java
@@ -19,6 +19,9 @@
import android.os.Looper;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.phone.QSTileHost;
+import com.android.systemui.statusbar.policy.DataSaverController;
+import com.android.systemui.statusbar.policy.HotspotController;
+import com.android.systemui.statusbar.policy.NetworkController;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
@@ -34,7 +37,12 @@
protected void setUp() throws Exception {
super.setUp();
mManagers = new ArrayList<>();
- QSTileHost host = new QSTileHost(mContext, null, null, null, null, null, null, null, null,
+ final NetworkController networkController = Mockito.mock(NetworkController.class);
+ Mockito.when(networkController.getDataSaverController()).thenReturn(
+ Mockito.mock(DataSaverController.class));
+ QSTileHost host = new QSTileHost(mContext, null, null, null, null,
+ networkController, null,
+ Mockito.mock(HotspotController.class), null,
null, null, null, null, null, null, null);
mTileService = new TestTileServices(host, Looper.myLooper());
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
index 5cf3767..ebd5384 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
@@ -16,9 +16,6 @@
package com.android.systemui.statusbar.policy;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkCapabilities;
@@ -31,14 +28,12 @@
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.Log;
-
import com.android.internal.telephony.cdma.EriInfo;
import com.android.settingslib.net.DataUsageController;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.policy.NetworkController.IconState;
import com.android.systemui.statusbar.policy.NetworkControllerImpl.Config;
import com.android.systemui.statusbar.policy.NetworkControllerImpl.SubscriptionDefaults;
-
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
@@ -47,6 +42,9 @@
import java.util.ArrayList;
import java.util.List;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
public class NetworkControllerBaseTest extends SysuiTestCase {
private static final String TAG = "NetworkControllerBaseTest";
protected static final int DEFAULT_LEVEL = 2;
@@ -109,6 +107,7 @@
protected void setupNetworkController() {
// For now just pretend to be the data sim, so we can test that too.
mSubId = SubscriptionManager.DEFAULT_SUBSCRIPTION_ID;
+ when(mMockTm.getDataEnabled(mSubId)).thenReturn(true);
setDefaultSubId(mSubId);
setSubscriptions(mSubId);
mMobileSignalController = mNetworkController.mMobileSignalControllers.get(mSubId);