Package test.annotation

Source Code of test.annotation.AnnotationCopyTest

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

* 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.annotation;



import org.codehaus.aspectwerkz.transform.AspectWerkzPreProcessor;

import org.codehaus.aspectwerkz.annotation.instrumentation.asm.AsmAnnotationHelper;

import org.objectweb.asm.ClassReader;

import junit.framework.TestCase;



import java.util.List;

import java.util.ArrayList;

import java.io.ByteArrayOutputStream;

import java.io.InputStream;



/**

* AW-278

* We compile annoation with ASM, and read them back with Javassist at weave time

* then if offline mode was used, the joinpoint advice list is build based on the

* annotation on the original method - thus we need to enforce that the annotations have been copied.

*

* Note: this test has dependancy on ASM so we need to add ASM in the classpath without having it remapped with

* jarjar (since we do not jarjar the tests)

*

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

*/

public class AnnotationCopyTest extends TestCase {



    public void testJavassistASMAnnotation() throws Throwable {

        ClassLoader classLoader = this.getClass().getClassLoader();



        // grab the bytecode from the file system (not weaved since test are using load time weaving)

        InputStream is = classLoader.getResourceAsStream("test/annotation/AnnotationTest.class");

        ByteArrayOutputStream os = new ByteArrayOutputStream();

        for (int b = is.read(); b != -1; b = is.read()) {

            os.write(b);

        }

        byte[] bytes = os.toByteArray();



        // emulate the weaving, which should preserve annotations even if methods are wrapped

        AspectWerkzPreProcessor awpp = new AspectWerkzPreProcessor();

        awpp.initialize(null);

        byte[] weaved = awpp.preProcess("test.annotation.AnnotationTest", bytes, classLoader);



        // do a visit

        List annotations = new ArrayList();

        ClassReader asmReader = new ClassReader(weaved);

        asmReader.accept(

                new AsmAnnotationHelper.MethodAnnotationExtractor(annotations, "publicMethod", "()V", classLoader),

                AsmAnnotationHelper.ANNOTATIONS_ATTRIBUTES,

                true

        );

        assertEquals(2, annotations.size());

    }



    public static void main(String[] args) {

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

    }



    public static junit.framework.Test suite() {

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

    }







}

TOP

Related Classes of test.annotation.AnnotationCopyTest

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.