summaryrefslogtreecommitdiff
path: root/java/tests/src
diff options
context:
space:
mode:
author Andrey Epin <ayepin@google.com> 2023-02-06 21:31:44 -0800
committer Andrey Epin <ayepin@google.com> 2023-02-17 20:02:10 +0000
commit8397111c0234fa1ea639c85677065482a4c34727 (patch)
tree4fb9e2d902d2ada8f692435774f6e29d680a2062 /java/tests/src
parentf1576aeb415af53da75ca7dbc9413b04c43dee54 (diff)
Run Chooser integration tests for the new features
Add a new test parameter, feature flag set, and run Chooser tests for two set values: all flags are off and all flags are on. This ensures that our integration tests cover the new features. A new test rule is added to ignore tests that were designed for a specific flag values when running in a set that does not have those values set. Bug: 258838272 Test: the modified test itself Change-Id: If646ef123a383e801fda55d601e10b186c6c5c1f (cherry picked from commit 880417ed82485d63c87737d38a270a3367d27594) Merged-In: If646ef123a383e801fda55d601e10b186c6c5c1f
Diffstat (limited to 'java/tests/src')
-rw-r--r--java/tests/src/com/android/intentresolver/FeatureFlagRule.kt56
-rw-r--r--java/tests/src/com/android/intentresolver/RequireFeatureFlags.kt23
-rw-r--r--java/tests/src/com/android/intentresolver/TestFeatureFlagRepository.kt9
-rw-r--r--java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java114
4 files changed, 158 insertions, 44 deletions
diff --git a/java/tests/src/com/android/intentresolver/FeatureFlagRule.kt b/java/tests/src/com/android/intentresolver/FeatureFlagRule.kt
new file mode 100644
index 00000000..3fa01bcc
--- /dev/null
+++ b/java/tests/src/com/android/intentresolver/FeatureFlagRule.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2023 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.intentresolver
+
+import com.android.systemui.flags.BooleanFlag
+import org.junit.rules.TestRule
+import org.junit.runner.Description
+import org.junit.runners.model.Statement
+
+/**
+ * Ignores tests annotated with [RequireFeatureFlags] which flag requirements does not
+ * meet in the active flag set.
+ * @param flags active flag set
+ */
+internal class FeatureFlagRule(flags: Map<BooleanFlag, Boolean>) : TestRule {
+ private val flags = flags.entries.fold(HashMap<String, Boolean>()) { map, (key, value) ->
+ map.apply {
+ put(key.name, value)
+ }
+ }
+ private val skippingStatement = object : Statement() {
+ override fun evaluate() = Unit
+ }
+
+ override fun apply(base: Statement, description: Description): Statement {
+ val annotation = description.annotations.firstOrNull {
+ it is RequireFeatureFlags
+ } as? RequireFeatureFlags
+ ?: return base
+
+ if (annotation.flags.size != annotation.values.size) {
+ error("${description.className}#${description.methodName}: inconsistent number of" +
+ " flags and values in $annotation")
+ }
+ for (i in annotation.flags.indices) {
+ val flag = annotation.flags[i]
+ val value = annotation.values[i]
+ if (flags.getOrDefault(flag, !value) != value) return skippingStatement
+ }
+ return base
+ }
+}
diff --git a/java/tests/src/com/android/intentresolver/RequireFeatureFlags.kt b/java/tests/src/com/android/intentresolver/RequireFeatureFlags.kt
new file mode 100644
index 00000000..1ddf7462
--- /dev/null
+++ b/java/tests/src/com/android/intentresolver/RequireFeatureFlags.kt
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2023 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.intentresolver
+
+/**
+ * Specifies expected feature flag values for a test.
+ */
+@Target(AnnotationTarget.FUNCTION)
+annotation class RequireFeatureFlags(val flags: Array<String>, val values: BooleanArray)
diff --git a/java/tests/src/com/android/intentresolver/TestFeatureFlagRepository.kt b/java/tests/src/com/android/intentresolver/TestFeatureFlagRepository.kt
index abc24efb..5a159d24 100644
--- a/java/tests/src/com/android/intentresolver/TestFeatureFlagRepository.kt
+++ b/java/tests/src/com/android/intentresolver/TestFeatureFlagRepository.kt
@@ -17,14 +17,15 @@
package com.android.intentresolver
import com.android.intentresolver.flags.FeatureFlagRepository
+import com.android.systemui.flags.BooleanFlag
import com.android.systemui.flags.ReleasedFlag
import com.android.systemui.flags.UnreleasedFlag
internal class TestFeatureFlagRepository(
- private val overrides: Map<UnreleasedFlag, Boolean>
+ private val overrides: Map<BooleanFlag, Boolean>
) : FeatureFlagRepository {
- override fun isEnabled(flag: UnreleasedFlag): Boolean =
- overrides.getOrDefault(flag, flag.default)
+ override fun isEnabled(flag: UnreleasedFlag): Boolean = getValue(flag)
+ override fun isEnabled(flag: ReleasedFlag): Boolean = getValue(flag)
- override fun isEnabled(flag: ReleasedFlag): Boolean = flag.default
+ private fun getValue(flag: BooleanFlag) = overrides.getOrDefault(flag, flag.default)
}
diff --git a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java
index 17fd5bd9..82a635dd 100644
--- a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java
+++ b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java
@@ -107,6 +107,7 @@ import com.android.intentresolver.flags.Flags;
import com.android.intentresolver.shortcuts.ShortcutLoader;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.systemui.flags.BooleanFlag;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
@@ -115,6 +116,8 @@ import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.RuleChain;
+import org.junit.rules.TestRule;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.mockito.ArgumentCaptor;
@@ -123,7 +126,6 @@ import org.mockito.Mockito;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -162,14 +164,40 @@ public class UnbundledChooserActivityTest {
return mock;
};
+ private static final List<BooleanFlag> ALL_FLAGS =
+ Arrays.asList(
+ Flags.SHARESHEET_CUSTOM_ACTIONS,
+ Flags.SHARESHEET_RESELECTION_ACTION,
+ Flags.SHARESHEET_IMAGE_AND_TEXT_PREVIEW,
+ Flags.SHARESHEET_SCROLLABLE_IMAGE_PREVIEW);
+
+ private static final Map<BooleanFlag, Boolean> ALL_FLAGS_OFF =
+ createAllFlagsOverride(false);
+ private static final Map<BooleanFlag, Boolean> ALL_FLAGS_ON =
+ createAllFlagsOverride(true);
+
@Parameterized.Parameters
public static Collection packageManagers() {
return Arrays.asList(new Object[][] {
- {0, "Default PackageManager", DEFAULT_PM},
- {1, "No App Prediction Service", NO_APP_PREDICTION_SERVICE_PM}
+ // Default PackageManager and all flags off
+ { DEFAULT_PM, ALL_FLAGS_OFF },
+ // Default PackageManager and all flags on
+ { DEFAULT_PM, ALL_FLAGS_ON },
+ // No App Prediction Service and all flags off
+ { NO_APP_PREDICTION_SERVICE_PM, ALL_FLAGS_OFF },
+ // No App Prediction Service and all flags on
+ { NO_APP_PREDICTION_SERVICE_PM, ALL_FLAGS_ON }
});
}
+ private static Map<BooleanFlag, Boolean> createAllFlagsOverride(boolean value) {
+ HashMap<BooleanFlag, Boolean> overrides = new HashMap<>(ALL_FLAGS.size());
+ for (BooleanFlag flag : ALL_FLAGS) {
+ overrides.put(flag, value);
+ }
+ return overrides;
+ }
+
/* --------
* Subclasses can override the following methods to customize test behavior.
* --------
@@ -189,6 +217,8 @@ public class UnbundledChooserActivityTest {
.adoptShellPermissionIdentity();
cleanOverrideData();
+ ChooserActivityOverrideData.getInstance().featureFlagRepository =
+ new TestFeatureFlagRepository(mFlags);
}
/**
@@ -221,11 +251,13 @@ public class UnbundledChooserActivityTest {
* --------
*/
+ @Rule
+ public final TestRule mRule;
+
// Shared test code references the activity under test as ChooserActivity, the common ancestor
// of any (inheritance-based) chooser implementation. For testing purposes, that activity will
// usually be cast to IChooserWrapper to expose instrumentation.
- @Rule
- public ActivityTestRule<ChooserActivity> mActivityRule =
+ private ActivityTestRule<ChooserActivity> mActivityRule =
new ActivityTestRule<>(ChooserActivity.class, false, false) {
@Override
public ChooserActivity launchActivity(Intent clientIntent) {
@@ -252,16 +284,20 @@ public class UnbundledChooserActivityTest {
private static final int CONTENT_PREVIEW_IMAGE = 1;
private static final int CONTENT_PREVIEW_FILE = 2;
private static final int CONTENT_PREVIEW_TEXT = 3;
- private Function<PackageManager, PackageManager> mPackageManagerOverride;
- private int mTestNum;
+
+ private final Function<PackageManager, PackageManager> mPackageManagerOverride;
+ private final Map<BooleanFlag, Boolean> mFlags;
public UnbundledChooserActivityTest(
- int testNum,
- String testName,
- Function<PackageManager, PackageManager> packageManagerOverride) {
+ Function<PackageManager, PackageManager> packageManagerOverride,
+ Map<BooleanFlag, Boolean> flags) {
mPackageManagerOverride = packageManagerOverride;
- mTestNum = testNum;
+ mFlags = flags;
+
+ mRule = RuleChain
+ .outerRule(new FeatureFlagRule(flags))
+ .around(mActivityRule);
}
private void setDeviceConfigProperty(
@@ -757,10 +793,10 @@ public class UnbundledChooserActivityTest {
}
@Test
+ @RequireFeatureFlags(
+ flags = { Flags.SHARESHEET_IMAGE_AND_TEXT_PREVIEW_NAME },
+ values = { true })
public void testImagePlusTextSharing_ExcludeText() {
- ChooserActivityOverrideData.getInstance().featureFlagRepository =
- new TestFeatureFlagRepository(
- Collections.singletonMap(Flags.SHARESHEET_IMAGE_AND_TEXT_PREVIEW, true));
Intent sendIntent = createSendImageIntent(
Uri.parse("android.resource://com.android.frameworks.coretests/"
+ R.drawable.test320x240));
@@ -809,10 +845,10 @@ public class UnbundledChooserActivityTest {
}
@Test
+ @RequireFeatureFlags(
+ flags = { Flags.SHARESHEET_IMAGE_AND_TEXT_PREVIEW_NAME },
+ values = { true })
public void testImagePlusTextSharing_RemoveAndAddBackText() {
- ChooserActivityOverrideData.getInstance().featureFlagRepository =
- new TestFeatureFlagRepository(
- Collections.singletonMap(Flags.SHARESHEET_IMAGE_AND_TEXT_PREVIEW, true));
Intent sendIntent = createSendImageIntent(
Uri.parse("android.resource://com.android.frameworks.coretests/"
+ R.drawable.test320x240));
@@ -865,10 +901,10 @@ public class UnbundledChooserActivityTest {
}
@Test
+ @RequireFeatureFlags(
+ flags = { Flags.SHARESHEET_IMAGE_AND_TEXT_PREVIEW_NAME },
+ values = { true })
public void testImagePlusTextSharing_TextExclusionDoesNotAffectAlternativeIntent() {
- ChooserActivityOverrideData.getInstance().featureFlagRepository =
- new TestFeatureFlagRepository(
- Collections.singletonMap(Flags.SHARESHEET_IMAGE_AND_TEXT_PREVIEW, true));
Intent sendIntent = createSendImageIntent(
Uri.parse("android.resource://com.android.frameworks.coretests/"
+ R.drawable.test320x240));
@@ -1070,10 +1106,10 @@ public class UnbundledChooserActivityTest {
}
@Test
+ @RequireFeatureFlags(
+ flags = { Flags.SHARESHEET_SCROLLABLE_IMAGE_PREVIEW_NAME },
+ values = { false })
public void twoVisibleImagePreview() {
- ChooserActivityOverrideData.getInstance().featureFlagRepository =
- new TestFeatureFlagRepository(
- Collections.singletonMap(Flags.SHARESHEET_SCROLLABLE_IMAGE_PREVIEW, false));
Uri uri = Uri.parse("android.resource://com.android.frameworks.coretests/"
+ R.drawable.test320x240);
@@ -1110,11 +1146,10 @@ public class UnbundledChooserActivityTest {
}
@Test
+ @RequireFeatureFlags(
+ flags = { Flags.SHARESHEET_SCROLLABLE_IMAGE_PREVIEW_NAME },
+ values = { false })
public void threeOrMoreVisibleImagePreview() {
- ChooserActivityOverrideData.getInstance().featureFlagRepository =
- new TestFeatureFlagRepository(
- Collections.singletonMap(
- Flags.SHARESHEET_SCROLLABLE_IMAGE_PREVIEW, false));
Uri uri = Uri.parse("android.resource://com.android.frameworks.coretests/"
+ R.drawable.test320x240);
@@ -1154,11 +1189,10 @@ public class UnbundledChooserActivityTest {
}
@Test
+ @RequireFeatureFlags(
+ flags = { Flags.SHARESHEET_SCROLLABLE_IMAGE_PREVIEW_NAME },
+ values = { true })
public void testManyVisibleImagePreview_ScrollableImagePreview() {
- ChooserActivityOverrideData.getInstance().featureFlagRepository =
- new TestFeatureFlagRepository(
- Collections.singletonMap(
- Flags.SHARESHEET_SCROLLABLE_IMAGE_PREVIEW, true));
Uri uri = Uri.parse("android.resource://com.android.frameworks.coretests/"
+ R.drawable.test320x240);
@@ -1204,10 +1238,10 @@ public class UnbundledChooserActivityTest {
}
@Test
+ @RequireFeatureFlags(
+ flags = { Flags.SHARESHEET_IMAGE_AND_TEXT_PREVIEW_NAME },
+ values = { true })
public void testImageAndTextPreview() {
- ChooserActivityOverrideData.getInstance().featureFlagRepository =
- new TestFeatureFlagRepository(
- Collections.singletonMap(Flags.SHARESHEET_IMAGE_AND_TEXT_PREVIEW, true));
final Uri uri = Uri.parse("android.resource://com.android.frameworks.coretests/"
+ R.drawable.test320x240);
final String sharedText = "text-" + System.currentTimeMillis();
@@ -1943,10 +1977,10 @@ public class UnbundledChooserActivityTest {
}
@Test
+ @RequireFeatureFlags(
+ flags = { Flags.SHARESHEET_CUSTOM_ACTIONS_NAME },
+ values = { true })
public void testLaunchWithCustomAction() throws InterruptedException {
- ChooserActivityOverrideData.getInstance().featureFlagRepository =
- new TestFeatureFlagRepository(
- Collections.singletonMap(Flags.SHARESHEET_CUSTOM_ACTIONS, true));
List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2);
when(
ChooserActivityOverrideData
@@ -1998,10 +2032,10 @@ public class UnbundledChooserActivityTest {
}
@Test
+ @RequireFeatureFlags(
+ flags = { Flags.SHARESHEET_RESELECTION_ACTION_NAME },
+ values = { true })
public void testLaunchWithShareModification() throws InterruptedException {
- ChooserActivityOverrideData.getInstance().featureFlagRepository =
- new TestFeatureFlagRepository(
- Collections.singletonMap(Flags.SHARESHEET_RESELECTION_ACTION, true));
List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2);
when(
ChooserActivityOverrideData