diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2019-09-05 19:28:04 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-09-05 19:28:04 +0000 |
commit | 17d2f38b5fbef9ecc0f2c0c8c82b5568bfe861fd (patch) | |
tree | 20c49e3b764308cb87df9cb7c08454f457c1cf14 /startop | |
parent | a3da049fb3496a5a00224ec598d603daa42f9019 (diff) | |
parent | 960a1a4bc97bdd055b974aa64e45fc758778c03a (diff) |
Merge "[view compiler] Add test coverage for layouts compiled from APK"
Diffstat (limited to 'startop')
4 files changed, 73 insertions, 7 deletions
diff --git a/startop/view_compiler/dex_builder_test/Android.bp b/startop/view_compiler/dex_builder_test/Android.bp index 1214538e8f0d..f783aa68fe92 100644 --- a/startop/view_compiler/dex_builder_test/Android.bp +++ b/startop/view_compiler/dex_builder_test/Android.bp @@ -37,15 +37,21 @@ genrule { android_test { name: "dex-builder-test", srcs: [ + "src/android/startop/test/ApkLayoutCompilerTest.java", "src/android/startop/test/DexBuilderTest.java", "src/android/startop/test/LayoutCompilerTest.java", "src/android/startop/test/TestClass.java", ], sdk_version: "current", - data: [":generate_dex_testcases", ":generate_compiled_layout1", ":generate_compiled_layout2"], + data: [ + ":generate_dex_testcases", + ":generate_compiled_layout1", + ":generate_compiled_layout2", + ], static_libs: [ - "androidx.test.rules", - "guava", + "androidx.test.core", + "androidx.test.runner", + "junit", ], manifest: "AndroidManifest.xml", resource_dirs: ["res"], diff --git a/startop/view_compiler/dex_builder_test/src/android/startop/test/ApkLayoutCompilerTest.java b/startop/view_compiler/dex_builder_test/src/android/startop/test/ApkLayoutCompilerTest.java new file mode 100644 index 000000000000..230e8df1e687 --- /dev/null +++ b/startop/view_compiler/dex_builder_test/src/android/startop/test/ApkLayoutCompilerTest.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2019 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 android.startop.test; + +import android.content.Context; +import androidx.test.InstrumentationRegistry; +import android.view.View; +import dalvik.system.PathClassLoader; +import java.lang.reflect.Method; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +public class ApkLayoutCompilerTest { + static ClassLoader loadDexFile() throws Exception { + Context context = InstrumentationRegistry.getTargetContext(); + return new PathClassLoader(context.getCodeCacheDir() + "/compiled_view.dex", + ClassLoader.getSystemClassLoader()); + } + + @BeforeClass + public static void setup() throws Exception { + // ensure PackageManager has compiled the layouts. + Process pm = Runtime.getRuntime().exec("pm compile --compile-layouts android.startop.test"); + pm.waitFor(); + } + + @Test + public void loadAndInflateLayout1() throws Exception { + ClassLoader dex_file = loadDexFile(); + Class compiled_view = dex_file.loadClass("android.startop.test.CompiledView"); + Method layout1 = compiled_view.getMethod("layout1", Context.class, int.class); + Context context = InstrumentationRegistry.getTargetContext(); + layout1.invoke(null, context, R.layout.layout1); + } + + @Test + public void loadAndInflateLayout2() throws Exception { + ClassLoader dex_file = loadDexFile(); + Class compiled_view = dex_file.loadClass("android.startop.test.CompiledView"); + Method layout2 = compiled_view.getMethod("layout2", Context.class, int.class); + Context context = InstrumentationRegistry.getTargetContext(); + layout2.invoke(null, context, R.layout.layout2); + } +} diff --git a/startop/view_compiler/dex_builder_test/src/android/startop/test/DexBuilderTest.java b/startop/view_compiler/dex_builder_test/src/android/startop/test/DexBuilderTest.java index d1fe58800bbf..6af01f6f3292 100644 --- a/startop/view_compiler/dex_builder_test/src/android/startop/test/DexBuilderTest.java +++ b/startop/view_compiler/dex_builder_test/src/android/startop/test/DexBuilderTest.java @@ -14,8 +14,11 @@ package android.startop.test; +import android.content.Context; +import androidx.test.InstrumentationRegistry; import dalvik.system.PathClassLoader; - +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import org.junit.Assert; import org.junit.Test; diff --git a/startop/view_compiler/dex_builder_test/src/android/startop/test/LayoutCompilerTest.java b/startop/view_compiler/dex_builder_test/src/android/startop/test/LayoutCompilerTest.java index 3dfb20c2e524..b0cf91d5fb97 100644 --- a/startop/view_compiler/dex_builder_test/src/android/startop/test/LayoutCompilerTest.java +++ b/startop/view_compiler/dex_builder_test/src/android/startop/test/LayoutCompilerTest.java @@ -15,11 +15,11 @@ package android.startop.test; import android.content.Context; - import androidx.test.InstrumentationRegistry; - +import android.view.View; import dalvik.system.PathClassLoader; - +import java.lang.reflect.Method; +import org.junit.Assert; import org.junit.Test; import java.lang.reflect.Method; |