Add mroe tests for broadcast receiver aliases

Bug: 196254758
Test: atest ComponentAliasTests ComponentAliasTests1 ComponentAliasTests2
Change-Id: I34e35762ef37959c87254d46a3fae5865d6f9f4c
diff --git a/tests/componentalias/AndroidManifest_service_aliases.xml b/tests/componentalias/AndroidManifest_service_aliases.xml
index 8c1ced6c..e73bb61 100644
--- a/tests/componentalias/AndroidManifest_service_aliases.xml
+++ b/tests/componentalias/AndroidManifest_service_aliases.xml
@@ -50,31 +50,31 @@
         <receiver android:name=".b.Alias00" android:exported="true" android:enabled="true" >
             <meta-data android:name="alias_target" android:value="android.content.componentalias.tests/android.content.componentalias.tests.b.Target00" />
             <intent-filter><action android:name="android.intent.action.EXPERIMENTAL_IS_ALIAS" /></intent-filter>
-            <intent-filter><action android:name="android.content.componentalias.tests.IS_ALIAS_00" /></intent-filter>
+            <intent-filter><action android:name="android.content.componentalias.tests.IS_RECEIVER_00" /></intent-filter>
             <intent-filter><action android:name="ACTION_BROADCAST" /></intent-filter>
         </receiver>
         <receiver android:name=".b.Alias01" android:exported="true" android:enabled="true" >
             <meta-data android:name="alias_target" android:value="android.content.componentalias.tests.sub1/android.content.componentalias.tests.b.Target01" />
             <intent-filter><action android:name="android.intent.action.EXPERIMENTAL_IS_ALIAS" /></intent-filter>
-            <intent-filter><action android:name="android.content.componentalias.tests.IS_ALIAS_01" /></intent-filter>
+            <intent-filter><action android:name="android.content.componentalias.tests.IS_RECEIVER_01" /></intent-filter>
             <intent-filter><action android:name="ACTION_BROADCAST" /></intent-filter>
         </receiver>
         <receiver android:name=".b.Alias02" android:exported="true" android:enabled="true" >
             <meta-data android:name="alias_target" android:value="android.content.componentalias.tests.sub2/android.content.componentalias.tests.b.Target02" />
             <intent-filter><action android:name="android.intent.action.EXPERIMENTAL_IS_ALIAS" /></intent-filter>
-            <intent-filter><action android:name="android.content.componentalias.tests.IS_ALIAS_02" /></intent-filter>
+            <intent-filter><action android:name="android.content.componentalias.tests.IS_RECEIVER_02" /></intent-filter>
             <intent-filter><action android:name="ACTION_BROADCAST" /></intent-filter>
         </receiver>
         <receiver android:name=".b.Alias03" android:exported="true" android:enabled="true" >
             <meta-data android:name="alias_target" android:value="android.content.componentalias.tests.sub1/android.content.componentalias.tests.b.Target03" />
             <intent-filter><action android:name="android.intent.action.EXPERIMENTAL_IS_ALIAS" /></intent-filter>
-            <intent-filter><action android:name="android.content.componentalias.tests.IS_ALIAS_03" /></intent-filter>
+            <intent-filter><action android:name="android.content.componentalias.tests.IS_RECEIVER_03" /></intent-filter>
             <intent-filter><action android:name="ACTION_BROADCAST" /></intent-filter>
         </receiver>
         <receiver android:name=".b.Alias04" android:exported="true" android:enabled="true" >
             <meta-data android:name="alias_target" android:value="android.content.componentalias.tests.sub2/android.content.componentalias.tests.b.Target04" />
             <intent-filter><action android:name="android.intent.action.EXPERIMENTAL_IS_ALIAS" /></intent-filter>
-            <intent-filter><action android:name="android.content.componentalias.tests.IS_ALIAS_04" /></intent-filter>
+            <intent-filter><action android:name="android.content.componentalias.tests.IS_RECEIVER_04" /></intent-filter>
             <intent-filter><action android:name="ACTION_BROADCAST" /></intent-filter>
         </receiver>
     </application>
diff --git a/tests/componentalias/AndroidManifest_service_targets.xml b/tests/componentalias/AndroidManifest_service_targets.xml
index c4bcd78..24c0432 100644
--- a/tests/componentalias/AndroidManifest_service_targets.xml
+++ b/tests/componentalias/AndroidManifest_service_targets.xml
@@ -28,19 +28,29 @@
         <service android:name=".s.Target04" android:exported="true" android:enabled="true" >
         </service>
 
+        <!--
+            Due to http://go/intents-match-intent-filters-guide, the target intent has to have
+            an intent filter that matches the original intent. (modulo the package name)
+            This restriction shouldn't exist in the final version.
+        -->
         <receiver android:name=".b.Target00" android:exported="true" android:enabled="true" >
+            <intent-filter><action android:name="android.content.componentalias.tests.IS_RECEIVER_00" /></intent-filter>
             <intent-filter><action android:name="ACTION_BROADCAST" /></intent-filter>
         </receiver>
         <receiver android:name=".b.Target01" android:exported="true" android:enabled="true" >
+            <intent-filter><action android:name="android.content.componentalias.tests.IS_RECEIVER_01" /></intent-filter>
             <intent-filter><action android:name="ACTION_BROADCAST" /></intent-filter>
         </receiver>
         <receiver android:name=".b.Target02" android:exported="true" android:enabled="true" >
+            <intent-filter><action android:name="android.content.componentalias.tests.IS_RECEIVER_02" /></intent-filter>
             <intent-filter><action android:name="ACTION_BROADCAST" /></intent-filter>
         </receiver>
         <receiver android:name=".b.Target03" android:exported="true" android:enabled="true" >
+            <intent-filter><action android:name="android.content.componentalias.tests.IS_RECEIVER_03" /></intent-filter>
             <intent-filter><action android:name="ACTION_BROADCAST" /></intent-filter>
         </receiver>
         <receiver android:name=".b.Target04" android:exported="true" android:enabled="true" >
+            <intent-filter><action android:name="android.content.componentalias.tests.IS_RECEIVER_04" /></intent-filter>
             <intent-filter><action android:name="ACTION_BROADCAST" /></intent-filter>
         </receiver>
     </application>
diff --git a/tests/componentalias/src/android/content/componentalias/tests/ComponentAliasBroadcastTest.java b/tests/componentalias/src/android/content/componentalias/tests/ComponentAliasBroadcastTest.java
index a568313..7d5e0b9 100644
--- a/tests/componentalias/src/android/content/componentalias/tests/ComponentAliasBroadcastTest.java
+++ b/tests/componentalias/src/android/content/componentalias/tests/ComponentAliasBroadcastTest.java
@@ -16,18 +16,17 @@
 package android.content.componentalias.tests;
 
 import static android.content.componentalias.tests.ComponentAliasTestCommon.MAIN_PACKAGE;
+import static android.content.componentalias.tests.ComponentAliasTestCommon.SUB1_PACKAGE;
+import static android.content.componentalias.tests.ComponentAliasTestCommon.SUB2_PACKAGE;
 import static android.content.componentalias.tests.ComponentAliasTestCommon.TAG;
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.hamcrest.core.Is.is;
-
 import android.content.ComponentName;
 import android.content.Intent;
 
 import com.android.compatibility.common.util.BroadcastMessenger.Receiver;
 
-import org.junit.Assume;
 import org.junit.Test;
 
 import java.util.function.Consumer;
@@ -37,18 +36,16 @@
         new Combo(
                 new ComponentName(MAIN_PACKAGE, MAIN_PACKAGE + ".b.Alias00"),
                 new ComponentName(MAIN_PACKAGE, MAIN_PACKAGE + ".b.Target00"),
-                MAIN_PACKAGE + ".IS_ALIAS_00").apply(callback);
+                MAIN_PACKAGE + ".IS_RECEIVER_00").apply(callback);
 
-        // TODO: This still don't pass -- fix it. But there seems to be an issue with
-        // `am instrument`, so need to fix that first...
-//        new Combo(
-//                new ComponentName(MAIN_PACKAGE, MAIN_PACKAGE + ".b.Alias01"),
-//                new ComponentName(SUB1_PACKAGE, MAIN_PACKAGE + ".b.Target01"),
-//                MAIN_PACKAGE + ".IS_ALIAS_01").apply(callback);
-//        new Combo(
-//                new ComponentName(MAIN_PACKAGE, MAIN_PACKAGE + ".b.Alias02"),
-//                new ComponentName(SUB2_PACKAGE, MAIN_PACKAGE + ".b.Target02"),
-//                MAIN_PACKAGE + ".IS_ALIAS_02").apply(callback);
+        new Combo(
+                new ComponentName(MAIN_PACKAGE, MAIN_PACKAGE + ".b.Alias01"),
+                new ComponentName(SUB1_PACKAGE, MAIN_PACKAGE + ".b.Target01"),
+                MAIN_PACKAGE + ".IS_RECEIVER_01").apply(callback);
+        new Combo(
+                new ComponentName(MAIN_PACKAGE, MAIN_PACKAGE + ".b.Alias02"),
+                new ComponentName(SUB2_PACKAGE, MAIN_PACKAGE + ".b.Target02"),
+                MAIN_PACKAGE + ".IS_RECEIVER_02").apply(callback);
     }
 
     @Test
@@ -77,9 +74,13 @@
 
     @Test
     public void testBroadcast_explicitPackageName() {
-        // TODO Fix it -- it should work even when called from sub-packages.
-        Assume.assumeThat(sContext.getPackageName(), is(MAIN_PACKAGE));
         forEachCombo((c) -> {
+            // In this test, we only set the package name to the intent.
+            // If the alias and target are the same package, the intent will be sent to both of them
+            // *and* the one to the alias is redirected to the target, so the target will receive
+            // the intent twice. This case is haled at *1 below.
+
+
             Intent i = new Intent().setPackage(c.alias.getPackageName());
             i.setAction(c.action);
             ComponentAliasMessage m;
@@ -92,10 +93,16 @@
 
                 assertThat(m.getMethodName()).isEqualTo("onReceive");
                 assertThat(m.getSenderIdentity()).isEqualTo(c.target.flattenToShortString());
-
-                // The broadcast intent will always have the receiving component name set.
                 assertThat(m.getIntent().getComponent()).isEqualTo(c.target);
 
+                // *1 -- if the alias and target are in the same package, we expect one more
+                // message.
+                if (c.alias.getPackageName().equals(c.target.getPackageName())) {
+                    m = receiver.waitForNextMessage();
+                    assertThat(m.getMethodName()).isEqualTo("onReceive");
+                    assertThat(m.getSenderIdentity()).isEqualTo(c.target.flattenToShortString());
+                    assertThat(m.getIntent().getComponent()).isEqualTo(c.target);
+                }
                 receiver.ensureNoMoreMessages();
             }
         });