Package test.staticinitialization

Source Code of test.staticinitialization.StaticInitializationTest

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

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



import java.util.ArrayList;

import java.util.List;



import junit.framework.TestCase;



import org.codehaus.aspectwerkz.joinpoint.EnclosingStaticJoinPoint;

import org.codehaus.aspectwerkz.joinpoint.JoinPoint;

import org.codehaus.aspectwerkz.joinpoint.Rtti;

import org.codehaus.aspectwerkz.joinpoint.Signature;

import org.codehaus.aspectwerkz.joinpoint.StaticJoinPoint;

import org.codehaus.aspectwerkz.joinpoint.impl.StaticInitializationRttiImpl;

import org.codehaus.aspectwerkz.joinpoint.impl.StaticInitializerSignatureImpl;

import org.codehaus.aspectwerkz.joinpoint.management.JoinPointType;

import test.CallerSideAdviceTest;





/**

* Test for staticinitialization pointcuts.

*

* @author <a href="mailto:the_mindstorm@evolva.ro">Alex Popescu</a>

*/

public class StaticInitializationTest extends TestCase {

  public static final String[] BEFORE_EXPECTED_MESSAGES = {

    "beforeStaticinitialization",

    "aroundStaticinitializationSJP",

    "aroundStaticinitializationJP"

  };

 

  public static final String[] AFTER_EXPECTED_MESSAGES = {

    "afterReturningStaticinitialization",

    "afterStaticinititalization"

  };

 

  public static final String CLINIT_EXECUTION_MESSAGE = "<clinit>.execution";

 

  public static List s_messages = new ArrayList();

  public static List s_staticJoinPoints = new ArrayList();

  public static List s_joinPoints = new ArrayList();

 

  public void testStaticInitializer() throws ClassNotFoundException {

    Class reflectClazz = Class.forName("test.staticinitialization.ClinitTarget");

        try {

            // required to run the clinit on Java 1.5

            reflectClazz.newInstance();

        } catch (Exception e) {

            fail(e.toString());

        }



        checkMessages();

   

    checkStaticJoinPoints(reflectClazz, s_staticJoinPoints);

    checkStaticJoinPoints(reflectClazz, s_joinPoints);

   

    checkJoinPoints(reflectClazz);

  }



  private void checkMessages() {

    int messages = 3 * (BEFORE_EXPECTED_MESSAGES.length

               + AFTER_EXPECTED_MESSAGES.length) + 1;

   

    assertEquals("logged messages should match",

                 messages,

                 s_messages.size());

   

    for(int i = 0; i < BEFORE_EXPECTED_MESSAGES.length; i++) {

      for(int j = 0; j < 3; j++) {

        assertEquals(BEFORE_EXPECTED_MESSAGES[i],

                     s_messages.get(i * 3 + j));

      }

    }

   

    int lastBeforeIndex = 3 * BEFORE_EXPECTED_MESSAGES.length;

   

    assertEquals("clinit was expected to execute",

                 CLINIT_EXECUTION_MESSAGE,

                 s_messages.get(lastBeforeIndex));

   

    lastBeforeIndex++;

   

    for(int i = 0; i < AFTER_EXPECTED_MESSAGES.length; i++) {

      for(int j = 0; j < 3; j++) {

        assertEquals(AFTER_EXPECTED_MESSAGES[i],

                     s_messages.get(lastBeforeIndex + (i * 3) + j));

      }

    }

  }

 

  private void checkStaticJoinPoints(Class clazz, List data) {

    assertEquals("staticjoinpoints number does not match",

                 12,

                 data.size()

    );

   

    Class signatureClass = StaticInitializerSignatureImpl.class;

   

    for(int i = 0; i < data.size(); i++) {

      StaticJoinPoint sjp = (StaticJoinPoint) data.get(i);

     

      assertEquals(clazz,

                   sjp.getCallerClass());

     

      assertEquals(clazz,

                   sjp.getCalleeClass());

     

      assertEquals(JoinPointType.STATIC_INITIALIZATION,

                   sjp.getType());

     

      Signature signature = sjp.getSignature();

      assertNotNull(signature);

     

      assertEquals(signatureClass,

                   signature.getClass());

     

      assertEquals(clazz,

                   signature.getDeclaringType());

     

      EnclosingStaticJoinPoint esjp = sjp.getEnclosingStaticJoinPoint();

     

      assertNotNull(esjp);

     

      assertEquals(JoinPointType.STATIC_INITIALIZATION,

                   esjp.getType());

     

      Signature enclSig = esjp.getSignature();

     

      assertNotNull(enclSig);

     

      assertEquals(signatureClass,

                   enclSig.getClass());

     

      assertEquals(clazz,

                   enclSig.getDeclaringType());



    }

  }

 

  private void checkJoinPoints(Class clazz) {

    assertEquals("joinpoints number does not match",

                 12,

                 s_staticJoinPoints.size()

    );

   

    Class siRtti = StaticInitializationRttiImpl.class;

   

    for(int i = 0; i < s_joinPoints.size(); i++) {

      JoinPoint jp = (JoinPoint) s_joinPoints.get(i);

     

      assertNull(jp.getCaller());

     

      assertNull(jp.getThis());

     

      assertNull(jp.getCallee());

     

      assertNull(jp.getTarget());

     

      Rtti rtti = jp.getRtti();

     

      assertNotNull(rtti);

     

      assertEquals(siRtti,

                   rtti.getClass());

     

      assertEquals(clazz,

                   rtti.getDeclaringType()

      );

     

      assertNull(rtti.getThis());

     

      assertNull(rtti.getTarget());

    }

  }

 

    public static void main(String[] args) {

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

    }



    public static junit.framework.Test suite() {

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

    }

}

TOP

Related Classes of test.staticinitialization.StaticInitializationTest

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.