DexClassLoaderTest.java revision ec80ed70b9790785bd70b9482ec94e7dea09fd48
144401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein/* 244401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * Copyright (C) 2011 The Android Open Source Project 344401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * 444401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * Licensed under the Apache License, Version 2.0 (the "License"); 544401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * you may not use this file except in compliance with the License. 644401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * You may obtain a copy of the License at 744401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * 844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * http://www.apache.org/licenses/LICENSE-2.0 944401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * 1044401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * Unless required by applicable law or agreed to in writing, software 1144401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * distributed under the License is distributed on an "AS IS" BASIS, 1244401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1344401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * See the License for the specific language governing permissions and 1444401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * limitations under the License. 1544401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein */ 1644401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 1744401c99f407517a16f8bf75a942a1461a6feceeDan Bornsteinpackage dalvik.system; 1844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 190097708dae398465c3da40cc7f9a2dfde5571364Dan Bornsteinimport java.lang.reflect.InvocationTargetException; 200097708dae398465c3da40cc7f9a2dfde5571364Dan Bornsteinimport java.lang.reflect.Method; 2144401c99f407517a16f8bf75a942a1461a6feceeDan Bornsteinimport java.io.File; 2244401c99f407517a16f8bf75a942a1461a6feceeDan Bornsteinimport java.io.FileOutputStream; 2344401c99f407517a16f8bf75a942a1461a6feceeDan Bornsteinimport java.io.IOException; 2444401c99f407517a16f8bf75a942a1461a6feceeDan Bornsteinimport java.io.InputStream; 256186821cb13f4ac7ff50950c813394367e021eaeJesse Wilsonimport libcore.io.Streams; 2644401c99f407517a16f8bf75a942a1461a6feceeDan Bornsteinimport junit.framework.TestCase; 2744401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 2844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein/** 2944401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * Tests for the class {@link DexClassLoader}. 3044401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein */ 3144401c99f407517a16f8bf75a942a1461a6feceeDan Bornsteinpublic class DexClassLoaderTest extends TestCase { 3230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein private static final File TMP_DIR = 3330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein new File(System.getProperty("java.io.tmpdir"), "loading-test"); 3444401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein private static final String PACKAGE_PATH = "dalvik/system/"; 3544401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein private static final String JAR_NAME = "loading-test.jar"; 368c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein private static final String DEX_NAME = "loading-test.dex"; 3730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein private static final String JAR2_NAME = "loading-test2.jar"; 3830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein private static final String DEX2_NAME = "loading-test2.dex"; 3951d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein private static final File JAR_FILE = new File(TMP_DIR, JAR_NAME); 4051d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein private static final File DEX_FILE = new File(TMP_DIR, DEX_NAME); 4151d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein private static final File JAR2_FILE = new File(TMP_DIR, JAR2_NAME); 4251d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein private static final File DEX2_FILE = new File(TMP_DIR, DEX2_NAME); 43ec80ed70b9790785bd70b9482ec94e7dea09fd48Dan Bornstein private static final File OPTIMIZED_DIR = new File(TMP_DIR, "optimized"); 4430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein private static enum Configuration { 4630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** just one classpath element, a raw dex file */ 4730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein ONE_DEX, 4830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** just one classpath element, a jar file */ 5030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein ONE_JAR, 5130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 5230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** two classpath elements, both raw dex files */ 5330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein TWO_DEX, 5430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 5530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** two classpath elements, both jar files */ 5630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein TWO_JAR; 5730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 5844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 5944401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein protected void setUp() throws IOException { 6044401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein TMP_DIR.mkdirs(); 61ec80ed70b9790785bd70b9482ec94e7dea09fd48Dan Bornstein OPTIMIZED_DIR.mkdirs(); 6244401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 6344401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein ClassLoader cl = DexClassLoaderTest.class.getClassLoader(); 6451d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein copyResource(cl, JAR_NAME, JAR_FILE); 6551d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein copyResource(cl, DEX_NAME, DEX_FILE); 6651d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein copyResource(cl, JAR2_NAME, JAR2_FILE); 6751d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein copyResource(cl, DEX2_NAME, DEX2_FILE); 680ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein } 698c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 700ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein /** 710ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein * Copy a resource in the package directory to the indicated file. 720ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein */ 730ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein private static void copyResource(ClassLoader loader, String resourceName, 740ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein File destination) throws IOException { 750ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein InputStream in = 760ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein loader.getResourceAsStream(PACKAGE_PATH + resourceName); 770ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein FileOutputStream out = new FileOutputStream(destination); 7844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein Streams.copy(in, out); 7944401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein in.close(); 8044401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein out.close(); 8144401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein } 8244401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 8344401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein /** 840097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * Helper to construct an instance to test. 858c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * 8630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * @param config how to configure the classpath 870097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein */ 8830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein private static DexClassLoader createInstance(Configuration config) { 8930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein File file1; 9030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein File file2; 9130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 9230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein switch (config) { 9351d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein case ONE_DEX: file1 = DEX_FILE; file2 = null; break; 9451d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein case ONE_JAR: file1 = JAR_FILE; file2 = null; break; 9551d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein case TWO_DEX: file1 = DEX_FILE; file2 = DEX2_FILE; break; 9651d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein case TWO_JAR: file1 = JAR_FILE; file2 = JAR2_FILE; break; 9730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein default: throw new AssertionError("shouldn't happen"); 9830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 9930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 10030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein String path = file1.getAbsolutePath(); 10130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein if (file2 != null) { 10230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein path += File.pathSeparator + file2.getAbsolutePath(); 10330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 10430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 10530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein return new DexClassLoader( 106ec80ed70b9790785bd70b9482ec94e7dea09fd48Dan Bornstein path, OPTIMIZED_DIR.getAbsolutePath(), null, 10730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein ClassLoader.getSystemClassLoader()); 1080097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein } 1090097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein 1100097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein /** 1118c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * Helper to construct an instance to test, using the jar file as 1128c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * the source, and call a named no-argument static method on a 1138c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * named class. 1148c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * 11530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * @param config how to configure the classpath 1168c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 11730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static Object createInstanceAndCallStaticMethod( 11830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein Configuration config, String className, String methodName) 1198c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws ClassNotFoundException, NoSuchMethodException, 1208c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein IllegalAccessException, InvocationTargetException { 12130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein DexClassLoader dcl = createInstance(config); 1228c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein Class c = dcl.loadClass(className); 1238c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein Method m = c.getMethod(methodName, (Class[]) null); 1248c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein return m.invoke(null, (Object[]) null); 1258c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1268c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1278c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /* 1288c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * Tests that are parametric with respect to whether to use a jar 1298c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * file or a dex file as the source of the code 1308c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 1318c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1328c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /** 1330097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * Just a trivial test of construction. This one merely makes 1340097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * sure that a valid construction doesn't fail; it doesn't try 1350097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * to verify anything about the constructed instance. (Other 1360097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * tests will do that.) 13744401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein */ 13830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_init(Configuration config) { 13930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein createInstance(config); 1400097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein } 1410097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein 1420097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein /** 1431c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * Check that a class in the jar/dex file may be used successfully. In this 1440097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * case, a trivial static method is called. 1450097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein */ 14630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_simpleUse(Configuration config) throws Exception { 1478c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein String result = (String) 14830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein createInstanceAndCallStaticMethod(config, "test.Test1", "test"); 1490097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein 1500097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein assertSame("blort", result); 15144401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein } 15292c92f5f5306c7bed2c34b8382dad32445f5ef85Dan Bornstein 1538c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /* 1548c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * All the following tests are just pass-throughs to test code 1558c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * that lives inside the loading-test dex/jar file. 1568c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 1578c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1586bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_constructor(Configuration config) 1596bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 1606bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 1616bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_constructor"); 1626bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 1636bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 16430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_callStaticMethod(Configuration config) 1658c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1668c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 16751d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_callStaticMethod"); 1688c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1698c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 17030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_getStaticVariable(Configuration config) 1718c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1728c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 17351d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_getStaticVariable"); 1748c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1758c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 17630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_callInstanceMethod(Configuration config) 1778c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1788c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 17951d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_callInstanceMethod"); 1808c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1818c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 18230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_getInstanceVariable(Configuration config) 1838c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1848c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 18551d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_getInstanceVariable"); 1868c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1878c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1886bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_diff_constructor(Configuration config) 1896bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 1906bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 1916bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_constructor"); 1926bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 1936bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 1946bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_diff_callStaticMethod(Configuration config) 1956bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 1966bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 1976bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_callStaticMethod"); 1986bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 1996bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2006bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_diff_getStaticVariable(Configuration config) 2016bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 2026bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 2036bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_getStaticVariable"); 2046bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2056bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2066bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_diff_callInstanceMethod(Configuration config) 2076bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 2086bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 2096bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_callInstanceMethod"); 2106bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2116bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2126bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_diff_getInstanceVariable(Configuration config) 2136bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 2146bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 2156bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_getInstanceVariable"); 2166bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2176bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2188c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /* 2191c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * These methods are all essentially just calls to the 2206bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein * parametrically-defined tests above. 2218c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 2228c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2236bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein // ONE_JAR 2246bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2256bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_init() throws Exception { 22630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_init(Configuration.ONE_JAR); 2278c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2288c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2296bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_simpleUse() throws Exception { 23030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_simpleUse(Configuration.ONE_JAR); 2318c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2328c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2336bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_constructor() throws Exception { 2346bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_constructor(Configuration.ONE_JAR); 2356bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2366bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2376bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_callStaticMethod() throws Exception { 23830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_callStaticMethod(Configuration.ONE_JAR); 2398c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2408c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2416bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_getStaticVariable() throws Exception { 24230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getStaticVariable(Configuration.ONE_JAR); 2438c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2448c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2456bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_callInstanceMethod() throws Exception { 24630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_callInstanceMethod(Configuration.ONE_JAR); 2478c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2488c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2496bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_getInstanceVariable() throws Exception { 25030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getInstanceVariable(Configuration.ONE_JAR); 2518c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2528c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2536bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein // ONE_DEX 2546bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2556bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_init() throws Exception { 25630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_init(Configuration.ONE_DEX); 2578c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2588c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2596bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_simpleUse() throws Exception { 26030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_simpleUse(Configuration.ONE_DEX); 2618c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2628c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2636bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_constructor() throws Exception { 2646bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_constructor(Configuration.ONE_DEX); 2656bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2666bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2676bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_callStaticMethod() throws Exception { 26830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_callStaticMethod(Configuration.ONE_DEX); 2698c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2708c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2716bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_getStaticVariable() throws Exception { 27230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getStaticVariable(Configuration.ONE_DEX); 2738c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2748c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2756bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_callInstanceMethod() throws Exception { 27630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_callInstanceMethod(Configuration.ONE_DEX); 2778c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2788c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2796bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_getInstanceVariable() throws Exception { 28030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getInstanceVariable(Configuration.ONE_DEX); 2818c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2821c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 2836bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein // TWO_JAR 2846bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2856bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_init() throws Exception { 2866bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_init(Configuration.TWO_JAR); 2876bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2886bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2896bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_simpleUse() throws Exception { 2906bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_simpleUse(Configuration.TWO_JAR); 2916bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2926bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2936bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_constructor() throws Exception { 2946bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_constructor(Configuration.TWO_JAR); 2956bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2966bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2976bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_callStaticMethod() throws Exception { 2986bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_callStaticMethod(Configuration.TWO_JAR); 2996bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3006bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3016bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_getStaticVariable() throws Exception { 3026bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_getStaticVariable(Configuration.TWO_JAR); 3036bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3046bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3056bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_callInstanceMethod() throws Exception { 3066bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_callInstanceMethod(Configuration.TWO_JAR); 3076bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3086bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3096bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_getInstanceVariable() throws Exception { 3106bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_getInstanceVariable(Configuration.TWO_JAR); 3116bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3126bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3136bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_constructor() throws Exception { 3146bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_constructor(Configuration.TWO_JAR); 3156bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3166bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3176bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_callStaticMethod() throws Exception { 3186bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_callStaticMethod(Configuration.TWO_JAR); 3196bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3206bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3216bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_getStaticVariable() throws Exception { 3226bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_getStaticVariable(Configuration.TWO_JAR); 3236bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3246bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3256bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_callInstanceMethod() 3266bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 3276bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_callInstanceMethod(Configuration.TWO_JAR); 3286bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3296bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3306bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_getInstanceVariable() 3316bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 3326bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_getInstanceVariable(Configuration.TWO_JAR); 3336bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3346bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3356bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein // TWO_DEX 3366bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3376bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_init() throws Exception { 3386bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_init(Configuration.TWO_DEX); 3396bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3406bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3416bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_simpleUse() throws Exception { 3426bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_simpleUse(Configuration.TWO_DEX); 3436bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3446bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3456bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_constructor() throws Exception { 3466bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_constructor(Configuration.TWO_DEX); 3476bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3486bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3496bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_callStaticMethod() throws Exception { 3506bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_callStaticMethod(Configuration.TWO_DEX); 3516bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3526bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3536bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_getStaticVariable() throws Exception { 3546bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_getStaticVariable(Configuration.TWO_DEX); 3556bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3566bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3576bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_callInstanceMethod() throws Exception { 3586bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_callInstanceMethod(Configuration.TWO_DEX); 3596bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3606bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3616bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_getInstanceVariable() throws Exception { 3626bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_getInstanceVariable(Configuration.TWO_DEX); 3636bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3646bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3656bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_constructor() throws Exception { 3666bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_constructor(Configuration.TWO_DEX); 3676bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3686bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3696bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_callStaticMethod() throws Exception { 3706bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_callStaticMethod(Configuration.TWO_DEX); 3716bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3726bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3736bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_getStaticVariable() throws Exception { 3746bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_getStaticVariable(Configuration.TWO_DEX); 3756bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3766bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3776bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_callInstanceMethod() 3786bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 3796bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_callInstanceMethod(Configuration.TWO_DEX); 3806bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3816bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3826bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_getInstanceVariable() 3836bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 3846bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_getInstanceVariable(Configuration.TWO_DEX); 3856bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3866bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3871c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein /* 3881c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * Tests specifically for resource-related functionality. Since 3891c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * raw dex files don't contain resources, these test only work 39030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * with jar files. The first couple methods here are helpers, 39130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * and they are followed by the tests per se. 3921c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein */ 3931c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 3941c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein /** 39530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * Check that a given resource (by name) is retrievable and contains 39630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * the given expected contents. 3971c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein */ 39830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_directGetResourceAsStream(Configuration config, 39930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein String resourceName, String expectedContents) 40030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 40130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein DexClassLoader dcl = createInstance(config); 40230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein InputStream in = dcl.getResourceAsStream(resourceName); 4031c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein byte[] contents = Streams.readFully(in); 4041c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein String s = new String(contents, "UTF-8"); 4051c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 40630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein assertEquals(expectedContents, s); 40730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 40830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 40930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** 41030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * Check that a resource in the jar file is retrievable and contains 41130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * the expected contents. 41230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein */ 41330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_directGetResourceAsStream(Configuration config) 41430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 41530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_directGetResourceAsStream( 41630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein config, "test/Resource1.txt", "Muffins are tasty!\n"); 4171c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein } 4181c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 4191c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein /** 4201c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * Check that a resource in the jar file can be retrieved from 4211c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * a class within that jar file. 4221c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein */ 42330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_getResourceAsStream(Configuration config) 42430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 42530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein createInstanceAndCallStaticMethod( 42651d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_getResourceAsStream"); 42730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 42830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4296bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_directGetResourceAsStream() throws Exception { 43030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_directGetResourceAsStream(Configuration.ONE_JAR); 43130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 43230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4336bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_getResourceAsStream() throws Exception { 43430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getResourceAsStream(Configuration.ONE_JAR); 43530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 43630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4376bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_directGetResourceAsStream() throws Exception { 43830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_directGetResourceAsStream(Configuration.TWO_JAR); 43930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 44030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4416bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_getResourceAsStream() throws Exception { 44230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getResourceAsStream(Configuration.TWO_JAR); 44330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 44430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 44530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** 44630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * Check that a resource in the second jar file is retrievable and 44730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * contains the expected contents. 44830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein */ 4496bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_directGetResourceAsStream() 45030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 45130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_directGetResourceAsStream( 45230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein Configuration.TWO_JAR, "test2/Resource2.txt", 45330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein "Who doesn't like a good biscuit?\n"); 45430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 45530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 45630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** 45730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * Check that a resource in a jar file can be retrieved from 45830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * a class within the other jar file. 45930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein */ 4606bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_getResourceAsStream() 46130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 4621c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein createInstanceAndCallStaticMethod( 46351d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein Configuration.TWO_JAR, "test.TestMethods", 46430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein "test_diff_getResourceAsStream"); 4651c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein } 46644401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein} 467