aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnnie Meng <anniemeng@google.com>2019-07-03 16:10:39 +0100
committerAnnie Meng <anniemeng@google.com>2019-07-03 23:24:28 +0100
commit589f9dda313c82fb11a19a363e6aa5c110287b94 (patch)
treedb23fcf97313278d51f988350dfb57a44b70ff77
parent1c4b5c93996ad6b2a8cea2e92be0f7f76b650b31 (diff)
downloadrobolectric-shadows-589f9dda313c82fb11a19a363e6aa5c110287b94.tar.gz
Fix Robolectric shadows and add Q/R support
Updates shadows to reflect changes introduced in ag/8414658. Support Q preview 4 and R in Robolectric. Bug: 136638924 Test: atest RunBackupFrameworkServicesRoboTests Change-Id: I50f4c574bcfcb7c9ab8f8686d8191c194468814e
-rw-r--r--processor/sdks.txt1
-rw-r--r--robolectric/src/main/java/org/robolectric/internal/SdkConfig.java4
-rw-r--r--run_robolectric_module_tests.mk3
-rw-r--r--run_robotests.mk3
-rw-r--r--shadows/framework/src/main/java/org/robolectric/shadows/ShadowActivityThread.java25
-rw-r--r--shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java23
6 files changed, 55 insertions, 4 deletions
diff --git a/processor/sdks.txt b/processor/sdks.txt
index c6f88b4b1..e61922009 100644
--- a/processor/sdks.txt
+++ b/processor/sdks.txt
@@ -10,3 +10,4 @@ prebuilts/misc/common/robolectric/android-all/android-all-7.1.0_r7-robolectric-r
prebuilts/misc/common/robolectric/android-all/android-all-8.0.0_r4-robolectric-r1.jar
prebuilts/misc/common/robolectric/android-all/android-all-8.1.0-robolectric-4611349.jar
prebuilts/misc/common/robolectric/android-all/android-all-9-robolectric-4913185-2.jar
+prebuilts/misc/common/robolectric/android-all/android-all-9plus-robolectric-5616371.jar
diff --git a/robolectric/src/main/java/org/robolectric/internal/SdkConfig.java b/robolectric/src/main/java/org/robolectric/internal/SdkConfig.java
index 7002140f8..556f885fd 100644
--- a/robolectric/src/main/java/org/robolectric/internal/SdkConfig.java
+++ b/robolectric/src/main/java/org/robolectric/internal/SdkConfig.java
@@ -29,8 +29,10 @@ public class SdkConfig implements Comparable<SdkConfig> {
addSdk(Build.VERSION_CODES.O, "8.0.0_r4", "r1", "REL");
addSdk(Build.VERSION_CODES.O_MR1, "8.1.0", "4611349", "REL");
addSdk(Build.VERSION_CODES.P, "9", "4913185-2", "REL");
+ // TODO(b/136679333): Update jar with final Q release.
+ addSdk(Build.VERSION_CODES.Q, "9plus", "5616371", "REL");
// BEGIN-INTERNAL
- addSdk(Build.VERSION_CODES.Q, "Q", "r0", "Q");
+ addSdk(Build.VERSION_CODES.R, "R", "r0", "R");
// END-INTERNAL
}
diff --git a/run_robolectric_module_tests.mk b/run_robolectric_module_tests.mk
index 6e49e7555..f229670b6 100644
--- a/run_robolectric_module_tests.mk
+++ b/run_robolectric_module_tests.mk
@@ -49,7 +49,8 @@ copy_android_all_jar_pairs := \
$(android_all_source_dir)/android-all-8.0.0_r4-robolectric-r1.jar:$(android_all_target_dir)/android-all-8.0.0_r4-robolectric-r1.jar \
$(android_all_source_dir)/android-all-8.1.0-robolectric-4611349.jar:$(android_all_target_dir)/android-all-8.1.0-robolectric-4611349.jar \
$(android_all_source_dir)/android-all-9-robolectric-4913185-2.jar:$(android_all_target_dir)/android-all-9-robolectric-4913185-2.jar \
- $(local_android_all_source_jar):$(android_all_target_dir)/android-all-Q-robolectric-r0.jar
+ $(android_all_source_dir)/android-all-9plus-robolectric-5616371.jar:$(android_all_target_dir)/android-all-9plus-robolectric-5616371.jar \
+ $(local_android_all_source_jar):$(android_all_target_dir)/android-all-R-robolectric-r0.jar
copy_android_all_jars := $(call copy-many-files, $(copy_android_all_jar_pairs))
# If debugging the tests was requested, set up the JVM parameters to enable it.
diff --git a/run_robotests.mk b/run_robotests.mk
index 2b076b05f..6aeb2e7ae 100644
--- a/run_robotests.mk
+++ b/run_robotests.mk
@@ -130,7 +130,8 @@ ifneq ($(DISABLE_ROBO_RUN_TESTS),true)
$(android_all_lib_path)/android-all-8.0.0_r4-robolectric-r1.jar:$(my_robolectric_path)/android-all-8.0.0_r4-robolectric-r1.jar \
$(android_all_lib_path)/android-all-8.1.0-robolectric-4611349.jar:$(my_robolectric_path)/android-all-8.1.0-robolectric-4611349.jar \
$(android_all_lib_path)/android-all-9-robolectric-4913185-2.jar:$(my_robolectric_path)/android-all-9-robolectric-4913185-2.jar \
- $(local_android_all_source_jar):$(my_robolectric_path)/android-all-Q-robolectric-r0.jar
+ $(android_all_lib_path)/android-all-9plus-robolectric-5616371.jar:$(my_robolectric_path)/android-all-9plus-robolectric-5616371.jar \
+ $(local_android_all_source_jar):$(my_robolectric_path)/android-all-R-robolectric-r0.jar
copy_android_all_jars := $(call copy-many-files, $(copy_android_all_jar_pairs))
$(my_target): $(copy_android_all_jars)
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowActivityThread.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowActivityThread.java
index 65dbc15ff..924b518b4 100644
--- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowActivityThread.java
+++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowActivityThread.java
@@ -1,5 +1,7 @@
package org.robolectric.shadows;
+import static android.os.Build.VERSION_CODES.R;
+
import android.app.ActivityThread;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
@@ -57,6 +59,29 @@ public class ShadowActivityThread {
});
}
+ // BEGIN-INTERNAL
+ @Implementation(minSdk = R)
+ public static Object getPermissionManager() {
+ ClassLoader classLoader = ShadowActivityThread.class.getClassLoader();
+ Class<?> iPermissionManagerClass;
+ try {
+ iPermissionManagerClass = classLoader.loadClass("android.permission.IPermissionManager");
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ return Proxy.newProxyInstance(
+ classLoader,
+ new Class[] {iPermissionManagerClass},
+ new InvocationHandler() {
+ @Override
+ public Object invoke(Object proxy, @Nonnull Method method, Object[] args)
+ throws Exception {
+ return method.getDefaultValue();
+ }
+ });
+ }
+ // END-INTERNAL
+
@Implementation
public static Object currentActivityThread() {
return RuntimeEnvironment.getActivityThread();
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java
index 3ab83fcf6..7bd94868b 100644
--- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java
+++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java
@@ -21,6 +21,8 @@ import static android.os.Build.VERSION_CODES.O;
import static android.os.Build.VERSION_CODES.O_MR1;
import static android.os.Build.VERSION_CODES.P;
import static android.os.Build.VERSION_CODES.Q;
+import static android.os.Build.VERSION_CODES.R;
+
import static org.robolectric.shadow.api.Shadow.invokeConstructor;
import static org.robolectric.util.ReflectionHelpers.ClassParameter.from;
@@ -79,6 +81,7 @@ import android.os.RemoteException;
import android.os.UserHandle;
import android.os.storage.VolumeInfo;
+import android.permission.IPermissionManager;
import android.telecom.TelecomManager;
import android.util.Pair;
import com.google.common.base.Function;
@@ -115,7 +118,7 @@ public class ShadowApplicationPackageManager extends ShadowPackageManager {
private Context context;
- @Implementation
+ @Implementation(maxSdk = Q)
protected void __constructor__(Object contextImpl, Object pm) {
try {
invokeConstructor(
@@ -129,6 +132,24 @@ public class ShadowApplicationPackageManager extends ShadowPackageManager {
context = (Context) contextImpl;
}
+ // BEGIN-INTERNAL
+ @Implementation(minSdk = R)
+ protected void __constructor__(
+ Object contextImpl, Object packageManager, Object permissionManager) {
+ try {
+ invokeConstructor(
+ ApplicationPackageManager.class,
+ realObject,
+ from(Class.forName(ShadowContextImpl.CLASS_NAME), contextImpl),
+ from(IPackageManager.class, packageManager),
+ from(IPermissionManager.class, permissionManager));
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ context = (Context) contextImpl;
+ }
+ // END-INTERNAL
+
@Implementation
public List<PackageInfo> getInstalledPackages(int flags) {
List<PackageInfo> result = new ArrayList<>();