package droidkit.util;
import junit.framework.Assert;
import junit.framework.TestCase;
import droidkit.util.DynamicMethod;
/**
* @author Daniel Serdyukov
*/
public class DynamicMethodTest extends TestCase {
private MockObject mObject;
@Override
public void setUp() throws Exception {
super.setUp();
MockObject.sPublicStaticMethodCalled = false;
MockObject.sPrivateStaticMethodCalled = false;
mObject = new MockObject();
}
public void testInvokeStaticPublic() throws Exception {
DynamicMethod.invokeStatic(MockObject.class, "publicStaticMethod", 1, 2.5, "Test");
Assert.assertTrue(MockObject.sPublicStaticMethodCalled);
}
public void testInvokeStaticPrivate() throws Exception {
DynamicMethod.invokeStatic(MockObject.class, "privateStaticMethod", 1, 2.5, "Test");
Assert.assertTrue(MockObject.sPrivateStaticMethodCalled);
}
public void testInvokePublic() throws Exception {
final String actual = DynamicMethod.invoke(mObject, "publicInstanceMethod", "Test");
Assert.assertTrue(mObject.mPublicInstanceMethodCalled);
Assert.assertEquals("Test", actual);
}
public void testInvokePrivate() throws Exception {
final int actual = DynamicMethod.invoke(mObject, "privateInstanceMethod", 1);
Assert.assertTrue(mObject.mPrivateInstanceMethodCalled);
Assert.assertEquals(1, actual);
}
private static class MockObject {
static boolean sPublicStaticMethodCalled;
static boolean sPrivateStaticMethodCalled;
boolean mPublicInstanceMethodCalled;
boolean mPrivateInstanceMethodCalled;
public static void publicStaticMethod(int i, Double d, String s) {
sPublicStaticMethodCalled = true;
Assert.assertEquals(1, i);
Assert.assertEquals(d, d);
Assert.assertEquals("Test", s);
}
private static void privateStaticMethod(Integer i, double d, String s) {
sPrivateStaticMethodCalled = true;
Assert.assertEquals(Integer.valueOf(1), i);
Assert.assertEquals(2.5, d);
Assert.assertEquals("Test", s);
}
public String publicInstanceMethod(String s) {
mPublicInstanceMethodCalled = true;
return s;
}
public int privateInstanceMethod(Integer i) {
mPrivateInstanceMethodCalled = true;
return i;
}
}
}