DexClassLoaderTest.java revision 0097708dae398465c3da40cc7f9a2dfde5571364
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; 2544401c99f407517a16f8bf75a942a1461a6feceeDan Bornsteinimport libcore.base.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 { 3244401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein private static final String PACKAGE_PATH = "dalvik/system/"; 3344401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein private static final String JAR_NAME = "loading-test.jar"; 3444401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein private static final File TMP_DIR = 3544401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein new File(System.getProperty("java.io.tmpdir"), "loading-test"); 3644401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein private static final File TMP_JAR = new File(TMP_DIR, JAR_NAME); 3744401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 3844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein protected void setUp() throws IOException { 3944401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein TMP_DIR.mkdirs(); 4044401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 4144401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein ClassLoader cl = DexClassLoaderTest.class.getClassLoader(); 4244401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein InputStream in = cl.getResourceAsStream(PACKAGE_PATH + JAR_NAME); 4344401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein FileOutputStream out = new FileOutputStream(TMP_JAR); 4444401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 4544401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein Streams.copy(in, out); 4644401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein in.close(); 4744401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein out.close(); 4844401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein } 4944401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein 5044401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein /** 510097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * Helper to construct an instance to test. 520097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein */ 530097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein static private DexClassLoader createInstance() { 540097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein return new DexClassLoader(TMP_JAR.getAbsolutePath(), 550097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein TMP_DIR.getAbsolutePath(), 560097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein null, 570097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein ClassLoader.getSystemClassLoader()); 580097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein } 590097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein 600097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein /** 610097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * Just a trivial test of construction. This one merely makes 620097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * sure that a valid construction doesn't fail; it doesn't try 630097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * to verify anything about the constructed instance. (Other 640097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * tests will do that.) 6544401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein */ 6644401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein public void test_init() { 670097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein createInstance(); 680097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein } 690097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein 700097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein /** 710097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * Check that a class in the jar file may be used successfully. In this 720097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein * case, a trivial static method is called. 730097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein */ 740097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein public void test_simpleUse() 750097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein throws ClassNotFoundException, NoSuchMethodException, 760097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein IllegalAccessException, InvocationTargetException { 770097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein DexClassLoader dcl = createInstance(); 780097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein Class c = dcl.loadClass("test.Test1"); 790097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein Method m = c.getMethod("test", (Class[]) null); 800097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein String result = (String) m.invoke(null, (Object[]) null); 810097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein 820097708dae398465c3da40cc7f9a2dfde5571364Dan Bornstein assertSame("blort", result); 8344401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein } 8444401c99f407517a16f8bf75a942a1461a6feceeDan Bornstein} 85