DexClassLoaderTest.java revision ec80ed70b9790785bd70b9482ec94e7dea09fd48
144401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein/*
244401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * Copyright (C) 2011 The Android Open Source Project
344401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein *
444401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * Licensed under the Apache License, Version 2.0 (the "License");
544401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * you may not use this file except in compliance with the License.
644401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * You may obtain a copy of the License at
744401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein *
844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein *      http://www.apache.org/licenses/LICENSE-2.0
944401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein *
1044401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * Unless required by applicable law or agreed to in writing, software
1144401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * distributed under the License is distributed on an "AS IS" BASIS,
1244401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1344401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * See the License for the specific language governing permissions and
1444401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * limitations under the License.
1544401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein */
1644401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein
1744401c99f407517a16f8bf75a942a1461a6feceeDan Bornsteinpackage dalvik.system;
1844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein
190097708dae398465c3da40cc7f9a2dfde5571364Dan Bornsteinimport java.lang.reflect.InvocationTargetException;
200097708dae398465c3da40cc7f9a2dfde5571364Dan Bornsteinimport java.lang.reflect.Method;
2144401c99f407517a16f8bf75a942a1461a6feceeDan Bornsteinimport java.io.File;
2244401c99f407517a16f8bf75a942a1461a6feceeDan Bornsteinimport java.io.FileOutputStream;
2344401c99f407517a16f8bf75a942a1461a6feceeDan Bornsteinimport java.io.IOException;
2444401c99f407517a16f8bf75a942a1461a6feceeDan Bornsteinimport java.io.InputStream;
256186821cb13f4ac7ff50950c813394367e021eaeJesse Wilsonimport libcore.io.Streams;
2644401c99f407517a16f8bf75a942a1461a6feceeDan Bornsteinimport junit.framework.TestCase;
2744401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein
2844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein/**
2944401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein * Tests for the class {@link DexClassLoader}.
3044401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein */
3144401c99f407517a16f8bf75a942a1461a6feceeDan Bornsteinpublic class DexClassLoaderTest extends TestCase {
3230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    private static final File TMP_DIR =
3330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        new File(System.getProperty("java.io.tmpdir"), "loading-test");
3444401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein    private static final String PACKAGE_PATH = "dalvik/system/";
3544401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein    private static final String JAR_NAME = "loading-test.jar";
368c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    private static final String DEX_NAME = "loading-test.dex";
3730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    private static final String JAR2_NAME = "loading-test2.jar";
3830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    private static final String DEX2_NAME = "loading-test2.dex";
3951d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein    private static final File JAR_FILE = new File(TMP_DIR, JAR_NAME);
4051d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein    private static final File DEX_FILE = new File(TMP_DIR, DEX_NAME);
4151d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein    private static final File JAR2_FILE = new File(TMP_DIR, JAR2_NAME);
4251d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein    private static final File DEX2_FILE = new File(TMP_DIR, DEX2_NAME);
43ec80ed70b9790785bd70b9482ec94e7dea09fd48Dan Bornstein    private static final File OPTIMIZED_DIR = new File(TMP_DIR, "optimized");
4430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein
4530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    private static enum Configuration {
4630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        /** just one classpath element, a raw dex file */
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();
61ec80ed70b9790785bd70b9482ec94e7dea09fd48Dan Bornstein        OPTIMIZED_DIR.mkdirs();
6244401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein
6344401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein        ClassLoader cl = DexClassLoaderTest.class.getClassLoader();
6451d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein        copyResource(cl, JAR_NAME, JAR_FILE);
6551d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein        copyResource(cl, DEX_NAME, DEX_FILE);
6651d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein        copyResource(cl, JAR2_NAME, JAR2_FILE);
6751d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein        copyResource(cl, DEX2_NAME, DEX2_FILE);
680ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein    }
698c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
700ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein    /**
710ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein     * Copy a resource in the package directory to the indicated file.
720ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein     */
730ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein    private static void copyResource(ClassLoader loader, String resourceName,
740ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein            File destination) throws IOException {
750ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein        InputStream in =
760ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein            loader.getResourceAsStream(PACKAGE_PATH + resourceName);
770ec98177a2b2ea242a9ca9e0fb5aee39bba0c007Dan Bornstein        FileOutputStream out = new FileOutputStream(destination);
7844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein        Streams.copy(in, out);
7944401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein        in.close();
8044401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein        out.close();
8144401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein    }
8244401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein
8344401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein    /**
840097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein     * Helper to construct an instance to test.
858c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein     *
8630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein     * @param config how to configure the classpath
870097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein     */
8830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    private static DexClassLoader createInstance(Configuration config) {
8930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        File file1;
9030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        File file2;
9130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein
9230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        switch (config) {
9351d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein            case ONE_DEX: file1 = DEX_FILE; file2 = null;      break;
9451d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein            case ONE_JAR: file1 = JAR_FILE; file2 = null;      break;
9551d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein            case TWO_DEX: file1 = DEX_FILE; file2 = DEX2_FILE; break;
9651d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein            case TWO_JAR: file1 = JAR_FILE; file2 = JAR2_FILE; break;
9730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein            default: throw new AssertionError("shouldn't happen");
9830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        }
9930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein
10030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        String path = file1.getAbsolutePath();
10130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        if (file2 != null) {
10230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein            path += File.pathSeparator + file2.getAbsolutePath();
10330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        }
10430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein
10530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        return new DexClassLoader(
106ec80ed70b9790785bd70b9482ec94e7dea09fd48Dan Bornstein            path, OPTIMIZED_DIR.getAbsolutePath(), null,
10730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein            ClassLoader.getSystemClassLoader());
1080097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein    }
1090097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein
1100097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein    /**
1118c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein     * Helper to construct an instance to test, using the jar file as
1128c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein     * the source, and call a named no-argument static method on a
1138c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein     * named class.
1148c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein     *
11530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein     * @param config how to configure the classpath
1168c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein     */
11730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    public static Object createInstanceAndCallStaticMethod(
11830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein            Configuration config, String className, String methodName)
1198c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein            throws ClassNotFoundException, NoSuchMethodException,
1208c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein            IllegalAccessException, InvocationTargetException {
12130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        DexClassLoader dcl = createInstance(config);
1228c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein        Class c = dcl.loadClass(className);
1238c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein        Method m = c.getMethod(methodName, (Class[]) null);
1248c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein        return m.invoke(null, (Object[]) null);
1258c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    }
1268c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
1278c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    /*
1288c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein     * Tests that are parametric with respect to whether to use a jar
1298c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein     * file or a dex file as the source of the code
1308c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein     */
1318c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
1328c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    /**
1330097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein     * Just a trivial test of construction. This one merely makes
1340097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein     * sure that a valid construction doesn't fail; it doesn't try
1350097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein     * to verify anything about the constructed instance. (Other
1360097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein     * tests will do that.)
13744401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein     */
13830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    public static void test_init(Configuration config) {
13930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        createInstance(config);
1400097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein    }
1410097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein
1420097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein    /**
1431c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein     * Check that a class in the jar/dex file may be used successfully. In this
1440097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein     * case, a trivial static method is called.
1450097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein     */
14630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    public static void test_simpleUse(Configuration config) throws Exception {
1478c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein        String result = (String)
14830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein            createInstanceAndCallStaticMethod(config, "test.Test1", "test");
1490097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein
1500097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein        assertSame("blort", result);
15144401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein    }
15292c92f5f5306c7bed2c34b8382dad32445f5ef85Dan Bornstein
1538c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    /*
1548c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein     * All the following tests are just pass-throughs to test code
1558c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein     * that lives inside the loading-test dex/jar file.
1568c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein     */
1578c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
1586bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public static void test_constructor(Configuration config)
1596bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein            throws Exception {
1606bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        createInstanceAndCallStaticMethod(
1616bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein            config, "test.TestMethods", "test_constructor");
1626bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
1636bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
16430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    public static void test_callStaticMethod(Configuration config)
1658c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein            throws Exception {
1668c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein        createInstanceAndCallStaticMethod(
16751d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein            config, "test.TestMethods", "test_callStaticMethod");
1688c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    }
1698c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
17030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    public static void test_getStaticVariable(Configuration config)
1718c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein            throws Exception {
1728c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein        createInstanceAndCallStaticMethod(
17351d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein            config, "test.TestMethods", "test_getStaticVariable");
1748c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    }
1758c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
17630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    public static void test_callInstanceMethod(Configuration config)
1778c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein            throws Exception {
1788c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein        createInstanceAndCallStaticMethod(
17951d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein            config, "test.TestMethods", "test_callInstanceMethod");
1808c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    }
1818c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
18230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    public static void test_getInstanceVariable(Configuration config)
1838c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein            throws Exception {
1848c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein        createInstanceAndCallStaticMethod(
18551d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein            config, "test.TestMethods", "test_getInstanceVariable");
1868c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    }
1878c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
1886bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public static void test_diff_constructor(Configuration config)
1896bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein            throws Exception {
1906bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        createInstanceAndCallStaticMethod(
1916bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein            config, "test.TestMethods", "test_diff_constructor");
1926bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
1936bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
1946bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public static void test_diff_callStaticMethod(Configuration config)
1956bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein            throws Exception {
1966bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        createInstanceAndCallStaticMethod(
1976bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein            config, "test.TestMethods", "test_diff_callStaticMethod");
1986bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
1996bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
2006bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public static void test_diff_getStaticVariable(Configuration config)
2016bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein            throws Exception {
2026bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        createInstanceAndCallStaticMethod(
2036bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein            config, "test.TestMethods", "test_diff_getStaticVariable");
2046bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
2056bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
2066bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public static void test_diff_callInstanceMethod(Configuration config)
2076bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein            throws Exception {
2086bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        createInstanceAndCallStaticMethod(
2096bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein            config, "test.TestMethods", "test_diff_callInstanceMethod");
2106bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
2116bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
2126bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public static void test_diff_getInstanceVariable(Configuration config)
2136bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein            throws Exception {
2146bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        createInstanceAndCallStaticMethod(
2156bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein            config, "test.TestMethods", "test_diff_getInstanceVariable");
2166bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
2176bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
2188c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    /*
2191c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein     * These methods are all essentially just calls to the
2206bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein     * parametrically-defined tests above.
2218c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein     */
2228c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
2236bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    // ONE_JAR
2246bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
2256bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_oneJar_init() throws Exception {
22630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        test_init(Configuration.ONE_JAR);
2278c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    }
2288c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
2296bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_oneJar_simpleUse() throws Exception {
23030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        test_simpleUse(Configuration.ONE_JAR);
2318c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    }
2328c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
2336bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_oneJar_constructor() throws Exception {
2346bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_constructor(Configuration.ONE_JAR);
2356bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
2366bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
2376bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_oneJar_callStaticMethod() throws Exception {
23830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        test_callStaticMethod(Configuration.ONE_JAR);
2398c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    }
2408c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
2416bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_oneJar_getStaticVariable() throws Exception {
24230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        test_getStaticVariable(Configuration.ONE_JAR);
2438c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    }
2448c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
2456bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_oneJar_callInstanceMethod() throws Exception {
24630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        test_callInstanceMethod(Configuration.ONE_JAR);
2478c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    }
2488c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
2496bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_oneJar_getInstanceVariable() throws Exception {
25030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        test_getInstanceVariable(Configuration.ONE_JAR);
2518c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    }
2528c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
2536bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    // ONE_DEX
2546bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
2556bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_oneDex_init() throws Exception {
25630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        test_init(Configuration.ONE_DEX);
2578c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    }
2588c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
2596bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_oneDex_simpleUse() throws Exception {
26030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        test_simpleUse(Configuration.ONE_DEX);
2618c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    }
2628c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
2636bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_oneDex_constructor() throws Exception {
2646bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_constructor(Configuration.ONE_DEX);
2656bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
2666bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
2676bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_oneDex_callStaticMethod() throws Exception {
26830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        test_callStaticMethod(Configuration.ONE_DEX);
2698c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    }
2708c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
2716bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_oneDex_getStaticVariable() throws Exception {
27230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        test_getStaticVariable(Configuration.ONE_DEX);
2738c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    }
2748c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
2756bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_oneDex_callInstanceMethod() throws Exception {
27630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        test_callInstanceMethod(Configuration.ONE_DEX);
2778c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    }
2788c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein
2796bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_oneDex_getInstanceVariable() throws Exception {
28030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        test_getInstanceVariable(Configuration.ONE_DEX);
2818c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein    }
2821c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein
2836bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    // TWO_JAR
2846bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
2856bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_twoJar_init() throws Exception {
2866bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_init(Configuration.TWO_JAR);
2876bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
2886bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
2896bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_twoJar_simpleUse() throws Exception {
2906bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_simpleUse(Configuration.TWO_JAR);
2916bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
2926bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
2936bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_twoJar_constructor() throws Exception {
2946bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_constructor(Configuration.TWO_JAR);
2956bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
2966bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
2976bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_twoJar_callStaticMethod() throws Exception {
2986bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_callStaticMethod(Configuration.TWO_JAR);
2996bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3006bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3016bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_twoJar_getStaticVariable() throws Exception {
3026bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_getStaticVariable(Configuration.TWO_JAR);
3036bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3046bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3056bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_twoJar_callInstanceMethod() throws Exception {
3066bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_callInstanceMethod(Configuration.TWO_JAR);
3076bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3086bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3096bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_twoJar_getInstanceVariable() throws Exception {
3106bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_getInstanceVariable(Configuration.TWO_JAR);
3116bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3126bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3136bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public static void test_twoJar_diff_constructor() throws Exception {
3146bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_diff_constructor(Configuration.TWO_JAR);
3156bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3166bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3176bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public static void test_twoJar_diff_callStaticMethod() throws Exception {
3186bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_diff_callStaticMethod(Configuration.TWO_JAR);
3196bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3206bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3216bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public static void test_twoJar_diff_getStaticVariable() throws Exception {
3226bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_diff_getStaticVariable(Configuration.TWO_JAR);
3236bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3246bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3256bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public static void test_twoJar_diff_callInstanceMethod()
3266bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein            throws Exception {
3276bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_diff_callInstanceMethod(Configuration.TWO_JAR);
3286bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3296bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3306bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public static void test_twoJar_diff_getInstanceVariable()
3316bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein            throws Exception {
3326bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_diff_getInstanceVariable(Configuration.TWO_JAR);
3336bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3346bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3356bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    // TWO_DEX
3366bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3376bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_twoDex_init() throws Exception {
3386bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_init(Configuration.TWO_DEX);
3396bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3406bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3416bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_twoDex_simpleUse() throws Exception {
3426bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_simpleUse(Configuration.TWO_DEX);
3436bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3446bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3456bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_twoDex_constructor() throws Exception {
3466bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_constructor(Configuration.TWO_DEX);
3476bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3486bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3496bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_twoDex_callStaticMethod() throws Exception {
3506bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_callStaticMethod(Configuration.TWO_DEX);
3516bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3526bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3536bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_twoDex_getStaticVariable() throws Exception {
3546bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_getStaticVariable(Configuration.TWO_DEX);
3556bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3566bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3576bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_twoDex_callInstanceMethod() throws Exception {
3586bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_callInstanceMethod(Configuration.TWO_DEX);
3596bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3606bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3616bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_twoDex_getInstanceVariable() throws Exception {
3626bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_getInstanceVariable(Configuration.TWO_DEX);
3636bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3646bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3656bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public static void test_twoDex_diff_constructor() throws Exception {
3666bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_diff_constructor(Configuration.TWO_DEX);
3676bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3686bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3696bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public static void test_twoDex_diff_callStaticMethod() throws Exception {
3706bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_diff_callStaticMethod(Configuration.TWO_DEX);
3716bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3726bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3736bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public static void test_twoDex_diff_getStaticVariable() throws Exception {
3746bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_diff_getStaticVariable(Configuration.TWO_DEX);
3756bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3766bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3776bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public static void test_twoDex_diff_callInstanceMethod()
3786bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein            throws Exception {
3796bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_diff_callInstanceMethod(Configuration.TWO_DEX);
3806bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3816bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3826bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public static void test_twoDex_diff_getInstanceVariable()
3836bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein            throws Exception {
3846bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein        test_diff_getInstanceVariable(Configuration.TWO_DEX);
3856bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    }
3866bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein
3871c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein    /*
3881c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein     * Tests specifically for resource-related functionality.  Since
3891c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein     * raw dex files don't contain resources, these test only work
39030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein     * with jar files. The first couple methods here are helpers,
39130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein     * and they are followed by the tests per se.
3921c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein     */
3931c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein
3941c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein    /**
39530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein     * Check that a given resource (by name) is retrievable and contains
39630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein     * the given expected contents.
3971c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein     */
39830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    public static void test_directGetResourceAsStream(Configuration config,
39930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein            String resourceName, String expectedContents)
40030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein            throws Exception {
40130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        DexClassLoader dcl = createInstance(config);
40230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        InputStream in = dcl.getResourceAsStream(resourceName);
4031c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein        byte[] contents = Streams.readFully(in);
4041c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein        String s = new String(contents, "UTF-8");
4051c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein
40630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        assertEquals(expectedContents, s);
40730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    }
40830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein
40930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    /**
41030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein     * Check that a resource in the jar file is retrievable and contains
41130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein     * the expected contents.
41230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein     */
41330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    public static void test_directGetResourceAsStream(Configuration config)
41430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein            throws Exception {
41530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        test_directGetResourceAsStream(
41630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein            config, "test/Resource1.txt", "Muffins are tasty!\n");
4171c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein    }
4181c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein
4191c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein    /**
4201c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein     * Check that a resource in the jar file can be retrieved from
4211c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein     * a class within that jar file.
4221c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein     */
42330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    public static void test_getResourceAsStream(Configuration config)
42430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein            throws Exception {
42530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        createInstanceAndCallStaticMethod(
42651d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein            config, "test.TestMethods", "test_getResourceAsStream");
42730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    }
42830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein
4296bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_oneJar_directGetResourceAsStream() throws Exception {
43030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        test_directGetResourceAsStream(Configuration.ONE_JAR);
43130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    }
43230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein
4336bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_oneJar_getResourceAsStream() throws Exception {
43430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        test_getResourceAsStream(Configuration.ONE_JAR);
43530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    }
43630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein
4376bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_twoJar_directGetResourceAsStream() throws Exception {
43830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        test_directGetResourceAsStream(Configuration.TWO_JAR);
43930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    }
44030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein
4416bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public void test_twoJar_getResourceAsStream() throws Exception {
44230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        test_getResourceAsStream(Configuration.TWO_JAR);
44330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    }
44430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein
44530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    /**
44630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein     * Check that a resource in the second jar file is retrievable and
44730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein     * contains the expected contents.
44830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein     */
4496bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public static void test_twoJar_diff_directGetResourceAsStream()
45030daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein            throws Exception {
45130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein        test_directGetResourceAsStream(
45230daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein            Configuration.TWO_JAR, "test2/Resource2.txt",
45330daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein            "Who doesn't like a good biscuit?\n");
45430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    }
45530daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein
45630daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein    /**
45730daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein     * Check that a resource in a jar file can be retrieved from
45830daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein     * a class within the other jar file.
45930daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein     */
4606bfc6b199a14f8eb893426b7d48bcf06a3a32015Dan Bornstein    public static void test_twoJar_diff_getResourceAsStream()
46130daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein            throws Exception {
4621c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein        createInstanceAndCallStaticMethod(
46351d35175d7cce2afc5c9cdd1ef939d60481cd398Dan Bornstein            Configuration.TWO_JAR, "test.TestMethods",
46430daad6ce1e6f4a94d1c01672df26d2d35eafacaDan Bornstein            "test_diff_getResourceAsStream");
4651c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein    }
46644401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein}
467