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