DexClassLoaderTest.java revision 6bfc6b199a14f8eb893426b7d48bcf06a3a32015
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; 2592c92f5f5306c7bed2c34b8382dad32445f5ef85Dan Bornsteinimport java.io.UnsupportedEncodingException; 2644401c99f407517a16f8bf75a942a1461a6feceeDan Bornsteinimport libcore.base.Streams; 2744401c99f407517a16f8bf75a942a1461a6feceeDan Bornsteinimport junit.framework.TestCase; 2844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 2944401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein/** 3044401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * Tests for the class {@link DexClassLoader}. 3144401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein */ 3244401c99f407517a16f8bf75a942a1461a6feceeDan Bornsteinpublic class DexClassLoaderTest extends TestCase { 3330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein private static final File TMP_DIR = 3430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein new File(System.getProperty("java.io.tmpdir"), "loading-test"); 3544401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein private static final String PACKAGE_PATH = "dalvik/system/"; 3644401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein private static final String JAR_NAME = "loading-test.jar"; 378c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein private static final String DEX_NAME = "loading-test.dex"; 3830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein private static final String JAR2_NAME = "loading-test2.jar"; 3930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein private static final String DEX2_NAME = "loading-test2.dex"; 4051d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein private static final File JAR_FILE = new File(TMP_DIR, JAR_NAME); 4151d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein private static final File DEX_FILE = new File(TMP_DIR, DEX_NAME); 4251d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein private static final File JAR2_FILE = new File(TMP_DIR, JAR2_NAME); 4351d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein private static final File DEX2_FILE = new File(TMP_DIR, DEX2_NAME); 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(); 6144401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 6244401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein ClassLoader cl = DexClassLoaderTest.class.getClassLoader(); 6351d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein copyResource(cl, JAR_NAME, JAR_FILE); 6451d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein copyResource(cl, DEX_NAME, DEX_FILE); 6551d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein copyResource(cl, JAR2_NAME, JAR2_FILE); 6651d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein copyResource(cl, DEX2_NAME, DEX2_FILE); 670ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein } 688c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 690ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein /** 700ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein * Copy a resource in the package directory to the indicated file. 710ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein */ 720ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein private static void copyResource(ClassLoader loader, String resourceName, 730ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein File destination) throws IOException { 740ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein InputStream in = 750ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein loader.getResourceAsStream(PACKAGE_PATH + resourceName); 760ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein FileOutputStream out = new FileOutputStream(destination); 7744401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein Streams.copy(in, out); 7844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein in.close(); 7944401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein out.close(); 8044401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein } 8144401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 8244401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein /** 830097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * Helper to construct an instance to test. 848c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * 8530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * @param config how to configure the classpath 860097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein */ 8730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein private static DexClassLoader createInstance(Configuration config) { 8830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein File file1; 8930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein File file2; 9030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 9130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein switch (config) { 9251d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein case ONE_DEX: file1 = DEX_FILE; file2 = null; break; 9351d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein case ONE_JAR: file1 = JAR_FILE; file2 = null; break; 9451d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein case TWO_DEX: file1 = DEX_FILE; file2 = DEX2_FILE; break; 9551d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein case TWO_JAR: file1 = JAR_FILE; file2 = JAR2_FILE; break; 9630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein default: throw new AssertionError("shouldn't happen"); 9730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 9830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 9930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein String path = file1.getAbsolutePath(); 10030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein if (file2 != null) { 10130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein path += File.pathSeparator + file2.getAbsolutePath(); 10230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 10330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 10430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein return new DexClassLoader( 10530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein path, TMP_DIR.getAbsolutePath(), null, 10630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein ClassLoader.getSystemClassLoader()); 1070097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein } 1080097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein 1090097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein /** 1108c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * Helper to construct an instance to test, using the jar file as 1118c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * the source, and call a named no-argument static method on a 1128c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * named class. 1138c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * 11430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * @param config how to configure the classpath 1158c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 11630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static Object createInstanceAndCallStaticMethod( 11730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein Configuration config, String className, String methodName) 1188c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws ClassNotFoundException, NoSuchMethodException, 1198c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein IllegalAccessException, InvocationTargetException { 12030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein DexClassLoader dcl = createInstance(config); 1218c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein Class c = dcl.loadClass(className); 1228c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein Method m = c.getMethod(methodName, (Class[]) null); 1238c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein return m.invoke(null, (Object[]) null); 1248c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1258c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1268c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /* 1278c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * Tests that are parametric with respect to whether to use a jar 1288c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * file or a dex file as the source of the code 1298c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 1308c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1318c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /** 1320097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * Just a trivial test of construction. This one merely makes 1330097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * sure that a valid construction doesn't fail; it doesn't try 1340097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * to verify anything about the constructed instance. (Other 1350097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * tests will do that.) 13644401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein */ 13730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_init(Configuration config) { 13830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein createInstance(config); 1390097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein } 1400097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein 1410097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein /** 1421c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * Check that a class in the jar/dex file may be used successfully. In this 1430097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * case, a trivial static method is called. 1440097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein */ 14530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_simpleUse(Configuration config) throws Exception { 1468c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein String result = (String) 14730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein createInstanceAndCallStaticMethod(config, "test.Test1", "test"); 1480097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein 1490097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein assertSame("blort", result); 15044401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein } 15192c92f5f5306c7bed2c34b8382dad32445f5ef85Dan Bornstein 1528c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /* 1538c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * All the following tests are just pass-throughs to test code 1548c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * that lives inside the loading-test dex/jar file. 1558c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 1568c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1576bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_constructor(Configuration config) 1586bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 1596bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 1606bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_constructor"); 1616bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 1626bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 16330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_callStaticMethod(Configuration config) 1648c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1658c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 16651d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_callStaticMethod"); 1678c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1688c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 16930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_getStaticVariable(Configuration config) 1708c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1718c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 17251d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_getStaticVariable"); 1738c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1748c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 17530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_callInstanceMethod(Configuration config) 1768c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1778c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 17851d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_callInstanceMethod"); 1798c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1808c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 18130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_getInstanceVariable(Configuration config) 1828c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1838c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 18451d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_getInstanceVariable"); 1858c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1868c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1876bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_diff_constructor(Configuration config) 1886bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 1896bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 1906bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_constructor"); 1916bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 1926bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 1936bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_diff_callStaticMethod(Configuration config) 1946bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 1956bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 1966bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_callStaticMethod"); 1976bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 1986bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 1996bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_diff_getStaticVariable(Configuration config) 2006bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 2016bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 2026bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_getStaticVariable"); 2036bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2046bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2056bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_diff_callInstanceMethod(Configuration config) 2066bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 2076bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 2086bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_callInstanceMethod"); 2096bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2106bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2116bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_diff_getInstanceVariable(Configuration config) 2126bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 2136bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 2146bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_getInstanceVariable"); 2156bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2166bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2178c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /* 2181c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * These methods are all essentially just calls to the 2196bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein * parametrically-defined tests above. 2208c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 2218c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2226bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein // ONE_JAR 2236bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2246bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_init() throws Exception { 22530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_init(Configuration.ONE_JAR); 2268c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2278c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2286bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_simpleUse() throws Exception { 22930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_simpleUse(Configuration.ONE_JAR); 2308c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2318c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2326bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_constructor() throws Exception { 2336bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_constructor(Configuration.ONE_JAR); 2346bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2356bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2366bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_callStaticMethod() throws Exception { 23730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_callStaticMethod(Configuration.ONE_JAR); 2388c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2398c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2406bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_getStaticVariable() throws Exception { 24130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getStaticVariable(Configuration.ONE_JAR); 2428c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2438c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2446bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_callInstanceMethod() throws Exception { 24530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_callInstanceMethod(Configuration.ONE_JAR); 2468c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2478c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2486bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_getInstanceVariable() throws Exception { 24930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getInstanceVariable(Configuration.ONE_JAR); 2508c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2518c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2526bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein // ONE_DEX 2536bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2546bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_init() throws Exception { 25530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_init(Configuration.ONE_DEX); 2568c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2578c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2586bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_simpleUse() throws Exception { 25930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_simpleUse(Configuration.ONE_DEX); 2608c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2618c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2626bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_constructor() throws Exception { 2636bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_constructor(Configuration.ONE_DEX); 2646bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2656bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2666bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_callStaticMethod() throws Exception { 26730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_callStaticMethod(Configuration.ONE_DEX); 2688c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2698c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2706bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_getStaticVariable() throws Exception { 27130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getStaticVariable(Configuration.ONE_DEX); 2728c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2738c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2746bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_callInstanceMethod() throws Exception { 27530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_callInstanceMethod(Configuration.ONE_DEX); 2768c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2778c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2786bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_getInstanceVariable() throws Exception { 27930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getInstanceVariable(Configuration.ONE_DEX); 2808c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2811c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 2826bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein // TWO_JAR 2836bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2846bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_init() throws Exception { 2856bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_init(Configuration.TWO_JAR); 2866bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2876bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2886bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_simpleUse() throws Exception { 2896bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_simpleUse(Configuration.TWO_JAR); 2906bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2916bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2926bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_constructor() throws Exception { 2936bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_constructor(Configuration.TWO_JAR); 2946bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2956bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2966bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_callStaticMethod() throws Exception { 2976bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_callStaticMethod(Configuration.TWO_JAR); 2986bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2996bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3006bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_getStaticVariable() throws Exception { 3016bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_getStaticVariable(Configuration.TWO_JAR); 3026bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3036bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3046bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_callInstanceMethod() throws Exception { 3056bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_callInstanceMethod(Configuration.TWO_JAR); 3066bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3076bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3086bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_getInstanceVariable() throws Exception { 3096bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_getInstanceVariable(Configuration.TWO_JAR); 3106bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3116bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3126bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_constructor() throws Exception { 3136bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_constructor(Configuration.TWO_JAR); 3146bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3156bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3166bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_callStaticMethod() throws Exception { 3176bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_callStaticMethod(Configuration.TWO_JAR); 3186bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3196bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3206bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_getStaticVariable() throws Exception { 3216bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_getStaticVariable(Configuration.TWO_JAR); 3226bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3236bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3246bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_callInstanceMethod() 3256bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 3266bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_callInstanceMethod(Configuration.TWO_JAR); 3276bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3286bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3296bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_getInstanceVariable() 3306bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 3316bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_getInstanceVariable(Configuration.TWO_JAR); 3326bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3336bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3346bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein // TWO_DEX 3356bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3366bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_init() throws Exception { 3376bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_init(Configuration.TWO_DEX); 3386bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3396bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3406bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_simpleUse() throws Exception { 3416bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_simpleUse(Configuration.TWO_DEX); 3426bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3436bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3446bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_constructor() throws Exception { 3456bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_constructor(Configuration.TWO_DEX); 3466bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3476bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3486bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_callStaticMethod() throws Exception { 3496bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_callStaticMethod(Configuration.TWO_DEX); 3506bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3516bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3526bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_getStaticVariable() throws Exception { 3536bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_getStaticVariable(Configuration.TWO_DEX); 3546bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3556bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3566bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_callInstanceMethod() throws Exception { 3576bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_callInstanceMethod(Configuration.TWO_DEX); 3586bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3596bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3606bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_getInstanceVariable() throws Exception { 3616bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_getInstanceVariable(Configuration.TWO_DEX); 3626bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3636bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3646bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_constructor() throws Exception { 3656bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_constructor(Configuration.TWO_DEX); 3666bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3676bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3686bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_callStaticMethod() throws Exception { 3696bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_callStaticMethod(Configuration.TWO_DEX); 3706bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3716bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3726bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_getStaticVariable() throws Exception { 3736bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_getStaticVariable(Configuration.TWO_DEX); 3746bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3756bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3766bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_callInstanceMethod() 3776bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 3786bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_callInstanceMethod(Configuration.TWO_DEX); 3796bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3806bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3816bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_getInstanceVariable() 3826bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 3836bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_getInstanceVariable(Configuration.TWO_DEX); 3846bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3856bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3861c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein /* 3871c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * Tests specifically for resource-related functionality. Since 3881c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * raw dex files don't contain resources, these test only work 38930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * with jar files. The first couple methods here are helpers, 39030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * and they are followed by the tests per se. 3911c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein */ 3921c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 3931c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein /** 39430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * Check that a given resource (by name) is retrievable and contains 39530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * the given expected contents. 3961c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein */ 39730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_directGetResourceAsStream(Configuration config, 39830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein String resourceName, String expectedContents) 39930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 40030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein DexClassLoader dcl = createInstance(config); 40130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein InputStream in = dcl.getResourceAsStream(resourceName); 4021c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein byte[] contents = Streams.readFully(in); 4031c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein String s = new String(contents, "UTF-8"); 4041c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 40530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein assertEquals(expectedContents, s); 40630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 40730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 40830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** 40930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * Check that a resource in the jar file is retrievable and contains 41030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * the expected contents. 41130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein */ 41230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_directGetResourceAsStream(Configuration config) 41330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 41430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_directGetResourceAsStream( 41530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein config, "test/Resource1.txt", "Muffins are tasty!\n"); 4161c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein } 4171c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 4181c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein /** 4191c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * Check that a resource in the jar file can be retrieved from 4201c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * a class within that jar file. 4211c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein */ 42230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_getResourceAsStream(Configuration config) 42330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 42430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein createInstanceAndCallStaticMethod( 42551d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_getResourceAsStream"); 42630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 42730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4286bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_directGetResourceAsStream() throws Exception { 42930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_directGetResourceAsStream(Configuration.ONE_JAR); 43030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 43130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4326bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_getResourceAsStream() throws Exception { 43330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getResourceAsStream(Configuration.ONE_JAR); 43430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 43530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4366bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_directGetResourceAsStream() throws Exception { 43730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_directGetResourceAsStream(Configuration.TWO_JAR); 43830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 43930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4406bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_getResourceAsStream() throws Exception { 44130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getResourceAsStream(Configuration.TWO_JAR); 44230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 44330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 44430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** 44530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * Check that a resource in the second jar file is retrievable and 44630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * contains the expected contents. 44730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein */ 4486bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_directGetResourceAsStream() 44930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 45030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_directGetResourceAsStream( 45130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein Configuration.TWO_JAR, "test2/Resource2.txt", 45230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein "Who doesn't like a good biscuit?\n"); 45330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 45430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 45530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** 45630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * Check that a resource in a jar file can be retrieved from 45730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * a class within the other jar file. 45830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein */ 4596bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_getResourceAsStream() 46030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 4611c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein createInstanceAndCallStaticMethod( 46251d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein Configuration.TWO_JAR, "test.TestMethods", 46330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein "test_diff_getResourceAsStream"); 4641c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein } 46544401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein} 466