1 /***************************************************************************************
2 * Copyright (c) Jonas Bon?r, Alexandre Vasseur. All rights reserved. *
3 * http://aspectwerkz.codehaus.org *
4 * ---------------------------------------------------------------------------------- *
5 * The software in this package is published under the terms of the LGPL license *
6 * a copy of which has been included with this distribution in the license.txt file. *
7 **************************************************************************************/
8 package test;
9
10 import junit.framework.TestCase;
11
12 import java.io.Serializable;
13 import java.io.ObjectStreamClass;
14 import java.lang.reflect.Modifier;
15
16 import javassist.ClassPool;
17 import javassist.CtClass;
18 import javassist.CtNewMethod;
19 import javassist.CtField;
20 import javassist.CtConstructor;
21 import org.codehaus.aspectwerkz.transform.delegation.JavassistHelper;
22 import org.objectweb.asm.Constants;
23
24 /***
25 * Test the Javassist based SerialVerUid computation.
26 * See AW-244 for synthetic members bug.
27 *
28 * @author <a href="mailto:alex@gnilux.com">Alexandre Vasseur</a>
29 */
30 public class SerialVerUidTest extends TestCase implements Serializable {
31
32 public Object[] someMethod() {return null;}
33
34 public SerialVerUidTest() {super();}
35
36 public SerialVerUidTest(Object[] foo) {;}
37
38 protected static final int someField = 32;
39
40 public void testSerialVerUid() throws Throwable {
41 Class javaClass = this.getClass();
42 long javaSerialVerUid = ObjectStreamClass.lookup(javaClass).getSerialVersionUID();
43
44 CtClass javassistClass = ClassPool.getDefault().get(this.getClass().getName());
45 long javassistSerialVerUid = JavassistHelper.calculateSerialVerUid(javassistClass);
46
47 assertEquals(javaSerialVerUid, javassistSerialVerUid);
48 }
49
50 public void testSerialVerUidSynthetic() throws Throwable {
51 CtClass javassistClass = ClassPool.getDefault().get(this.getClass().getName());
52
53 javassistClass.setName(this.getClass().getName()+"Generated");
54 int syntheticModifier = Constants.ACC_SYNTHETIC | Modifier.PUBLIC;
55
56 CtField field = new CtField(CtClass.intType, "syntheticField", javassistClass);
57 field.setModifiers(syntheticModifier);
58 javassistClass.addField(field);
59 CtConstructor ctor = new CtConstructor(new CtClass[]{CtClass.intType}, javassistClass);
60 ctor.setModifiers(syntheticModifier);
61 ctor.setBody("{super();}");
62 javassistClass.addConstructor(ctor);
63
64 long javassistSerialVerUid = JavassistHelper.calculateSerialVerUid(javassistClass);
65
66 Class javaClassGenerated = javassistClass.toClass();
67 long javaSerialVerUid = ObjectStreamClass.lookup(javaClassGenerated).getSerialVersionUID();
68
69 assertEquals(javaSerialVerUid, javassistSerialVerUid);
70
71 }
72
73 public static void main(String[] args) {
74 junit.textui.TestRunner.run(suite());
75 }
76
77 public static junit.framework.Test suite() {
78 return new junit.framework.TestSuite(SerialVerUidTest.class);
79 }
80 }