Create test for CategoryManager.
- Move SettingsLibTests to tests/integ
- Create a new robotests directory for SettingsLib.
- Add test cases for CategoryManager#backwardCompatCleanupForCategory
Bug: 32382487
Test: make RunSettingsLibRoboTests
Change-Id: I7ef5921ce8c47a3e1e7209be1abc97ea549a2378
diff --git a/packages/SettingsLib/tests/Android.mk b/packages/SettingsLib/tests/Android.mk
index 4208522..333c41d 100644
--- a/packages/SettingsLib/tests/Android.mk
+++ b/packages/SettingsLib/tests/Android.mk
@@ -1,4 +1,4 @@
-# Copyright (C) 2015 The Android Open Source Project
+# 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.
@@ -15,20 +15,5 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
-LOCAL_MODULE_TAGS := tests
-LOCAL_CERTIFICATE := platform
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_JAVA_LIBRARIES := android.test.runner telephony-common
-
-LOCAL_PACKAGE_NAME := SettingsLibTests
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
- android-support-test \
- espresso-core \
- mockito-target-minus-junit4
-
-include frameworks/base/packages/SettingsLib/common.mk
-
-include $(BUILD_PACKAGE)
+# Include all makefiles in subdirectories
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/packages/SettingsLib/tests/integ/Android.mk b/packages/SettingsLib/tests/integ/Android.mk
new file mode 100644
index 0000000..4208522
--- /dev/null
+++ b/packages/SettingsLib/tests/integ/Android.mk
@@ -0,0 +1,34 @@
+# 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.
+
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+LOCAL_CERTIFICATE := platform
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_JAVA_LIBRARIES := android.test.runner telephony-common
+
+LOCAL_PACKAGE_NAME := SettingsLibTests
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ android-support-test \
+ espresso-core \
+ mockito-target-minus-junit4
+
+include frameworks/base/packages/SettingsLib/common.mk
+
+include $(BUILD_PACKAGE)
diff --git a/packages/SettingsLib/tests/AndroidManifest.xml b/packages/SettingsLib/tests/integ/AndroidManifest.xml
similarity index 100%
rename from packages/SettingsLib/tests/AndroidManifest.xml
rename to packages/SettingsLib/tests/integ/AndroidManifest.xml
diff --git a/packages/SettingsLib/tests/src/com/android/settingslib/BaseTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/BaseTest.java
similarity index 100%
rename from packages/SettingsLib/tests/src/com/android/settingslib/BaseTest.java
rename to packages/SettingsLib/tests/integ/src/com/android/settingslib/BaseTest.java
diff --git a/packages/SettingsLib/tests/src/com/android/settingslib/drawer/ProfileSelectDialogTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/drawer/ProfileSelectDialogTest.java
similarity index 100%
rename from packages/SettingsLib/tests/src/com/android/settingslib/drawer/ProfileSelectDialogTest.java
rename to packages/SettingsLib/tests/integ/src/com/android/settingslib/drawer/ProfileSelectDialogTest.java
diff --git a/packages/SettingsLib/tests/src/com/android/settingslib/drawer/SettingsDrawerActivityTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/drawer/SettingsDrawerActivityTest.java
similarity index 100%
rename from packages/SettingsLib/tests/src/com/android/settingslib/drawer/SettingsDrawerActivityTest.java
rename to packages/SettingsLib/tests/integ/src/com/android/settingslib/drawer/SettingsDrawerActivityTest.java
diff --git a/packages/SettingsLib/tests/src/com/android/settingslib/users/AppRestrictionsHelperTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/users/AppRestrictionsHelperTest.java
similarity index 100%
rename from packages/SettingsLib/tests/src/com/android/settingslib/users/AppRestrictionsHelperTest.java
rename to packages/SettingsLib/tests/integ/src/com/android/settingslib/users/AppRestrictionsHelperTest.java
diff --git a/packages/SettingsLib/tests/src/com/android/settingslib/utils/NetworkPolicyEditorTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/utils/NetworkPolicyEditorTest.java
similarity index 100%
rename from packages/SettingsLib/tests/src/com/android/settingslib/utils/NetworkPolicyEditorTest.java
rename to packages/SettingsLib/tests/integ/src/com/android/settingslib/utils/NetworkPolicyEditorTest.java
diff --git a/packages/SettingsLib/tests/src/com/android/settingslib/utils/ZoneGetterTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/utils/ZoneGetterTest.java
similarity index 100%
rename from packages/SettingsLib/tests/src/com/android/settingslib/utils/ZoneGetterTest.java
rename to packages/SettingsLib/tests/integ/src/com/android/settingslib/utils/ZoneGetterTest.java
diff --git a/packages/SettingsLib/tests/src/com/android/settingslib/wifi/AccessPointTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java
similarity index 100%
rename from packages/SettingsLib/tests/src/com/android/settingslib/wifi/AccessPointTest.java
rename to packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java
diff --git a/packages/SettingsLib/tests/src/com/android/settingslib/wifi/WifiTrackerTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java
similarity index 100%
rename from packages/SettingsLib/tests/src/com/android/settingslib/wifi/WifiTrackerTest.java
rename to packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java
diff --git a/packages/SettingsLib/tests/robotests/Android.mk b/packages/SettingsLib/tests/robotests/Android.mk
new file mode 100644
index 0000000..c1108f6
--- /dev/null
+++ b/packages/SettingsLib/tests/robotests/Android.mk
@@ -0,0 +1,82 @@
+# 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.
+
+
+############################################################
+# SettingsLib Shell app just for Robolectric test target. #
+############################################################
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_PACKAGE_NAME := SettingsLibShell
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_PRIVILEGED_MODULE := true
+
+LOCAL_JAVA_LIBRARIES := \
+ junit4-target \
+ platform-robolectric-prebuilt
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ platform-system-robolectric \
+ truth-prebuilt
+
+LOCAL_AAPT_FLAGS := --auto-add-overlay \
+
+LOCAL_SRC_FILES := \
+ $(call all-java-files-under, src)
+
+include frameworks/base/packages/SettingsLib/common.mk
+
+include $(BUILD_PACKAGE)
+
+#############################################
+# SettingsLib Robolectric test target. #
+#############################################
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+# Include the testing libraries (JUnit4 + Robolectric libs).
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ platform-system-robolectric \
+ truth-prebuilt
+
+LOCAL_JAVA_LIBRARIES := \
+ junit4-target \
+ platform-robolectric-prebuilt
+
+LOCAL_INSTRUMENTATION_FOR := SettingsLibShell
+LOCAL_MODULE := SettingsLibRoboTests
+
+LOCAL_MODULE_TAGS := optional
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+#############################################################
+# SettingsLib runner target to run the previous target. #
+#############################################################
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := RunSettingsLibRoboTests
+
+LOCAL_SDK_VERSION := current
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ SettingsLibRoboTests
+
+LOCAL_TEST_PACKAGE := SettingsLibShell
+
+include prebuilts/misc/common/robolectric/run_robotests.mk
diff --git a/packages/SettingsLib/tests/robotests/AndroidManifest.xml b/packages/SettingsLib/tests/robotests/AndroidManifest.xml
new file mode 100644
index 0000000..9e92fa9
--- /dev/null
+++ b/packages/SettingsLib/tests/robotests/AndroidManifest.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ coreApp="true"
+ package="com.android.settingslib.robotests">
+
+ <application/>
+
+</manifest>
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/TestConfig.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/TestConfig.java
new file mode 100644
index 0000000..22fd83c
--- /dev/null
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/TestConfig.java
@@ -0,0 +1,23 @@
+/*
+ * 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.settingslib;
+
+public class TestConfig {
+ public static final int SDK_VERSION = 23;
+ public static final String MANIFEST_PATH =
+ "frameworks/base/packages/SettingsLib/robotests/AndroidManifest.xml";
+}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryManagerTest.java
new file mode 100644
index 0000000..380f622
--- /dev/null
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryManagerTest.java
@@ -0,0 +1,119 @@
+/*
+ * 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.settingslib.drawer;
+
+import android.content.Context;
+import android.util.Pair;
+
+import com.android.settingslib.TestConfig;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static com.google.common.truth.Truth.assertThat;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class CategoryManagerTest {
+
+ private Context mContext;
+ private CategoryManager mCategoryManager;
+ private Map<Pair<String, String>, Tile> mTileByComponentCache;
+ private Map<String, DashboardCategory> mCategoryByKeyMap;
+
+ @Before
+ public void setUp() {
+ mContext = ShadowApplication.getInstance().getApplicationContext();
+ mTileByComponentCache = new HashMap<>();
+ mCategoryByKeyMap = new HashMap<>();
+ mCategoryManager = CategoryManager.get(mContext);
+ }
+
+ @Test
+ public void getInstance_shouldBeSingleton() {
+ assertThat(mCategoryManager).isSameAs(CategoryManager.get(mContext));
+ }
+
+ @Test
+ public void backwardCompatCleanupForCategory_shouldNotChangeCategoryForNewKeys() {
+ final Tile tile1 = new Tile();
+ final Tile tile2 = new Tile();
+ tile1.category = CategoryKey.CATEGORY_ACCOUNT;
+ tile2.category = CategoryKey.CATEGORY_ACCOUNT;
+ final DashboardCategory category = new DashboardCategory();
+ category.addTile(tile1);
+ category.addTile(tile2);
+ mCategoryByKeyMap.put(CategoryKey.CATEGORY_ACCOUNT, category);
+ mTileByComponentCache.put(new Pair<>("PACKAGE", "1"), tile1);
+ mTileByComponentCache.put(new Pair<>("PACKAGE", "2"), tile2);
+
+ mCategoryManager.backwardCompatCleanupForCategory(mTileByComponentCache, mCategoryByKeyMap);
+
+ assertThat(mCategoryByKeyMap.size()).isEqualTo(1);
+ assertThat(mCategoryByKeyMap.get(CategoryKey.CATEGORY_ACCOUNT)).isNotNull();
+ }
+
+ @Test
+ public void backwardCompatCleanupForCategory_shouldNotChangeCategoryForMixedKeys() {
+ final Tile tile1 = new Tile();
+ final Tile tile2 = new Tile();
+ final String oldCategory = "com.android.settings.category.wireless";
+ tile1.category = CategoryKey.CATEGORY_ACCOUNT;
+ tile2.category = oldCategory;
+ final DashboardCategory category1 = new DashboardCategory();
+ category1.addTile(tile1);
+ final DashboardCategory category2 = new DashboardCategory();
+ category2.addTile(tile2);
+ mCategoryByKeyMap.put(CategoryKey.CATEGORY_ACCOUNT, category1);
+ mCategoryByKeyMap.put(oldCategory, category2);
+ mTileByComponentCache.put(new Pair<>("PACKAGE", "CLASS1"), tile1);
+ mTileByComponentCache.put(new Pair<>("PACKAGE", "CLASS2"), tile2);
+
+ mCategoryManager.backwardCompatCleanupForCategory(mTileByComponentCache, mCategoryByKeyMap);
+
+ assertThat(mCategoryByKeyMap.size()).isEqualTo(2);
+ assertThat(mCategoryByKeyMap.get(CategoryKey.CATEGORY_ACCOUNT).tiles.size()).isEqualTo(1);
+ assertThat(mCategoryByKeyMap.get(oldCategory).tiles.size()).isEqualTo(1);
+ }
+
+ @Test
+ public void backwardCompatCleanupForCategory_shouldChangeCategoryForOldKeys() {
+ final Tile tile1 = new Tile();
+ final String oldCategory = "com.android.settings.category.wireless";
+ tile1.category = oldCategory;
+ final DashboardCategory category1 = new DashboardCategory();
+ category1.addTile(tile1);
+ mCategoryByKeyMap.put(oldCategory, category1);
+ mTileByComponentCache.put(new Pair<>("PACKAGE", "CLASS1"), tile1);
+
+ mCategoryManager.backwardCompatCleanupForCategory(mTileByComponentCache, mCategoryByKeyMap);
+
+ // Added 1 more category to category map.
+ assertThat(mCategoryByKeyMap.size()).isEqualTo(2);
+ // The new category map has CATEGORY_NETWORK type now, which contains 1 tile.
+ assertThat(mCategoryByKeyMap.get(CategoryKey.CATEGORY_NETWORK).tiles.size()).isEqualTo(1);
+ // Old category still exists.
+ assertThat(mCategoryByKeyMap.get(oldCategory).tiles.size()).isEqualTo(1);
+ }
+}