You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SetterTest.java 3.8KB

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