Yet Another Unit Test for LSPlant

This commit is contained in:
Nullptr 2022-02-19 16:49:54 +08:00
parent d99a17b449
commit 773af678e9
3 changed files with 44 additions and 0 deletions

View File

@ -71,4 +71,30 @@ public class UnitTest {
Assert.assertFalse(new LSPTest().field);
Assert.assertFalse(constructor.newInstance().field);
}
@Test
public void t04_manyParametersMethod() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
var manyParametersMethod = LSPTest.class.getDeclaredMethod("manyParametersMethod", String.class, boolean.class, byte.class, short.class, int.class, long.class, float.class, double.class, Integer.class, Long.class);
var manyParametersReplacement = Replacement.class.getDeclaredMethod("manyParametersReplacement", Hooker.MethodCallback.class);
var a = "test";
var b = true;
var c = (byte) 114;
var d = (short) 514;
var e = 19;
var f = 19L;
var g = 810f;
var h = 12345f;
var o = a + b + c + d + e + f + g + h + e + f;
var r = a + b + c + d + e + f + g + h + e + f + "replace";
LSPTest test = new LSPTest();
Assert.assertEquals(o, test.manyParametersMethod(a, b, c, d, e, f, g, h, e, f));
Hooker hooker = Hooker.hook(manyParametersMethod, manyParametersReplacement, new Replacement());
Assert.assertNotNull(hooker);
Assert.assertEquals(r, test.manyParametersMethod(a, b, c, d, e, f, g, h, e, f));
Assert.assertEquals(o, hooker.backup.invoke(test, a, b, c, d, e, f, g, h, e, f));
Assert.assertTrue(hooker.unhook());
Assert.assertEquals(o, test.manyParametersMethod(a, b, c, d, e, f, g, h, e, f));
}
}

View File

@ -21,4 +21,8 @@ public class LSPTest {
String normalMethod(String a, int b, long c) {
return a + b + c;
}
String manyParametersMethod(String a, boolean b, byte c, short d, int e, long f, float g, double h, Integer i, Long j) {
return a + b + c + d + e + f + g + h + i + j;
}
}

View File

@ -20,4 +20,18 @@ public class Replacement {
callback.backup.invoke(test);
test.field = true;
}
String manyParametersReplacement(Hooker.MethodCallback callback) {
var a = (String) callback.args[1];
var b = (boolean) callback.args[2];
var c = (byte) callback.args[3];
var d = (short) callback.args[4];
var e = (int) callback.args[5];
var f = (long) callback.args[6];
var g = (float) callback.args[7];
var h = (double) callback.args[8];
var i = (Integer) callback.args[9];
var j = (Long) callback.args[10];
return a + b + c + d + e + f + g + h + i + j + "replace";
}
}