diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Android.mk | 27 | ||||
-rw-r--r-- | tests/AndroidManifest.xml (renamed from tests/stress/AndroidManifest.xml) | 6 | ||||
-rw-r--r-- | tests/res/values/string.xml | 21 | ||||
-rw-r--r-- | tests/src/com/android/launcher3/InvariantDeviceProfileTest.java | 123 | ||||
-rw-r--r-- | tests/src/com/android/launcher3/util/FocusLogicTest.java | 60 | ||||
-rw-r--r-- | tests/stress/Android.mk | 31 | ||||
-rw-r--r-- | tests/stress/src/com/android/launcher3/stress/LauncherRotationStressTest.java | 63 |
7 files changed, 231 insertions, 100 deletions
diff --git a/tests/Android.mk b/tests/Android.mk index 762a52b8d..eba4ade48 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -1,4 +1,4 @@ -# Copyright (C) 2011 The Android Open Source Project +# Copyright (C) 2015 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. @@ -12,5 +12,26 @@ # See the License for the specific language governing permissions and # limitations under the License. # -#LOCAL_PATH := $(call my-dir) -#include $(call all-makefiles-under,$(LOCAL_PATH)) + +LOCAL_PATH := $(call my-dir) + +src_dirs := src +res_dirs := res + +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := tests + +LOCAL_STATIC_JAVA_LIBRARIES := android-support-test + +LOCAL_SRC_FILES := $(call all-java-files-under, src) +LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs)) +LOCAL_AAPT_FLAGS := --auto-add-overlay + +LOCAL_SDK_VERSION := 21 + +LOCAL_PACKAGE_NAME := Launcher3Tests + +LOCAL_INSTRUMENTATION_FOR := Launcher3 + +include $(BUILD_PACKAGE) diff --git a/tests/stress/AndroidManifest.xml b/tests/AndroidManifest.xml index bcca1ff53..42ae5a38a 100644 --- a/tests/stress/AndroidManifest.xml +++ b/tests/AndroidManifest.xml @@ -1,5 +1,5 @@ <?xml version="2.0" encoding="utf-8"?> -<!-- Copyright (C) 2010 The Android Open Source Project +<!-- Copyright (C) 2015 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. @@ -15,7 +15,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.launcher3.stress.launcherrotation"> + package="com.android.launcher3.tests"> <application> <uses-library android:name="android.test.runner" /> @@ -24,6 +24,6 @@ <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.android.launcher3" - android:label="Rotation stress test using Launcher2"> + android:label="Unit tests for Launcher3"> </instrumentation> </manifest> diff --git a/tests/res/values/string.xml b/tests/res/values/string.xml new file mode 100644 index 000000000..3c1ec5c61 --- /dev/null +++ b/tests/res/values/string.xml @@ -0,0 +1,21 @@ +<!-- Copyright (C) 2015 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. +--> + +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Dummy string for tests. [DO NOT TRANSLATE] --> + <string name="dummy" >Dummy string for tests.</string> + +</resources> diff --git a/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java b/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java new file mode 100644 index 000000000..1bc7c1190 --- /dev/null +++ b/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2015 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.launcher3; + +import android.graphics.PointF; +import android.test.AndroidTestCase; +import android.test.suitebuilder.annotation.SmallTest; +import android.util.Log; + +import com.android.launcher3.DeviceProfile; +import com.android.launcher3.InvariantDeviceProfile; +import com.android.launcher3.util.FocusLogic; + +import java.util.ArrayList; + +/** + * Tests the {@link DeviceProfile} and {@link InvariantDeviceProfile}. + */ +@SmallTest +public class InvariantDeviceProfileTest extends AndroidTestCase { + + private static final String TAG = "DeviceProfileTest"; + private static final boolean DEBUG = false; + + private InvariantDeviceProfile mInvariantProfile; + private ArrayList<InvariantDeviceProfile> mPredefinedDeviceProfiles; + + @Override + protected void setUp() throws Exception { + super.setUp(); + mInvariantProfile = new InvariantDeviceProfile(getContext()); + mPredefinedDeviceProfiles = mInvariantProfile.getPredefinedDeviceProfiles(); + } + + @Override + protected void tearDown() throws Exception { + // Nothing to tear down as this class only tests static methods. + } + + public void testFindClosestDeviceProfile2() { + for (InvariantDeviceProfile idf: mPredefinedDeviceProfiles) { + ArrayList<InvariantDeviceProfile> closestProfiles = + mInvariantProfile.findClosestDeviceProfiles( + idf.minWidthDps, idf.minHeightDps, mPredefinedDeviceProfiles); + assertTrue(closestProfiles.get(0).equals(idf)); + } + } + + /** + * Used to print out how the invDistWeightedInterpolate works between device profiles to + * tweak the two constants that control how the interpolation curve is shaped. + */ + public void testInvInterpolation() { + + InvariantDeviceProfile p1 = mPredefinedDeviceProfiles.get(7); // e.g., Large Phone + InvariantDeviceProfile p2 = mPredefinedDeviceProfiles.get(8); // e.g., Nexus 7 + + ArrayList<PointF> pts = createInterpolatedPoints( + new PointF(p1.minWidthDps, p1.minHeightDps), + new PointF(p2.minWidthDps, p2.minHeightDps), + 20f); + + for (int i = 0; i < pts.size(); i++) { + ArrayList<InvariantDeviceProfile> closestProfiles = + mInvariantProfile.findClosestDeviceProfiles( + pts.get(i).x, pts.get(i).y, mPredefinedDeviceProfiles); + InvariantDeviceProfile result = + mInvariantProfile.invDistWeightedInterpolate( + pts.get(i).x, pts.get(i).y, closestProfiles); + if (DEBUG) { + Log.d(TAG, String.format("width x height = (%f, %f)] iconSize = %f", + pts.get(i).x, pts.get(i).y, result.iconSize)); + } + } + } + + private ArrayList<PointF> createInterpolatedPoints(PointF a, PointF b, float numPts) { + ArrayList<PointF> result = new ArrayList<PointF>(); + result.add(a); + for (float i = 1; i < numPts; i = i + 1.0f) { + result.add(new PointF((b.x * i + a.x * (numPts - i)) / numPts, + (b.y * i + a.y * (numPts - i)) / numPts)); + } + result.add(b); + return result; + } + + /** + * Ensures that system calls (e.g., WindowManager, DisplayMetrics) that require contexts are + * properly working to generate minimum width and height of the display. + */ + public void test_hammerhead() { + if (!android.os.Build.DEVICE.equals("hammerhead")) { + return; + } + assertEquals(mInvariantProfile.numRows, 4); + assertEquals(mInvariantProfile.numColumns, 4); + assertEquals((int) mInvariantProfile.numHotseatIcons, 5); + + DeviceProfile landscapeProfile = mInvariantProfile.landscapeProfile; + DeviceProfile portraitProfile = mInvariantProfile.portraitProfile; + + assertEquals(portraitProfile.allAppsNumCols, 3); + assertEquals(landscapeProfile.allAppsNumCols, 5); // not used + } + + // Add more tests for other devices, however, running them once on a single device is enough + // for verifying that for a platform version, the WindowManager and DisplayMetrics is + // working as intended. +} diff --git a/tests/src/com/android/launcher3/util/FocusLogicTest.java b/tests/src/com/android/launcher3/util/FocusLogicTest.java new file mode 100644 index 000000000..ea87014e9 --- /dev/null +++ b/tests/src/com/android/launcher3/util/FocusLogicTest.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2015 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.launcher3; + +import android.test.AndroidTestCase; +import android.test.suitebuilder.annotation.SmallTest; +import android.view.KeyEvent; + +import com.android.launcher3.util.FocusLogic; + +/** + * Tests the {@link FocusLogic} class that handles key event based focus handling. + */ +@SmallTest +public final class FocusLogicTest extends AndroidTestCase { + + @Override + protected void setUp() throws Exception { + super.setUp(); + // Nothing to set up as this class only tests static methods. + } + + @Override + protected void tearDown() throws Exception { + // Nothing to tear down as this class only tests static methods. + } + + public void testShouldConsume() { + assertTrue(FocusLogic.shouldConsume(KeyEvent.KEYCODE_DPAD_LEFT)); + assertTrue(FocusLogic.shouldConsume(KeyEvent.KEYCODE_DPAD_RIGHT)); + assertTrue(FocusLogic.shouldConsume(KeyEvent.KEYCODE_DPAD_UP)); + assertTrue(FocusLogic.shouldConsume(KeyEvent.KEYCODE_DPAD_DOWN)); + assertTrue(FocusLogic.shouldConsume(KeyEvent.KEYCODE_MOVE_HOME)); + assertTrue(FocusLogic.shouldConsume(KeyEvent.KEYCODE_MOVE_END)); + assertTrue(FocusLogic.shouldConsume(KeyEvent.KEYCODE_PAGE_UP)); + assertTrue(FocusLogic.shouldConsume(KeyEvent.KEYCODE_PAGE_DOWN)); + assertTrue(FocusLogic.shouldConsume(KeyEvent.KEYCODE_DEL)); + assertTrue(FocusLogic.shouldConsume(KeyEvent.KEYCODE_FORWARD_DEL)); + } + + public void testCreateSparseMatrix() { + // Either, 1) create a helper method to generate/instantiate all possible cell layout that + // may get created in real world to test this method. OR 2) Move all the matrix + // management routine to celllayout and write tests for them. + } +} diff --git a/tests/stress/Android.mk b/tests/stress/Android.mk deleted file mode 100644 index 68289bd3e..000000000 --- a/tests/stress/Android.mk +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (C) 2011 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. -# -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -# We only want this apk build for tests. -LOCAL_MODULE_TAGS := tests - -LOCAL_JAVA_LIBRARIES := android.test.runner - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := LauncherRotationStressTest - -LOCAL_CERTIFICATE := shared - -LOCAL_INSTRUMENTATION_FOR := Launcher2 - -include $(BUILD_PACKAGE) diff --git a/tests/stress/src/com/android/launcher3/stress/LauncherRotationStressTest.java b/tests/stress/src/com/android/launcher3/stress/LauncherRotationStressTest.java deleted file mode 100644 index a5b85eb19..000000000 --- a/tests/stress/src/com/android/launcher3/stress/LauncherRotationStressTest.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2011 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.launcher3.stress; - - -import com.android.launcher3.Launcher; - -import android.content.pm.ActivityInfo; -import android.os.SystemClock; -import android.test.ActivityInstrumentationTestCase2; -import android.test.RepetitiveTest; -import android.util.Log; - -/** - * Run rotation stress test using Launcher2 for 50 iterations. - */ -public class LauncherRotationStressTest extends ActivityInstrumentationTestCase2<Launcher> { - - private static final int NUM_ITERATIONS = 50; - private static final int WAIT_TIME_MS = 500; - private static final String LOG_TAG = "LauncherRotationStressTest"; - - public LauncherRotationStressTest() { - super(Launcher.class); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - } - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - } - - @RepetitiveTest(numIterations=NUM_ITERATIONS) - public void testLauncherRotationStress() throws Exception { - Launcher launcher = getActivity(); - getInstrumentation().waitForIdleSync(); - SystemClock.sleep(WAIT_TIME_MS); - launcher.setRequestedOrientation( - ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); - getInstrumentation().waitForIdleSync(); - SystemClock.sleep(WAIT_TIME_MS); - launcher.setRequestedOrientation( - ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); - } -} |