DexClassLoaderTest.java revision 1c4757f1439ed6209a7aba6ca2d8e99fd28c9612
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 { 3344401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein private static final String PACKAGE_PATH = "dalvik/system/"; 3444401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein private static final String JAR_NAME = "loading-test.jar"; 358c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein private static final String DEX_NAME = "loading-test.dex"; 3644401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein private static final File TMP_DIR = 3744401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein new File(System.getProperty("java.io.tmpdir"), "loading-test"); 3844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein private static final File TMP_JAR = new File(TMP_DIR, JAR_NAME); 398c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein private static final File TMP_DEX = new File(TMP_DIR, DEX_NAME); 4044401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 4144401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein protected void setUp() throws IOException { 4244401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein TMP_DIR.mkdirs(); 4344401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 4444401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein ClassLoader cl = DexClassLoaderTest.class.getClassLoader(); 458c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 4644401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein InputStream in = cl.getResourceAsStream(PACKAGE_PATH + JAR_NAME); 4744401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein FileOutputStream out = new FileOutputStream(TMP_JAR); 488c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein Streams.copy(in, out); 498c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein in.close(); 508c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein out.close(); 5144401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 528c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein in = cl.getResourceAsStream(PACKAGE_PATH + DEX_NAME); 538c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein out = new FileOutputStream(TMP_DEX); 5444401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein Streams.copy(in, out); 5544401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein in.close(); 5644401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein out.close(); 5744401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein } 5844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 5944401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein /** 600097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * Helper to construct an instance to test. 618c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * 628c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * @param useDex whether to use the raw dex file ({@code true}) or 638c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * a dex-in-jar file ({@code false}) 640097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein */ 658c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein private static DexClassLoader createInstance(boolean useDex) { 668c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein File file = useDex ? TMP_DEX : TMP_JAR; 678c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 688c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein return new DexClassLoader(file.getAbsolutePath(), 690097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein TMP_DIR.getAbsolutePath(), 700097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein null, 710097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein ClassLoader.getSystemClassLoader()); 720097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein } 730097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein 740097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein /** 758c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * Helper to construct an instance to test, using the jar file as 768c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * the source, and call a named no-argument static method on a 778c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * named class. 788c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * 798c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * @param useDex whether to use the raw dex file ({@code true}) or 808c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * a dex-in-jar file ({@code false}) 818c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 828c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public static Object createInstanceAndCallStaticMethod(boolean useDex, 838c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein String className, String methodName) 848c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws ClassNotFoundException, NoSuchMethodException, 858c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein IllegalAccessException, InvocationTargetException { 868c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein DexClassLoader dcl = createInstance(useDex); 878c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein Class c = dcl.loadClass(className); 888c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein Method m = c.getMethod(methodName, (Class[]) null); 898c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein return m.invoke(null, (Object[]) null); 908c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 918c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 928c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /* 938c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * Tests that are parametric with respect to whether to use a jar 948c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * file or a dex file as the source of the code 958c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 968c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 978c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /** 980097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * Just a trivial test of construction. This one merely makes 990097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * sure that a valid construction doesn't fail; it doesn't try 1000097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * to verify anything about the constructed instance. (Other 1010097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * tests will do that.) 10244401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein */ 1038c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public static void test_init(boolean useDex) { 1048c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstance(useDex); 1050097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein } 1060097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein 1070097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein /** 1081c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * Check that a class in the jar/dex file may be used successfully. In this 1090097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * case, a trivial static method is called. 1100097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein */ 1118c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public static void test_simpleUse(boolean useDex) throws Exception { 1128c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein String result = (String) 1138c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod(useDex, "test.Test1", "test"); 1140097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein 1150097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein assertSame("blort", result); 11644401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein } 11792c92f5f5306c7bed2c34b8382dad32445f5ef85Dan Bornstein 1188c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /* 1198c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * All the following tests are just pass-throughs to test code 1208c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein * that lives inside the loading-test dex/jar file. 1218c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 1228c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1238c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public static void test_callStaticMethod(boolean useDex) 1248c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1258c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 1268c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein useDex, "test.Test2", "test_callStaticMethod"); 1278c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1288c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1298c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public static void test_getStaticVariable(boolean useDex) 1308c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1318c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 1328c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein useDex, "test.Test2", "test_getStaticVariable"); 1338c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1348c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1358c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public static void test_callInstanceMethod(boolean useDex) 1368c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1378c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 1388c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein useDex, "test.Test2", "test_callInstanceMethod"); 1398c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1408c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1418c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public static void test_getInstanceVariable(boolean useDex) 1428c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein throws Exception { 1438c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein createInstanceAndCallStaticMethod( 1448c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein useDex, "test.Test2", "test_getInstanceVariable"); 1458c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1468c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1478c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein /* 1481c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * These methods are all essentially just calls to the 1491c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * parametrically-defined tests above. 1508c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein */ 1518c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1528c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public void test_jar_init() throws Exception { 1538c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein test_init(false); 1548c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1558c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1568c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public void test_jar_simpleUse() throws Exception { 1578c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein test_simpleUse(false); 1588c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1598c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1608c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public void test_jar_callStaticMethod() throws Exception { 1618c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein test_callStaticMethod(false); 1628c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1638c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1648c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public void test_jar_getStaticVariable() throws Exception { 1658c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein test_getStaticVariable(false); 1668c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1678c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1688c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public void test_jar_callInstanceMethod() throws Exception { 1698c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein test_callInstanceMethod(false); 1708c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1718c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1728c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public void test_jar_getInstanceVariable() throws Exception { 1738c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein test_getInstanceVariable(false); 1748c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1758c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1768c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public void test_dex_init() throws Exception { 1778c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein test_init(true); 1788c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1798c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1808c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public void test_dex_simpleUse() throws Exception { 1818c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein test_simpleUse(true); 1828c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1838c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1848c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public void test_dex_callStaticMethod() throws Exception { 1858c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein test_callStaticMethod(true); 1868c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1878c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1888c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public void test_dex_getStaticVariable() throws Exception { 1898c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein test_getStaticVariable(true); 1908c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1918c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1928c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public void test_dex_callInstanceMethod() throws Exception { 1938c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein test_callInstanceMethod(true); 1948c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1958c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein 1968c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein public void test_dex_getInstanceVariable() throws Exception { 1978c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein test_getInstanceVariable(true); 1988c47f104820836f6bdacce83e1be6cc71c1cace0Dan Bornstein } 1991c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 2001c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein /* 2011c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * Tests specifically for resource-related functionality. Since 2021c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * raw dex files don't contain resources, these test only work 2031c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * with jar files. 2041c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein */ 2051c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 2061c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein /** 2071c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * Check that a resource in the jar file is retrievable and contains 2081c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * the expected contents. 2091c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein */ 2101c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein public void test_directGetResourceAsStream() throws Exception { 2111c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein DexClassLoader dcl = createInstance(false); 2121c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein InputStream in = dcl.getResourceAsStream("test/Resource1.txt"); 2131c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein byte[] contents = Streams.readFully(in); 2141c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein String s = new String(contents, "UTF-8"); 2151c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 2161c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein assertEquals("Muffins are tasty!\n", s); 2171c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein } 2181c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein 2191c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein /** 2201c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * Check that a resource in the jar file can be retrieved from 2211c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein * a class within that jar file. 2221c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein */ 2231c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein public void test_getResourceAsStream() throws Exception { 2241c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein createInstanceAndCallStaticMethod( 2251c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein false, "test.Test2", "test_getResourceAsStream"); 2261c4757f1439ed6209a7aba6ca2d8e99fd28c9612Dan Bornstein } 22744401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein} 228