Package test

Source Code of test.SerialVerUidTest

/**************************************************************************************

* Copyright (c) Jonas Bon?r, Alexandre Vasseur. All rights reserved.                 *

* http://aspectwerkz.codehaus.org                                                    *

* ---------------------------------------------------------------------------------- *

* The software in this package is published under the terms of the LGPL license      *

* a copy of which has been included with this distribution in the license.txt file.  *

**************************************************************************************/

package test;



import junit.framework.TestCase;



import java.io.Serializable;

import java.io.ObjectStreamClass;

import java.lang.reflect.Modifier;



import javassist.ClassPool;

import javassist.CtClass;

import javassist.CtNewMethod;

import javassist.CtField;

import javassist.CtConstructor;

import org.codehaus.aspectwerkz.transform.delegation.JavassistHelper;

import org.objectweb.asm.Constants;



/**

* Test the Javassist based SerialVerUid computation.

* See AW-244 for synthetic members bug.

*

* @author <a href="mailto:alex@gnilux.com">Alexandre Vasseur</a>

*/

public class SerialVerUidTest extends TestCase implements Serializable {



    public Object[] someMethod() {return null;}



    public SerialVerUidTest() {super();}



    public SerialVerUidTest(Object[] foo) {;}



    protected static final int someField = 32;



    public void testSerialVerUid() throws Throwable {

        Class javaClass = this.getClass();

        long javaSerialVerUid = ObjectStreamClass.lookup(javaClass).getSerialVersionUID();



        CtClass javassistClass = ClassPool.getDefault().get(this.getClass().getName());

        long javassistSerialVerUid = JavassistHelper.calculateSerialVerUid(javassistClass);



        assertEquals(javaSerialVerUid, javassistSerialVerUid);

    }



    public void testSerialVerUidSynthetic() throws Throwable {

        CtClass javassistClass = ClassPool.getDefault().get(this.getClass().getName());

        // build a class with synthetic method, field, ctor

        javassistClass.setName(this.getClass().getName()+"Generated");

        int syntheticModifier = Constants.ACC_SYNTHETIC | Modifier.PUBLIC;

        //javassistClass.addMethod(CtNewMethod.make(syntheticModifier, CtClass.intType, "syntheticDo", new CtClass[]{}, new CtClass[]{}, "{return 0;}", javassistClass));

        CtField field = new CtField(CtClass.intType, "syntheticField", javassistClass);

        field.setModifiers(syntheticModifier);

        javassistClass.addField(field);

        CtConstructor ctor = new CtConstructor(new CtClass[]{CtClass.intType}, javassistClass);

        ctor.setModifiers(syntheticModifier);

        ctor.setBody("{super();}");

        javassistClass.addConstructor(ctor);



        long javassistSerialVerUid = JavassistHelper.calculateSerialVerUid(javassistClass);



        Class javaClassGenerated = javassistClass.toClass();

        long javaSerialVerUid = ObjectStreamClass.lookup(javaClassGenerated).getSerialVersionUID();



        assertEquals(javaSerialVerUid, javassistSerialVerUid);



    }



    public static void main(String[] args) {

        junit.textui.TestRunner.run(suite());

    }



    public static junit.framework.Test suite() {

        return new junit.framework.TestSuite(SerialVerUidTest.class);

    }

}

TOP

Related Classes of test.SerialVerUidTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.