DexClassLoaderTest.java revision 6186821cb13f4ac7ff50950c813394367e021eae
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); 4330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein private static enum Configuration { 4530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** just one classpath element, a raw dex file */ 4630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein ONE_DEX, 4730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** just one classpath element, a jar file */ 4930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein ONE_JAR, 5030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 5130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** two classpath elements, both raw dex files */ 5230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein TWO_DEX, 5330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 5430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** two classpath elements, both jar files */ 5530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein TWO_JAR; 5630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 5744401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 5844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein protected void setUp() throws IOException { 5944401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein TMP_DIR.mkdirs(); 6044401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 6144401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein ClassLoader cl = DexClassLoaderTest.class.getClassLoader(); 6251d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein copyResource(cl, JAR_NAME, JAR_FILE); 6351d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein copyResource(cl, DEX_NAME, DEX_FILE); 6451d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein copyResource(cl, JAR2_NAME, JAR2_FILE); 6551d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein copyResource(cl, DEX2_NAME, DEX2_FILE); 660ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein } 678c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 680ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein /** 690ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein * Copy a resource in the package directory to the indicated file. 700ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein */ 710ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein private static void copyResource(ClassLoader loader, String resourceName, 720ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein File destination) throws IOException { 730ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein InputStream in = 740ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein loader.getResourceAsStream(PACKAGE_PATH + resourceName); 750ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein FileOutputStream out = new FileOutputStream(destination); 7644401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein Streams.copy(in, out); 7744401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein in.close(); 7844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein out.close(); 7944401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein } 8044401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 8144401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein /** 820097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * Helper to construct an instance to test. 838c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * 8430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * @param config how to configure the classpath 850097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein */ 8630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein private static DexClassLoader createInstance(Configuration config) { 8730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein File file1; 8830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein File file2; 8930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 9030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein switch (config) { 9151d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein case ONE_DEX: file1 = DEX_FILE; file2 = null; break; 9251d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein case ONE_JAR: file1 = JAR_FILE; file2 = null; break; 9351d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein case TWO_DEX: file1 = DEX_FILE; file2 = DEX2_FILE; break; 9451d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein case TWO_JAR: file1 = JAR_FILE; file2 = JAR2_FILE; break; 9530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein default: throw new AssertionError("shouldn't happen"); 9630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 9730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 9830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein String path = file1.getAbsolutePath(); 9930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein if (file2 != null) { 10030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein path += File.pathSeparator + file2.getAbsolutePath(); 10130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 10230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 10330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein return new DexClassLoader( 10430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein path, TMP_DIR.getAbsolutePath(), null, 10530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein ClassLoader.getSystemClassLoader()); 1060097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein } 1070097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein 1080097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein /** 1098c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * Helper to construct an instance to test, using the jar file as 1108c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * the source, and call a named no-argument static method on a 1118c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * named class. 1128c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * 11330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * @param config how to configure the classpath 1148c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 11530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static Object createInstanceAndCallStaticMethod( 11630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein Configuration config, String className, String methodName) 1178c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws ClassNotFoundException, NoSuchMethodException, 1188c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein IllegalAccessException, InvocationTargetException { 11930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein DexClassLoader dcl = createInstance(config); 1208c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein Class c = dcl.loadClass(className); 1218c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein Method m = c.getMethod(methodName, (Class[]) null); 1228c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein return m.invoke(null, (Object[]) null); 1238c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1248c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1258c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /* 1268c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * Tests that are parametric with respect to whether to use a jar 1278c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * file or a dex file as the source of the code 1288c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 1298c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1308c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /** 1310097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * Just a trivial test of construction. This one merely makes 1320097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * sure that a valid construction doesn't fail; it doesn't try 1330097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * to verify anything about the constructed instance. (Other 1340097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * tests will do that.) 13544401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein */ 13630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_init(Configuration config) { 13730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein createInstance(config); 1380097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein } 1390097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein 1400097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein /** 1411c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * Check that a class in the jar/dex file may be used successfully. In this 1420097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * case, a trivial static method is called. 1430097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein */ 14430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_simpleUse(Configuration config) throws Exception { 1458c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein String result = (String) 14630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein createInstanceAndCallStaticMethod(config, "test.Test1", "test"); 1470097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein 1480097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein assertSame("blort", result); 14944401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein } 15092c92f5f5306c7bed2c34b8382dad32445f5ef85Dan Bornstein 1518c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /* 1528c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * All the following tests are just pass-throughs to test code 1538c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * that lives inside the loading-test dex/jar file. 1548c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 1558c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1566bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_constructor(Configuration config) 1576bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 1586bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 1596bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_constructor"); 1606bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 1616bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 16230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_callStaticMethod(Configuration config) 1638c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1648c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 16551d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_callStaticMethod"); 1668c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1678c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 16830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_getStaticVariable(Configuration config) 1698c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1708c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 17151d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_getStaticVariable"); 1728c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1738c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 17430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_callInstanceMethod(Configuration config) 1758c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1768c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 17751d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_callInstanceMethod"); 1788c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1798c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 18030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_getInstanceVariable(Configuration config) 1818c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1828c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 18351d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_getInstanceVariable"); 1848c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1858c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1866bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_diff_constructor(Configuration config) 1876bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 1886bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 1896bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_constructor"); 1906bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 1916bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 1926bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_diff_callStaticMethod(Configuration config) 1936bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 1946bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 1956bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_callStaticMethod"); 1966bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 1976bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 1986bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_diff_getStaticVariable(Configuration config) 1996bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 2006bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 2016bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_getStaticVariable"); 2026bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2036bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2046bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_diff_callInstanceMethod(Configuration config) 2056bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 2066bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 2076bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_callInstanceMethod"); 2086bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2096bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2106bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_diff_getInstanceVariable(Configuration config) 2116bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 2126bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein createInstanceAndCallStaticMethod( 2136bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein config, "test.TestMethods", "test_diff_getInstanceVariable"); 2146bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2156bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2168c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /* 2171c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * These methods are all essentially just calls to the 2186bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein * parametrically-defined tests above. 2198c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 2208c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2216bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein // ONE_JAR 2226bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2236bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_init() throws Exception { 22430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_init(Configuration.ONE_JAR); 2258c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2268c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2276bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_simpleUse() throws Exception { 22830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_simpleUse(Configuration.ONE_JAR); 2298c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2308c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2316bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_constructor() throws Exception { 2326bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_constructor(Configuration.ONE_JAR); 2336bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2346bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2356bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_callStaticMethod() throws Exception { 23630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_callStaticMethod(Configuration.ONE_JAR); 2378c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2388c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2396bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_getStaticVariable() throws Exception { 24030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getStaticVariable(Configuration.ONE_JAR); 2418c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2428c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2436bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_callInstanceMethod() throws Exception { 24430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_callInstanceMethod(Configuration.ONE_JAR); 2458c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2468c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2476bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_getInstanceVariable() throws Exception { 24830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getInstanceVariable(Configuration.ONE_JAR); 2498c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2508c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2516bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein // ONE_DEX 2526bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2536bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_init() throws Exception { 25430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_init(Configuration.ONE_DEX); 2558c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2568c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2576bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_simpleUse() throws Exception { 25830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_simpleUse(Configuration.ONE_DEX); 2598c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2608c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2616bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_constructor() throws Exception { 2626bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_constructor(Configuration.ONE_DEX); 2636bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2646bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2656bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_callStaticMethod() throws Exception { 26630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_callStaticMethod(Configuration.ONE_DEX); 2678c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2688c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2696bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_getStaticVariable() throws Exception { 27030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getStaticVariable(Configuration.ONE_DEX); 2718c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2728c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2736bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_callInstanceMethod() throws Exception { 27430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_callInstanceMethod(Configuration.ONE_DEX); 2758c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2768c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 2776bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneDex_getInstanceVariable() throws Exception { 27830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getInstanceVariable(Configuration.ONE_DEX); 2798c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 2801c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 2816bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein // TWO_JAR 2826bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2836bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_init() throws Exception { 2846bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_init(Configuration.TWO_JAR); 2856bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2866bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2876bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_simpleUse() throws Exception { 2886bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_simpleUse(Configuration.TWO_JAR); 2896bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2906bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2916bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_constructor() throws Exception { 2926bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_constructor(Configuration.TWO_JAR); 2936bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2946bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2956bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_callStaticMethod() throws Exception { 2966bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_callStaticMethod(Configuration.TWO_JAR); 2976bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 2986bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 2996bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_getStaticVariable() throws Exception { 3006bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_getStaticVariable(Configuration.TWO_JAR); 3016bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3026bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3036bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_callInstanceMethod() throws Exception { 3046bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_callInstanceMethod(Configuration.TWO_JAR); 3056bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3066bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3076bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_getInstanceVariable() throws Exception { 3086bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_getInstanceVariable(Configuration.TWO_JAR); 3096bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3106bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3116bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_constructor() throws Exception { 3126bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_constructor(Configuration.TWO_JAR); 3136bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3146bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3156bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_callStaticMethod() throws Exception { 3166bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_callStaticMethod(Configuration.TWO_JAR); 3176bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3186bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3196bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_getStaticVariable() throws Exception { 3206bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_getStaticVariable(Configuration.TWO_JAR); 3216bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3226bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3236bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_callInstanceMethod() 3246bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 3256bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_callInstanceMethod(Configuration.TWO_JAR); 3266bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3276bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3286bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_getInstanceVariable() 3296bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 3306bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_getInstanceVariable(Configuration.TWO_JAR); 3316bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3326bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3336bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein // TWO_DEX 3346bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3356bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_init() throws Exception { 3366bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_init(Configuration.TWO_DEX); 3376bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3386bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3396bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_simpleUse() throws Exception { 3406bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_simpleUse(Configuration.TWO_DEX); 3416bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3426bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3436bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_constructor() throws Exception { 3446bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_constructor(Configuration.TWO_DEX); 3456bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3466bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3476bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_callStaticMethod() throws Exception { 3486bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_callStaticMethod(Configuration.TWO_DEX); 3496bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3506bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3516bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_getStaticVariable() throws Exception { 3526bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_getStaticVariable(Configuration.TWO_DEX); 3536bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3546bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3556bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_callInstanceMethod() throws Exception { 3566bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_callInstanceMethod(Configuration.TWO_DEX); 3576bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3586bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3596bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoDex_getInstanceVariable() throws Exception { 3606bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_getInstanceVariable(Configuration.TWO_DEX); 3616bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3626bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3636bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_constructor() throws Exception { 3646bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_constructor(Configuration.TWO_DEX); 3656bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3666bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3676bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_callStaticMethod() throws Exception { 3686bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_callStaticMethod(Configuration.TWO_DEX); 3696bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3706bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3716bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_getStaticVariable() throws Exception { 3726bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_getStaticVariable(Configuration.TWO_DEX); 3736bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3746bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3756bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_callInstanceMethod() 3766bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 3776bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_callInstanceMethod(Configuration.TWO_DEX); 3786bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3796bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3806bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoDex_diff_getInstanceVariable() 3816bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein throws Exception { 3826bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein test_diff_getInstanceVariable(Configuration.TWO_DEX); 3836bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein } 3846bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein 3851c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein /* 3861c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * Tests specifically for resource-related functionality. Since 3871c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * raw dex files don't contain resources, these test only work 38830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * with jar files. The first couple methods here are helpers, 38930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * and they are followed by the tests per se. 3901c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein */ 3911c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 3921c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein /** 39330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * Check that a given resource (by name) is retrievable and contains 39430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * the given expected contents. 3951c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein */ 39630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_directGetResourceAsStream(Configuration config, 39730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein String resourceName, String expectedContents) 39830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 39930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein DexClassLoader dcl = createInstance(config); 40030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein InputStream in = dcl.getResourceAsStream(resourceName); 4011c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein byte[] contents = Streams.readFully(in); 4021c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein String s = new String(contents, "UTF-8"); 4031c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 40430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein assertEquals(expectedContents, s); 40530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 40630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 40730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** 40830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * Check that a resource in the jar file is retrievable and contains 40930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * the expected contents. 41030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein */ 41130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_directGetResourceAsStream(Configuration config) 41230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 41330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_directGetResourceAsStream( 41430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein config, "test/Resource1.txt", "Muffins are tasty!\n"); 4151c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein } 4161c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 4171c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein /** 4181c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * Check that a resource in the jar file can be retrieved from 4191c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * a class within that jar file. 4201c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein */ 42130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein public static void test_getResourceAsStream(Configuration config) 42230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 42330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein createInstanceAndCallStaticMethod( 42451d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein config, "test.TestMethods", "test_getResourceAsStream"); 42530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 42630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4276bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_directGetResourceAsStream() throws Exception { 42830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_directGetResourceAsStream(Configuration.ONE_JAR); 42930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 43030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4316bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_oneJar_getResourceAsStream() throws Exception { 43230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getResourceAsStream(Configuration.ONE_JAR); 43330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 43430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4356bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_directGetResourceAsStream() throws Exception { 43630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_directGetResourceAsStream(Configuration.TWO_JAR); 43730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 43830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 4396bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public void test_twoJar_getResourceAsStream() throws Exception { 44030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_getResourceAsStream(Configuration.TWO_JAR); 44130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 44230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 44330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** 44430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * Check that a resource in the second jar file is retrievable and 44530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * contains the expected contents. 44630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein */ 4476bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_directGetResourceAsStream() 44830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 44930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein test_directGetResourceAsStream( 45030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein Configuration.TWO_JAR, "test2/Resource2.txt", 45130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein "Who doesn't like a good biscuit?\n"); 45230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein } 45330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein 45430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein /** 45530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * Check that a resource in a jar file can be retrieved from 45630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein * a class within the other jar file. 45730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein */ 4586bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein public static void test_twoJar_diff_getResourceAsStream() 45930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein throws Exception { 4601c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein createInstanceAndCallStaticMethod( 46151d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein Configuration.TWO_JAR, "test.TestMethods", 46230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein "test_diff_getResourceAsStream"); 4631c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein } 46444401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein} 465