Package test.enclosingsjp

Source Code of test.enclosingsjp.EnclosingSJPTest

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

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import org.codehaus.aspectwerkz.joinpoint.ConstructorSignature;
import org.codehaus.aspectwerkz.joinpoint.EnclosingStaticJoinPoint;
import org.codehaus.aspectwerkz.joinpoint.MethodSignature;
import org.codehaus.aspectwerkz.joinpoint.Signature;
import org.codehaus.aspectwerkz.joinpoint.management.JoinPointType;

import junit.framework.TestCase;


public class EnclosingSJPTest extends TestCase {
  private static List s_enclosingStaticJPList = new ArrayList();
 
 
  /**
   * @see junit.framework.TestCase#setUp()
   */
  protected void setUp() throws Exception {
    s_enclosingStaticJPList.clear();
  }

  public static void registerEnclosingSJP(EnclosingStaticJoinPoint esjp) {
    s_enclosingStaticJPList.add(esjp);
  }
 
  public void testConstructorEnclosing() throws NoSuchMethodException {
    EnclosingTarget et = new EnclosingTarget();
   
    Class[] expectedSignaturesTypes = new Class[] {
        ConstructorSignature.class,
        ConstructorSignature.class,
        ConstructorSignature.class,
        ConstructorSignature.class,
        ConstructorSignature.class,
        ConstructorSignature.class,
        ConstructorSignature.class,
        ConstructorSignature.class
    };
   
    JoinPointType[] expectedJPTypes = new JoinPointType[] {
        JoinPointType.CONSTRUCTOR_EXECUTION,
        JoinPointType.CONSTRUCTOR_EXECUTION,
        JoinPointType.CONSTRUCTOR_EXECUTION,
        JoinPointType.CONSTRUCTOR_EXECUTION,
        JoinPointType.CONSTRUCTOR_EXECUTION,
        JoinPointType.CONSTRUCTOR_EXECUTION,
        JoinPointType.CONSTRUCTOR_EXECUTION,
        JoinPointType.CONSTRUCTOR_EXECUTION
    };
   
    check(expectedSignaturesTypes,
          expectedJPTypes,
          s_enclosingStaticJPList);
   
    Constructor ctor = et.getClass().getConstructor(new Class[0]);
   
    for(int i = 0; i < s_enclosingStaticJPList.size(); i++) {
      ConstructorSignature ctorSig =
        (ConstructorSignature) ((EnclosingStaticJoinPoint) s_enclosingStaticJPList.get(i)).getSignature();
     
      assertTrue("" + ctor.toString(),
          ctor.equals(ctorSig.getConstructor()));
    }
  }
 
  public void testHandlerEnclosing() throws NoSuchMethodException {
    try {
      throw new IllegalAccessException("msg1");
    } catch(IllegalAccessException iae) {
      ;
    }
   
    EnclosingTarget et = new EnclosingTarget(1);
   
    Class[] expectedSignaturesTypes = new Class[] {
        MethodSignature.class,
        MethodSignature.class,
        ConstructorSignature.class,
        ConstructorSignature.class
    };
   
    JoinPointType[] expectedJPTypes = new JoinPointType[] {
        JoinPointType.METHOD_EXECUTION,
        JoinPointType.METHOD_EXECUTION,
        JoinPointType.CONSTRUCTOR_EXECUTION,
        JoinPointType.CONSTRUCTOR_EXECUTION
    };
   
    check(expectedSignaturesTypes,
          expectedJPTypes,
          s_enclosingStaticJPList);
   
    Constructor ctor = et.getClass().getConstructor(new Class[] {int.class});
    Method    meth = getClass().getMethod("testHandlerEnclosing", null);

    assertTrue(
        meth.toString(),
        meth.equals(
        ((MethodSignature) ((EnclosingStaticJoinPoint) s_enclosingStaticJPList.get(0))
            .getSignature()).getMethod())
    );
    assertTrue(
        meth.toString(),
        meth.equals(
        ((MethodSignature) ((EnclosingStaticJoinPoint) s_enclosingStaticJPList.get(1))
            .getSignature()).getMethod())
    );
    assertTrue(
        ctor.toString(),
        ctor.equals(
        ((ConstructorSignature) ((EnclosingStaticJoinPoint) s_enclosingStaticJPList.get(2))
            .getSignature()).getConstructor())
    );
    assertTrue(
        ctor.toString(),
        ctor.equals(
              ((ConstructorSignature) ((EnclosingStaticJoinPoint) s_enclosingStaticJPList.get(3))
                  .getSignature()).getConstructor())
    );
  }
 
  public void testGetSet() throws NoSuchMethodException {
    EnclosingTarget et = new EnclosingTarget(new Object());
   
    Class[] expectedSignatureTypes = new Class[] {
        ConstructorSignature.class,
        ConstructorSignature.class,
        ConstructorSignature.class,
        MethodSignature.class,
        MethodSignature.class,
        MethodSignature.class,
        MethodSignature.class,
        MethodSignature.class,
        MethodSignature.class
    };
   
    JoinPointType[] expectedJPTypes = new JoinPointType[] {
        JoinPointType.CONSTRUCTOR_EXECUTION,
        JoinPointType.CONSTRUCTOR_EXECUTION,
        JoinPointType.CONSTRUCTOR_EXECUTION,
        JoinPointType.METHOD_EXECUTION,
        JoinPointType.METHOD_EXECUTION,
        JoinPointType.METHOD_EXECUTION,
        JoinPointType.METHOD_EXECUTION,
        JoinPointType.METHOD_EXECUTION,
        JoinPointType.METHOD_EXECUTION
    };
   
    check(expectedSignatureTypes,
        expectedJPTypes,
        s_enclosingStaticJPList);
   
    Constructor ctor = et.getClass().getConstructor(new Class[] {Object.class});
    Method setMethod = PointcutTarget.class.getMethod("setFieldValue", new Class[] {Object.class});
    Method getMethod = PointcutTarget.class.getMethod("getFieldValue", null);
   
    for(int i = 0; i < 3; i++) {
      EnclosingStaticJoinPoint esjp = (EnclosingStaticJoinPoint) s_enclosingStaticJPList.get(i);
      Constructor enclosingCtor = ((ConstructorSignature) esjp.getSignature()).getConstructor();
     
      assertTrue(
          ctor.toString(),
          ctor.equals(enclosingCtor));
    }
   
    for(int i = 3; i < 6; i++) {
      EnclosingStaticJoinPoint esjp = (EnclosingStaticJoinPoint) s_enclosingStaticJPList.get(i);
      Method method = ((MethodSignature) esjp.getSignature()).getMethod();
     
      assertTrue(
          setMethod.toString(),
          setMethod.equals(method));
    }
   
    for(int i = 6; i < s_enclosingStaticJPList.size(); i++) {
      EnclosingStaticJoinPoint esjp = (EnclosingStaticJoinPoint) s_enclosingStaticJPList.get(i);
      Method method = ((MethodSignature) esjp.getSignature()).getMethod();
     
      assertTrue(
          getMethod.toString(),
          getMethod.equals(method));
    }

  }
 
 
  public static void main(String[] args) {
    junit.textui.TestRunner.run(EnclosingSJPTest.class);
  }

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

  private void check(
      Class[] signatureClass,
      JoinPointType[] enclosingTypes,
      List esjpList) {
   
    assertEquals(enclosingTypes.length, esjpList.size());
   
    for(int i = 0; i < enclosingTypes.length; i++) {
      EnclosingStaticJoinPoint esjp = (EnclosingStaticJoinPoint) esjpList.get(i);
     
      assertNotNull("EnclosingStaticJoinPoint should never be null", esjp);
     
      assertNotNull("Signature should not be null", esjp.getSignature());
         
      Signature sig = esjp.getSignature();
     
      if(sig instanceof ConstructorSignature) {
        assertNotNull(((ConstructorSignature) sig).getConstructor());
      } else if(sig instanceof MethodSignature) {
        assertNotNull(((MethodSignature) sig).getMethod());
      } else {
        fail("unexpected signature type: " + sig.getClass().getName());
      }
     
      assertEquals("expectation on enclosing JP type failed",
          enclosingTypes[i],
          esjp.getType());
     
      assertTrue("expectation on enclosing Signature class failed",
          (signatureClass[i].isAssignableFrom(esjp.getSignature().getClass())));

    }
  }
}
TOP

Related Classes of test.enclosingsjp.EnclosingSJPTest

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.