diff options
author | Annie Meng <anniemeng@google.com> | 2019-07-03 16:10:39 +0100 |
---|---|---|
committer | Annie Meng <anniemeng@google.com> | 2019-07-03 23:24:28 +0100 |
commit | 589f9dda313c82fb11a19a363e6aa5c110287b94 (patch) | |
tree | db23fcf97313278d51f988350dfb57a44b70ff77 | |
parent | 1c4b5c93996ad6b2a8cea2e92be0f7f76b650b31 (diff) | |
download | robolectric-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
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<>(); |