aboutsummaryrefslogtreecommitdiffstats
path: root/src/test/javassist/tools/CallbackTest.java
blob: f5861cebb06fcdd32c20e52cc1f4f9f9368ef144 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package javassist.tools;

import javassist.*;
import junit.framework.TestCase;
import test.javassist.tools.DummyClass;
import test.javassist.tools.DefineClassCapability;

import static javassist.tools.Callback.*;

public class CallbackTest extends TestCase {

    public void testSomeCallbacks() throws Exception {

        // Get class and method to change
        ClassPool pool = ClassPool.getDefault();
        CtClass classToChange = pool.get("test.javassist.tools.DummyClass");
        CtMethod methodToChange = classToChange.getDeclaredMethod("dummyMethod");

        // Insert after
        methodToChange.insertAfter(new Callback("Thread.currentThread(), dummyString") {
            @Override
            public void result(Object... objects) {
                assertEquals(objects[0], Thread.currentThread());
                assertEquals(objects[1], "dummyStringValue");
            }
        }.sourceCode());

        // Insert after using utility method
        insertAfter(methodToChange, new Callback("Thread.currentThread(), dummyString") {
            @Override
            public void result(Object... objects) {
                assertEquals(objects[0], Thread.currentThread());
                assertEquals(objects[1], "dummyStringValue");
            }
        });

        // Change class and invoke method;
        classToChange.toClass(DefineClassCapability.class);
        new DummyClass().dummyMethod();
    }
}