# HG changeset patch # User volker # Date 1301154483 -3600 # Node ID 2096dd88860729dd6233bb714486628ade9cc6dd # Parent 474e8b6941380f6b17fa6cec6a4231b2ea0c9566 (no commit message)Convert the tests of the old testframe to the new testframe with DexifyingRunner diff -r 474e8b694138 -r 2096dd888607 src/test/java/org/icedrobot/daneel/junit/TestUtils.java --- a/src/test/java/org/icedrobot/daneel/junit/TestUtils.java Sat Mar 26 01:09:49 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,171 +0,0 @@ -/* - * Daneel - Dalvik to Java bytecode compiler - * Copyright (C) 2011 IcedRobot team - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * This file is subject to the "Classpath" exception: - * - * Linking this library statically or dynamically with other modules is - * making a combined work based on this library. Thus, the terms and - * conditions of the GNU General Public License cover the whole - * combination. - * - * As a special exception, the copyright holders of this library give you - * permission to link this library with independent modules to produce an - * executable, regardless of the license terms of these independent - * modules, and to copy and distribute the resulting executable under terms - * of your choice, provided that you also meet, for each linked independent - * module, the terms and conditions of the license of that module. An - * independent module is a module which is not derived from or based on - * this library. If you modify this library, you may extend this exception - * to your version of the library, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ - -package org.icedrobot.daneel.junit; - -import static org.junit.Assert.assertTrue; - -import org.junit.Test; - -import java.io.File; -import java.lang.reflect.Method; - -import org.icedrobot.daneel.loader.DaneelClassLoader; - -public class TestUtils { - - private static DaneelClassLoader daneelClassLoader; - - @Test - public void TestUtils_getClassLoader() { - DaneelClassLoader loader = getClassLoader(); - assertTrue(loader!=null); - } - - /** - * Create a ClassLoader from the IcedRobot test Android Package file - * (*.apk). The source are currently at http://icedtea.classpath.org/people/volker/IcedRobotAndroidTests/ - * - * @return a singleton instance - */ - public static DaneelClassLoader getClassLoader() { - if (daneelClassLoader == null) { - File[] file = new File[1]; - // Position of Eclipse build directory - file[0] = new File( - "../IcedRobotAndroidTests/bin/IcedRobotAndroidTests.apk"); - if (!file[0].exists()) { - file[0] = new File("../IcedRobotAndroidTests/bin/classes.dex"); - } - if (!file[0].exists()) { - //temporary until the maven build is finish - file[0] = new File("src/test/java/resources/classes.dex"); - } - daneelClassLoader = new DaneelClassLoader( - ClassLoader.getSystemClassLoader(), file); - } - return daneelClassLoader; - } - - /** - * Load a class from the IcedRobot test Android Package file (*.apk). The - * class name is build from the test clas name with suffix 'Dex'. After the - * loading it create an instance of the class. - * - * @param junitTestClass - * The class of the test case. - * @return a instance of the loaded dex class - * @throws Exception - * if there are any wrong on loading - */ - public static Object getDexTestInstance(Class junitTestClass) - throws Exception { - String className = junitTestClass.getName(); - Class clazz = getClassLoader().loadClass(className + "Dex"); - return clazz.newInstance(); - } - - /** - * Request a method from the given Object. The method name is identical to - * the caller method name. (stack deep is 2) - * - * @param instance - * the object from the dex class - * @param paramTypes - * the parameters of the method if there any - * @return the method of the dex class - * @throws Exception - * if there are any wrong on loading - */ - private static Method getDexMethodImpl(Object instance, Class... paramTypes) - throws Exception { - StackTraceElement ste = new Throwable().getStackTrace()[2]; - Class clazz; - if (instance == null) { - clazz = getClassLoader().loadClass(ste.getClassName() + "Dex"); - } else { - clazz = instance.getClass(); - } - return clazz.getDeclaredMethod(ste.getMethodName(), paramTypes); - } - - /** - * Request a method from the given Object. The method name is identical to - * the caller method name. If the object is null the class name is build - * from the caller class. - * - * @param instance - * the object from the dex class, can be null - * @param paramTypes - * the parameters of the method if there any - * @return the method of the dex class - * @throws Exception - * if there are any wrong on loading - */ - public static Method getDexTestMethod(Object instance, Class... paramTypes) - throws Exception { - return getDexMethodImpl(instance, paramTypes); - } - - /** - * Invoke a method from the given Object. The method name is identical to - * the caller method name. If the instance is null (static methods) the - * class name is build from the caller class. - * - * @param instance - * the object from the dex class, can be null for static methods - * @param params - * the parameters of the method if there any - * @return the return value of the method - * @throws Exception - * if there are any wrong on loading - */ - public static Object invokeDexTestMethod(Object instance, Object... params) - throws Exception { - Class[] paramTypes; - if (params != null && params.length > 0) { - paramTypes = new Class[params.length]; - for (int i = 0; i < params.length; i++) { - paramTypes[i] = params[i].getClass(); - } - } else { - paramTypes = null; - } - Method method = getDexMethodImpl(instance, paramTypes); - return method.invoke(instance, params); - } -} diff -r 474e8b694138 -r 2096dd888607 src/test/java/org/icedrobot/daneel/rewriter/DexRewriter_MethodRewriterTest.java --- a/src/test/java/org/icedrobot/daneel/rewriter/DexRewriter_MethodRewriterTest.java Sat Mar 26 01:09:49 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ -/* - * Daneel - Dalvik to Java bytecode compiler - * Copyright (C) 2011 IcedRobot team - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * This file is subject to the "Classpath" exception: - * - * Linking this library statically or dynamically with other modules is - * making a combined work based on this library. Thus, the terms and - * conditions of the GNU General Public License cover the whole - * combination. - * - * As a special exception, the copyright holders of this library give you - * permission to link this library with independent modules to produce an - * executable, regardless of the license terms of these independent - * modules, and to copy and distribute the resulting executable under terms - * of your choice, provided that you also meet, for each linked independent - * module, the terms and conditions of the license of that module. An - * independent module is a module which is not derived from or based on - * this library. If you modify this library, you may extend this exception - * to your version of the library, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ - -package org.icedrobot.daneel.rewriter; - -import static org.junit.Assert.assertEquals; - -import org.icedrobot.daneel.junit.TestUtils; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -public class DexRewriter_MethodRewriterTest { - - private static Object instance; - - @BeforeClass - public static void setUpBeforeClass() throws Exception { - instance = TestUtils - .getDexTestInstance(DexRewriter_MethodRewriterTest.class); - } - - @AfterClass - public static void tearDownAfterClass() { - instance = null; - } - - @Test - public void returnLong() throws Exception { - assertEquals(-1L, TestUtils.invokeDexTestMethod(instance)); - } - - @Test - public void returnInt() throws Exception { - assertEquals(25, TestUtils.invokeDexTestMethod(instance)); - } - - @Test - public void returnShort() throws Exception { - assertEquals((short)-1, TestUtils.invokeDexTestMethod(instance)); - } - - @Test - public void returnByte() throws Exception { - assertEquals((byte)-25, TestUtils.invokeDexTestMethod(instance)); - } - - @Test - public void returnChar() throws Exception { - assertEquals('a', TestUtils.invokeDexTestMethod(instance)); - } - - @Test - public void returnDouble() throws Exception { - assertEquals(Double.valueOf(44), TestUtils.invokeDexTestMethod(instance)); - } - - @Test - public void returnFloat() throws Exception { - assertEquals(Float.valueOf(37), TestUtils.invokeDexTestMethod(instance)); - } - - @Test - public void returnThis() throws Exception { - assertEquals(instance, TestUtils.invokeDexTestMethod(instance)); - } - - //@Test - public void returnNull() throws Exception { - assertEquals(null, TestUtils.invokeDexTestMethod(instance)); - } - - @Test - public void returnString() throws Exception { - assertEquals("any string", TestUtils.invokeDexTestMethod(instance)); - } -} diff -r 474e8b694138 -r 2096dd888607 src/test/java/org/icedrobot/daneel/rewriter/ReturnTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/java/org/icedrobot/daneel/rewriter/ReturnTest.java Sat Mar 26 16:48:03 2011 +0100 @@ -0,0 +1,142 @@ +/* + * Daneel - Dalvik to Java bytecode compiler + * Copyright (C) 2011 IcedRobot team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * This file is subject to the "Classpath" exception: + * + * Linking this library statically or dynamically with other modules is + * making a combined work based on this library. Thus, the terms and + * conditions of the GNU General Public License cover the whole + * combination. + * + * As a special exception, the copyright holders of this library give you + * permission to link this library with independent modules to produce an + * executable, regardless of the license terms of these independent + * modules, and to copy and distribute the resulting executable under terms + * of your choice, provided that you also meet, for each linked independent + * module, the terms and conditions of the license of that module. An + * independent module is a module which is not derived from or based on + * this library. If you modify this library, you may extend this exception + * to your version of the library, but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. + */ + +package org.icedrobot.daneel.rewriter; + +import static org.junit.Assert.assertEquals; + +import org.icedrobot.daneel.DexifyingRunner; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(DexifyingRunner.class) +public class ReturnTest { + + @Test + public void returnLong() throws Exception { + assertEquals(-1L, new DEXCode().returnLong()); + } + + @Test + public void returnInt() throws Exception { + assertEquals(25, new DEXCode().returnInt()); + } + + @Test + public void returnShort() throws Exception { + assertEquals((short) -1, new DEXCode().returnShort()); + } + + @Test + public void returnByte() throws Exception { + assertEquals((byte) -25, new DEXCode().returnByte()); + } + + @Test + public void returnChar() throws Exception { + assertEquals('a', new DEXCode().returnChar()); + } + + @Test + public void returnDouble() throws Exception { + assertEquals(44.0, new DEXCode().returnDouble(), 0); + } + + @Test + public void returnFloat() throws Exception { + assertEquals(37.0F, new DEXCode().returnFloat(), 0); + } + + @Test + public void returnThis() throws Exception { + DEXCode dex = new DEXCode(); + assertEquals(dex, dex.returnThis()); + } + + @Test + public void returnNull() throws Exception { + assertEquals(null, new DEXCode().returnNull()); + } + + @Test + public void returnString() throws Exception { + assertEquals("any string", new DEXCode().returnString()); + } + + // Keep this class named "DEXCode" to push it through Daneel. + private static class DEXCode { + public long returnLong() { + return -1; + } + + public int returnInt() { + return 25; + } + + public short returnShort() { + return -1; + } + + public byte returnByte() { + return -25; + } + + public char returnChar() { + return 'a'; + } + + public double returnDouble() { + return 44; + } + + public float returnFloat() { + return 37; + } + + public Object returnThis() { + return this; + } + + public Object returnNull() { + return null; + } + + public String returnString() { + return "any string"; + } + } +} diff -r 474e8b694138 -r 2096dd888607 src/test/java/resources/classes.dex Binary file src/test/java/resources/classes.dex has changed