Package test.withincode

Source Code of test.withincode.WithincodeClinitTest

/**************************************************************************************
* 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.withincode;

import java.util.ArrayList;
import java.util.List;

import junit.framework.TestCase;

import org.codehaus.aspectwerkz.joinpoint.CatchClauseRtti;
import org.codehaus.aspectwerkz.joinpoint.CatchClauseSignature;
import org.codehaus.aspectwerkz.joinpoint.ConstructorRtti;
import org.codehaus.aspectwerkz.joinpoint.ConstructorSignature;
import org.codehaus.aspectwerkz.joinpoint.EnclosingStaticJoinPoint;
import org.codehaus.aspectwerkz.joinpoint.FieldRtti;
import org.codehaus.aspectwerkz.joinpoint.FieldSignature;
import org.codehaus.aspectwerkz.joinpoint.JoinPoint;
import org.codehaus.aspectwerkz.joinpoint.MethodRtti;
import org.codehaus.aspectwerkz.joinpoint.MethodSignature;
import org.codehaus.aspectwerkz.joinpoint.Rtti;
import org.codehaus.aspectwerkz.joinpoint.StaticJoinPoint;
import org.codehaus.aspectwerkz.joinpoint.impl.StaticInitializerSignatureImpl;
import org.codehaus.aspectwerkz.joinpoint.management.JoinPointType;


/**
* Test for withincode(clinit).
*
* @author <a href="mailto:the_mindstorm@evolva.ro">Alex Popescu</a>
*/
public class WithincodeClinitTest extends TestCase {
  private static List s_messages  = new ArrayList();
  private static List s_staticJoinPoints = new ArrayList();
  private static List s_joinPoints = new ArrayList();
 
  private static final String[] EXPECTED_MSGS = {
      "beforeCtorCall",
      "beforeWithincodeClinitCtorCall",
      "beforeWithincodeClinitPatternCtorCall",
      "afterReturningCtorCall",
      "afterCtorCall",
      "afterWithincodeClinitCtorCall",
      "afterWithincodeClinitPatternCtorCall",
      "beforeGetSet",
      "afterReturningGetSet",
      "afterGetSet",
      "beforeGetSet",
      "afterReturningGetSet",
      "afterGetSet",
      "beforeMethodCall",
      "afterThrowingTypeMethodCall",
      "afterThrowingMethodCall",
      "afterFinallyMethodCall",
      "beforeHandler"
  };

  private static final Class[] EXPECTED_SIGNATURES = new Class[] {
      ConstructorSignature.class,
      ConstructorSignature.class,
      ConstructorSignature.class,
      ConstructorSignature.class,
    FieldSignature.class,
    FieldSignature.class,
    FieldSignature.class,
    FieldSignature.class,
    FieldSignature.class,
    FieldSignature.class,
    FieldSignature.class,
    FieldSignature.class,
    MethodSignature.class,
    MethodSignature.class,
    MethodSignature.class,
    MethodSignature.class,
    MethodSignature.class,
    CatchClauseSignature.class,
    CatchClauseSignature.class
  };
 
  private static final JoinPointType[] EXPECTED_JP_TYPES = new JoinPointType[] {
      JoinPointType.CONSTRUCTOR_CALL,
      JoinPointType.CONSTRUCTOR_CALL,
      JoinPointType.CONSTRUCTOR_CALL,
      JoinPointType.CONSTRUCTOR_CALL,
      JoinPointType.FIELD_SET,
      JoinPointType.FIELD_SET,
      JoinPointType.FIELD_SET,
      JoinPointType.FIELD_SET,
      JoinPointType.FIELD_GET,
      JoinPointType.FIELD_GET,
      JoinPointType.FIELD_GET,
      JoinPointType.FIELD_GET,
      JoinPointType.METHOD_CALL,
      JoinPointType.METHOD_CALL,
      JoinPointType.METHOD_CALL,
      JoinPointType.METHOD_CALL,
      JoinPointType.METHOD_CALL,
      JoinPointType.HANDLER,
      JoinPointType.HANDLER
  };
 
  private static final Class ENCLOSING_SJP_CLASS = StaticInitializerSignatureImpl.class;
  private static final JoinPointType ENCLOSING_SJP_TYPE = JoinPointType.STATIC_INITIALIZATION;
  private static final String CALLER_CLASS_NAME = "test.withincode.Target";
  private static final String CALLER_INSTANCE = "null";
 
  private static final String[] CALLEE_CLASS_NAME = {
      "test.withincode.Target$CtorCallTarget",
      "test.withincode.Target$CtorCallTarget",
      "test.withincode.Target$CtorCallTarget",
      "test.withincode.Target$CtorCallTarget",
      "test.withincode.Target",
      "test.withincode.Target",
      "test.withincode.Target",
      "test.withincode.Target",
      "test.withincode.Target",
      "test.withincode.Target",
      "test.withincode.Target",
      "test.withincode.Target",
      "test.withincode.Target",
      "test.withincode.Target",
      "test.withincode.Target",
      "test.withincode.Target",
      "test.withincode.Target",
      "test.handler.HandlerTestBeforeException",
      "test.handler.HandlerTestBeforeException"
  };
 
  private static final Class[] RTTI_CLASS = new Class[] {
      ConstructorRtti.class,
      ConstructorRtti.class,
      ConstructorRtti.class,
      ConstructorRtti.class,
      FieldRtti.class,
      FieldRtti.class,
      FieldRtti.class,
      FieldRtti.class,
      FieldRtti.class,
      FieldRtti.class,
      FieldRtti.class,
      FieldRtti.class,
      MethodRtti.class,
      MethodRtti.class,
      MethodRtti.class,
      MethodRtti.class,
      MethodRtti.class,
      CatchClauseRtti.class,
      CatchClauseRtti.class
  };
 
  public void testWithincode() {
      Class clazz = Target.class;

        try {
            // enfore clazz clinit triggering
            Object fake = clazz.newInstance();
        } catch (Exception e) {
            fail(e.toString());
        }

        checkMessages();
     
      checkStaticJoinPoints();
     
      checkJoinPoints();
     
  }
 
  private void checkMessages() {
      assertEquals("no of occured messages",
                EXPECTED_MSGS.length,
                s_messages.size()
      );
     
      for(int i = 0; i < EXPECTED_MSGS.length; i++) {
          assertEquals("expected message: " + EXPECTED_MSGS[i],
                    EXPECTED_MSGS[i],
                    s_messages.get(i)
          );
      }
  }

  private void checkStaticJoinPoints() {
      assertEquals("captured SJP signature",
              EXPECTED_SIGNATURES.length,
              s_staticJoinPoints.size()
      );
     
      for(int i = 0; i < EXPECTED_SIGNATURES.length; i++) {
          StaticJoinPoint sjp = (StaticJoinPoint) s_staticJoinPoints.get(i);


      assertTrue(
              EXPECTED_SIGNATURES[i].isAssignableFrom(sjp.getSignature().getClass())
      );

      assertEquals(EXPECTED_JP_TYPES[i], sjp.getType());
         
          EnclosingStaticJoinPoint esjp = sjp.getEnclosingStaticJoinPoint();

            assertTrue(
                    ENCLOSING_SJP_CLASS.isAssignableFrom(esjp.getSignature().getClass())
            );

            assertEquals(ENCLOSING_SJP_TYPE,
                         esjp.getType()
            );
    }
  }
 
  private void checkJoinPoints() {
      assertEquals("captured JP signature",
              EXPECTED_SIGNATURES.length,
              s_joinPoints.size()
      );
     
      for(int i = 0; i < s_joinPoints.size(); i++) {
          JoinPoint jp = (JoinPoint) s_joinPoints.get(i);
         
          assertEquals(CALLER_CLASS_NAME, jp.getCallerClass().getName());
          assertEquals(CALLEE_CLASS_NAME[i], jp.getCalleeClass().getName());
          assertEquals(CALLER_INSTANCE, String.valueOf(jp.getCaller()));
          assertEquals(CALLER_INSTANCE, String.valueOf(jp.getThis()));
         
          if(i < 4 || i > s_joinPoints.size() - 3) { // CTORS and HANDLERS CALLEE
              assertNotNull(jp.getCallee());
              assertNotNull(jp.getTarget());
          } else {
              assertEquals(CALLER_INSTANCE, String.valueOf(jp.getCallee()));
              assertEquals(CALLER_INSTANCE, String.valueOf(jp.getTarget()));
          }
         
          Rtti rtti = jp.getRtti();
         
          assertTrue("expected " + RTTI_CLASS[i].getName() + " found " + rtti.getClass().getName(),
                  RTTI_CLASS[i].isAssignableFrom(rtti.getClass()));
      }
  }
 
  public static void addMessage(final String msg) {
      s_messages.add(msg);
  }
 
  public static void addSJP(StaticJoinPoint sjp) {
      s_staticJoinPoints.add(sjp);
  }
 
  public static void addJP(JoinPoint jp) {
      s_joinPoints.add(jp);
  }
 
  public static void main(String[] args) {
    junit.textui.TestRunner.run(WithincodeClinitTest.class);
  }

    public static junit.framework.Test suite() {
        return new junit.framework.TestSuite(WithincodeClinitTest.class);
    }


}
TOP

Related Classes of test.withincode.WithincodeClinitTest

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.