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 */ 476f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein ONE_DEX(1), 4830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** just one classpath element, a jar file */ 506f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein ONE_JAR(1), 5130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 5230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** two classpath elements, both raw dex files */ 536f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein TWO_DEX(2), 5430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 5530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** two classpath elements, both jar files */ 566f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein TWO_JAR(2); 576f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein 586f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein public final int expectedFiles; 596f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein 606f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein Configuration(int expectedFiles) { 616f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein this.expectedFiles = expectedFiles; 626f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein } 6330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 6444401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 6544401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein protected void setUp() throws IOException { 6644401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein TMP_DIR.mkdirs(); 6744401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 6844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein ClassLoader cl = DexClassLoaderTest.class.getClassLoader(); 6951d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein copyResource(cl, JAR_NAME, JAR_FILE); 7051d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein copyResource(cl, DEX_NAME, DEX_FILE); 7151d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein copyResource(cl, JAR2_NAME, JAR2_FILE); 7251d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein copyResource(cl, DEX2_NAME, DEX2_FILE); 73d8bf30013b7e67f2f5d4b182827c86f8687569cdBrian Carlstrom 74d8bf30013b7e67f2f5d4b182827c86f8687569cdBrian Carlstrom OPTIMIZED_DIR.mkdirs(); 75d8bf30013b7e67f2f5d4b182827c86f8687569cdBrian Carlstrom File[] files = OPTIMIZED_DIR.listFiles(); 76d8bf30013b7e67f2f5d4b182827c86f8687569cdBrian Carlstrom for (File file : files) { 77d8bf30013b7e67f2f5d4b182827c86f8687569cdBrian Carlstrom file.delete(); 78d8bf30013b7e67f2f5d4b182827c86f8687569cdBrian Carlstrom } 790ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein } 808c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 810ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein /** 821a6e00246281eb49b7b48b1b55cf9077e10c1cfeDan Bornstein * Copy a resource in the package directory to the indicated 831a6e00246281eb49b7b48b1b55cf9077e10c1cfeDan Bornstein * target file, but only if the target file doesn't exist. 840ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein */ 850ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein private static void copyResource(ClassLoader loader, String resourceName, 860ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein File destination) throws IOException { 871a6e00246281eb49b7b48b1b55cf9077e10c1cfeDan Bornstein if (destination.exists()) { 881a6e00246281eb49b7b48b1b55cf9077e10c1cfeDan Bornstein return; 891a6e00246281eb49b7b48b1b55cf9077e10c1cfeDan Bornstein } 901a6e00246281eb49b7b48b1b55cf9077e10c1cfeDan Bornstein 910ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein InputStream in = 920ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein loader.getResourceAsStream(PACKAGE_PATH + resourceName); 930ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein FileOutputStream out = new FileOutputStream(destination); 9444401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein Streams.copy(in, out); 9544401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein in.close(); 9644401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein out.close(); 9744401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein } 9844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 9944401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein /** 1000097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * Helper to construct an instance to test. 1018c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * 10230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * @param config how to configure the classpath 1030097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein */ 10430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein private static DexClassLoader createInstance(Configuration config) { 10530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein File file1; 10630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein File file2; 10730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 10830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein switch (config) { 10951d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein case ONE_DEX: file1 = DEX_FILE; file2 = null; break; 11051d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein case ONE_JAR: file1 = JAR_FILE; file2 = null; break; 11151d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein case TWO_DEX: file1 = DEX_FILE; file2 = DEX2_FILE; break; 11251d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein case TWO_JAR: file1 = JAR_FILE; file2 = JAR2_FILE; break; 11330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein default: throw new AssertionError("shouldn't happen"); 11430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 11530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 11630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein String path = file1.getAbsolutePath(); 11730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein if (file2 != null) { 11830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein path += File.pathSeparator + file2.getAbsolutePath(); 11930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 12030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 12130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein return new DexClassLoader( 122ec80ed70b9790785bd70b9482ec94e7dea09fd48Dan Bornstein path, OPTIMIZED_DIR.getAbsolutePath(), null, 12330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein ClassLoader.getSystemClassLoader()); 1240097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein } 1250097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein 1260097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein /** 1278c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * Helper to construct an instance to test, using the jar file as 1288c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * the source, and call a named no-argument static method on a 1298c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * named class. 1308c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * 13130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * @param config how to configure the classpath 1328c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 13330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static Object createInstanceAndCallStaticMethod( 13430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein Configuration config, String className, String methodName) 1358c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws ClassNotFoundException, NoSuchMethodException, 1368c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein IllegalAccessException, InvocationTargetException { 13730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein DexClassLoader dcl = createInstance(config); 1388c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein Class c = dcl.loadClass(className); 1398c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein Method m = c.getMethod(methodName, (Class[]) null); 1408c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein return m.invoke(null, (Object[]) null); 1418c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1428c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1438c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /* 1448c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * Tests that are parametric with respect to whether to use a jar 1458c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * file or a dex file as the source of the code 1468c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 1478c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1488c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /** 1490097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * Just a trivial test of construction. This one merely makes 1506f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein * sure that a valid construction doesn't fail. It doesn't try 1516f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein * to verify anything about the constructed instance, other than 1526f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein * checking for the existence of optimized dex files. 15344401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein */ 1546f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein private static void test_init(Configuration config) { 15530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein createInstance(config); 1566f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein 1576f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein int expectedFiles = config.expectedFiles; 1586f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein int actualFiles = OPTIMIZED_DIR.listFiles().length; 1596f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein 160a186c233345c9cc0c7864dc5bd466c4d8413de6cDan Bornstein assertEquals(expectedFiles, actualFiles); 1610097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein } 1620097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein 1630097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein /** 1641c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * Check that a class in the jar/dex file may be used successfully. In this 1650097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * case, a trivial static method is called. 1660097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein */ 1676f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein private static void test_simpleUse(Configuration config) throws Exception { 1688c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein String result = (String) 16930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein createInstanceAndCallStaticMethod(config, "test.Test1", "test"); 1700097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein 1710097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein assertSame("blort", result); 17244401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein } 17392c92f5f5306c7bed2c34b8382dad32445f5ef85Dan Bornstein 1748c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /* 1758c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * All the following tests are just pass-throughs to test code 1768c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * that lives inside the loading-test dex/jar file. 1778c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 1788c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1796f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein private static void test_constructor(Configuration config) 1806bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 1816bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 1826bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_constructor"); 1836bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 1846bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 1856f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein private static void test_callStaticMethod(Configuration config) 1868c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1878c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 18851d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_callStaticMethod"); 1898c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1908c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1916f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein private static void test_getStaticVariable(Configuration config) 1928c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1938c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 19451d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_getStaticVariable"); 1958c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1968c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1976f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein private static void test_callInstanceMethod(Configuration config) 1988c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1998c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 20051d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_callInstanceMethod"); 2018c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2028c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2036f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein private static void test_getInstanceVariable(Configuration config) 2048c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 2058c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 20651d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_getInstanceVariable"); 2078c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2088c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2096f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein private static void test_diff_constructor(Configuration config) 2106bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 2116bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 2126bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_constructor"); 2136bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2146bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2156f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein private static void test_diff_callStaticMethod(Configuration config) 2166bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 2176bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 2186bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_callStaticMethod"); 2196bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2206bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2216f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein private static void test_diff_getStaticVariable(Configuration config) 2226bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 2236bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 2246bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_getStaticVariable"); 2256bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2266bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2276f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein private static void test_diff_callInstanceMethod(Configuration config) 2286bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 2296bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 2306bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_callInstanceMethod"); 2316bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2326bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2336f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein private static void test_diff_getInstanceVariable(Configuration config) 2346bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 2356bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 2366bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_getInstanceVariable"); 2376bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2386bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2398c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /* 2401c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * These methods are all essentially just calls to the 2416bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein * parametrically-defined tests above. 2428c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 2438c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2446bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein // ONE_JAR 2456bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2466bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_init() throws Exception { 24730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_init(Configuration.ONE_JAR); 2488c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2498c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2506bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_simpleUse() throws Exception { 25130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_simpleUse(Configuration.ONE_JAR); 2528c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2538c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2546bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_constructor() throws Exception { 2556bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_constructor(Configuration.ONE_JAR); 2566bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2576bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2586bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_callStaticMethod() throws Exception { 25930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_callStaticMethod(Configuration.ONE_JAR); 2608c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2618c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2626bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_getStaticVariable() throws Exception { 26330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getStaticVariable(Configuration.ONE_JAR); 2648c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2658c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2666bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_callInstanceMethod() throws Exception { 26730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_callInstanceMethod(Configuration.ONE_JAR); 2688c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2698c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2706bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_getInstanceVariable() throws Exception { 27130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getInstanceVariable(Configuration.ONE_JAR); 2728c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2738c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2746bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein // ONE_DEX 2756bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2766bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_init() throws Exception { 27730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_init(Configuration.ONE_DEX); 2788c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2798c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2806bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_simpleUse() throws Exception { 28130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_simpleUse(Configuration.ONE_DEX); 2828c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2838c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2846bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_constructor() throws Exception { 2856bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_constructor(Configuration.ONE_DEX); 2866bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2876bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2886bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_callStaticMethod() throws Exception { 28930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_callStaticMethod(Configuration.ONE_DEX); 2908c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2918c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2926bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_getStaticVariable() throws Exception { 29330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getStaticVariable(Configuration.ONE_DEX); 2948c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2958c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2966bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_callInstanceMethod() throws Exception { 29730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_callInstanceMethod(Configuration.ONE_DEX); 2988c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2998c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 3006bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_getInstanceVariable() throws Exception { 30130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getInstanceVariable(Configuration.ONE_DEX); 3028c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 3031c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 3046bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein // TWO_JAR 3056bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3066bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_init() throws Exception { 3076bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_init(Configuration.TWO_JAR); 3086bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3096bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3106bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_simpleUse() throws Exception { 3116bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_simpleUse(Configuration.TWO_JAR); 3126bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3136bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3146bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_constructor() throws Exception { 3156bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_constructor(Configuration.TWO_JAR); 3166bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3176bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3186bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_callStaticMethod() throws Exception { 3196bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_callStaticMethod(Configuration.TWO_JAR); 3206bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3216bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3226bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_getStaticVariable() throws Exception { 3236bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_getStaticVariable(Configuration.TWO_JAR); 3246bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3256bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3266bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_callInstanceMethod() throws Exception { 3276bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_callInstanceMethod(Configuration.TWO_JAR); 3286bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3296bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3306bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_getInstanceVariable() throws Exception { 3316bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_getInstanceVariable(Configuration.TWO_JAR); 3326bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3336bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3346bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_constructor() throws Exception { 3356bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_constructor(Configuration.TWO_JAR); 3366bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3376bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3386bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_callStaticMethod() throws Exception { 3396bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_callStaticMethod(Configuration.TWO_JAR); 3406bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3416bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3426bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_getStaticVariable() throws Exception { 3436bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_getStaticVariable(Configuration.TWO_JAR); 3446bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3456bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3466bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_callInstanceMethod() 3476bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 3486bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_callInstanceMethod(Configuration.TWO_JAR); 3496bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3506bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3516bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_getInstanceVariable() 3526bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 3536bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_getInstanceVariable(Configuration.TWO_JAR); 3546bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3556bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3566bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein // TWO_DEX 3576bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3586bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_init() throws Exception { 3596bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_init(Configuration.TWO_DEX); 3606bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3616bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3626bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_simpleUse() throws Exception { 3636bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_simpleUse(Configuration.TWO_DEX); 3646bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3656bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3666bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_constructor() throws Exception { 3676bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_constructor(Configuration.TWO_DEX); 3686bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3696bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3706bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_callStaticMethod() throws Exception { 3716bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_callStaticMethod(Configuration.TWO_DEX); 3726bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3736bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3746bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_getStaticVariable() throws Exception { 3756bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_getStaticVariable(Configuration.TWO_DEX); 3766bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3776bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3786bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_callInstanceMethod() throws Exception { 3796bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_callInstanceMethod(Configuration.TWO_DEX); 3806bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3816bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3826bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_getInstanceVariable() throws Exception { 3836bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_getInstanceVariable(Configuration.TWO_DEX); 3846bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3856bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3866bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_constructor() throws Exception { 3876bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_constructor(Configuration.TWO_DEX); 3886bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3896bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3906bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_callStaticMethod() throws Exception { 3916bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_callStaticMethod(Configuration.TWO_DEX); 3926bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3936bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3946bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_getStaticVariable() throws Exception { 3956bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_getStaticVariable(Configuration.TWO_DEX); 3966bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3976bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3986bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_callInstanceMethod() 3996bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 4006bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_callInstanceMethod(Configuration.TWO_DEX); 4016bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 4026bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 4036bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_getInstanceVariable() 4046bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 4056bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_getInstanceVariable(Configuration.TWO_DEX); 4066bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 4076bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 4081c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein /* 4091c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * Tests specifically for resource-related functionality. Since 4101c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * raw dex files don't contain resources, these test only work 41130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * with jar files. The first couple methods here are helpers, 41230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * and they are followed by the tests per se. 4131c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein */ 4141c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 4151c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein /** 41630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * Check that a given resource (by name) is retrievable and contains 41730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * the given expected contents. 4181c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein */ 4196f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein private static void test_directGetResourceAsStream(Configuration config, 42030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein String resourceName, String expectedContents) 42130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 42230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein DexClassLoader dcl = createInstance(config); 42330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein InputStream in = dcl.getResourceAsStream(resourceName); 4241c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein byte[] contents = Streams.readFully(in); 4251c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein String s = new String(contents, "UTF-8"); 4261c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 42730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein assertEquals(expectedContents, s); 42830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 42930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 43030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** 43130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * Check that a resource in the jar file is retrievable and contains 43230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * the expected contents. 43330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein */ 4346f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein private static void test_directGetResourceAsStream(Configuration config) 43530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 43630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_directGetResourceAsStream( 43730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein config, "test/Resource1.txt", "Muffins are tasty!\n"); 4381c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein } 4391c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 4401c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein /** 4411c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * Check that a resource in the jar file can be retrieved from 4421c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * a class within that jar file. 4431c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein */ 4446f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein private static void test_getResourceAsStream(Configuration config) 44530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 44630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein createInstanceAndCallStaticMethod( 44751d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_getResourceAsStream"); 44830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 44930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4506bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_directGetResourceAsStream() throws Exception { 45130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_directGetResourceAsStream(Configuration.ONE_JAR); 45230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 45330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4546bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_getResourceAsStream() throws Exception { 45530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getResourceAsStream(Configuration.ONE_JAR); 45630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 45730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4586bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_directGetResourceAsStream() throws Exception { 45930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_directGetResourceAsStream(Configuration.TWO_JAR); 46030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 46130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4626bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_getResourceAsStream() throws Exception { 46330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getResourceAsStream(Configuration.TWO_JAR); 46430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 46530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 46630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** 46730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * Check that a resource in the second jar file is retrievable and 46830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * contains the expected contents. 46930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein */ 4706f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein public void test_twoJar_diff_directGetResourceAsStream() 47130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 47230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_directGetResourceAsStream( 47330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein Configuration.TWO_JAR, "test2/Resource2.txt", 47430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein "Who doesn't like a good biscuit?\n"); 47530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 47630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 47730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** 47830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * Check that a resource in a jar file can be retrieved from 47930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * a class within the other jar file. 48030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein */ 4816f42688fdc1389ed10d611c51aabc6034174db5aDan Bornstein public void test_twoJar_diff_getResourceAsStream() 48230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 4831c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein createInstanceAndCallStaticMethod( 48451d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein Configuration.TWO_JAR, "test.TestMethods", 48530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein "test_diff_getResourceAsStream"); 4861c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein } 48744401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein} 488