• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package javassist;
2 import java.lang.reflect.Method;
3 
4 import junit.framework.TestCase;
5 
6 @SuppressWarnings({"rawtypes","unchecked"})
7 public class SetterTest extends TestCase {
8 
9     ClassPool pool;
10     Class<?> capability;
11 
SetterTest(String name)12     public SetterTest(String name) {
13          super(name);
14     }
15 
setUp()16     protected void setUp() throws Exception {
17         super.setUp();
18         pool = ClassPool.getDefault();
19         capability = Class.forName("DefineClassCapability");
20     }
21 
22     /**
23      * Tests a getter only on a field without a Modifier.
24      *
25      * @throws Exception
26      */
testFieldGetter()27     public void testFieldGetter() throws Exception {
28         CtClass clazz = pool.makeClass("HasFieldGetter");
29         clazz.setSuperclass(pool.get("java.lang.Object"));
30         CtField field = new CtField(CtClass.booleanType, "broken", clazz);
31         clazz.addField(field, "true");
32         clazz.addMethod(CtNewMethod.getter("isBroken", field));
33         Class _class = clazz.toClass(capability);
34 
35         Object object = _class.getConstructor().newInstance();
36         check(_class, object, true);
37     }
38 
39     /**
40      * Tests a getter and a setter on a field without a Modifier.
41      *
42      * @throws Exception
43      */
testFieldGetterSetter()44     public void testFieldGetterSetter() throws Exception {
45         CtClass clazz = pool.makeClass("HasFieldGetterSetter");
46         clazz.setSuperclass(pool.get("java.lang.Object"));
47         CtField field = new CtField(CtClass.booleanType, "broken", clazz);
48         clazz.addField(field, "true");
49         clazz.addMethod(CtNewMethod.getter("isBroken", field));
50         clazz.addMethod(CtNewMethod.setter("setBroken", field));
51         Class _class = clazz.toClass(capability);
52 
53         Object object = _class.getConstructor().newInstance();
54 
55         set(_class, object, false);
56         check(_class, object, false);
57     }
58 
59     /**
60      * Tests a getter only on a field with Modifier.STATIC.
61      *
62      * @throws Exception
63      */
testStaticFieldGetter()64     public void testStaticFieldGetter() throws Exception {
65         CtClass clazz = pool.makeClass("HasStaticFieldGetter");
66         clazz.setSuperclass(pool.get("java.lang.Object"));
67         CtField field = new CtField(CtClass.booleanType, "broken", clazz);
68         field.setModifiers(Modifier.STATIC);
69         clazz.addField(field, "true");
70         clazz.addMethod(CtNewMethod.getter("isBroken", field));
71         Class _class = clazz.toClass(capability);
72 
73         Object object = _class.getConstructor().newInstance();
74         check(_class, object, true);
75     }
76 
77     /**
78      * Tests a getter and setter on a field with Modifier.STATIC.
79      *
80      * @throws Exception
81      */
testStaticFieldGetterSetter()82     public void testStaticFieldGetterSetter() throws Exception {
83         CtClass clazz = pool.makeClass("HasStaticFieldGetterSetter");
84         clazz.setSuperclass(pool.get("java.lang.Object"));
85         CtField field = new CtField(CtClass.booleanType, "broken", clazz);
86         field.setModifiers(Modifier.STATIC);
87         clazz.addField(field, "true");
88         clazz.addMethod(CtNewMethod.getter("isBroken", field));
89         clazz.addMethod(CtNewMethod.setter("setBroken", field));
90         Class _class = clazz.toClass(capability);
91 
92         Object object = _class.getConstructor().newInstance();
93 
94         set(_class, object, false);
95         check(_class, object, false);
96     }
97 
check(Class _class, Object object, boolean shouldBe)98     private void check(Class _class, Object object, boolean shouldBe)
99         throws Exception
100     {
101         Method method = _class.getMethod("isBroken", new Class[] {});
102         Boolean result = (Boolean) method.invoke(object, new Object[] {});
103         assertEquals("boolean is wrong value",
104                      shouldBe, result.booleanValue());
105     }
106 
set(Class _class, Object object, boolean willBe)107     private void set(Class _class, Object object, boolean willBe)
108         throws Exception
109     {
110         Method method = _class.getMethod("setBroken",
111                                          new Class[] {Boolean.TYPE});
112         method.invoke(object, new Object[] { Boolean.valueOf(willBe)});
113     }
114 }
115