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