diff options
author | acolyer <acolyer> | 2004-06-08 15:05:10 +0000 |
---|---|---|
committer | acolyer <acolyer> | 2004-06-08 15:05:10 +0000 |
commit | cf8974d359278832b73d10890eca625f485acb5c (patch) | |
tree | 44a18d6f4caf01e335930978806e2a69740cc5ca | |
parent | cc06e1423e24c178b809cdc62ec3a73dd41bdfb2 (diff) | |
download | aspectj-cf8974d359278832b73d10890eca625f485acb5c.tar.gz aspectj-cf8974d359278832b73d10890eca625f485acb5c.zip |
additional test cases to cover matching Pointcuts against
JoinPoints
9 files changed, 509 insertions, 0 deletions
diff --git a/weaver/testsrc/org/aspectj/weaver/patterns/AndOrNotTestCase.java b/weaver/testsrc/org/aspectj/weaver/patterns/AndOrNotTestCase.java index 26d8e1207..45f9b59d5 100644 --- a/weaver/testsrc/org/aspectj/weaver/patterns/AndOrNotTestCase.java +++ b/weaver/testsrc/org/aspectj/weaver/patterns/AndOrNotTestCase.java @@ -15,6 +15,10 @@ package org.aspectj.weaver.patterns; import java.io.*; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.runtime.reflect.Factory; +import org.aspectj.util.FuzzyBoolean; import org.aspectj.weaver.bcel.*; import junit.framework.TestCase; @@ -65,6 +69,31 @@ public class AndOrNotTestCase extends TestCase { checkEquals("!!this(Foo)", new NotPointcut(new NotPointcut(foo))); } + + public void testJoinPointMatch() { + Pointcut foo = makePointcut("this(org.aspectj.weaver.patterns.AndOrNotTestCase.Foo)").resolve(); + Pointcut bar = makePointcut("this(org.aspectj.weaver.patterns.AndOrNotTestCase.Bar)").resolve(); + Pointcut c = makePointcut("this(org.aspectj.weaver.patterns.AndOrNotTestCase.C)").resolve(); + + Factory f = new Factory("AndOrNotTestCase.java",AndOrNotTestCase.class); + + Signature methodSig = f.makeMethodSig("void aMethod()"); + JoinPoint.StaticPart jpsp = f.makeSJP(JoinPoint.METHOD_EXECUTION,methodSig,1); + JoinPoint jp = Factory.makeJP(jpsp,new Foo(),new Foo()); + + checkMatches(new AndPointcut(foo,bar),jp,null,FuzzyBoolean.NO); + checkMatches(new AndPointcut(foo,foo),jp,null,FuzzyBoolean.YES); + checkMatches(new AndPointcut(bar,foo),jp,null,FuzzyBoolean.NO); + checkMatches(new AndPointcut(bar,c),jp,null,FuzzyBoolean.NO); + + checkMatches(new OrPointcut(foo,bar),jp,null,FuzzyBoolean.YES); + checkMatches(new OrPointcut(foo,foo),jp,null,FuzzyBoolean.YES); + checkMatches(new OrPointcut(bar,foo),jp,null,FuzzyBoolean.YES); + checkMatches(new OrPointcut(bar,c),jp,null,FuzzyBoolean.NO); + + checkMatches(new NotPointcut(foo),jp,null,FuzzyBoolean.NO); + checkMatches(new NotPointcut(bar),jp,null,FuzzyBoolean.YES); + } private Pointcut makePointcut(String pattern) { return new PatternParser(pattern).parsePointcut(); @@ -75,6 +104,9 @@ public class AndOrNotTestCase extends TestCase { checkSerialization(pattern); } + private void checkMatches(Pointcut p, JoinPoint jp, JoinPoint.StaticPart jpsp, FuzzyBoolean expected) { + assertEquals(expected,p.match(jp,jpsp)); + } // private void checkMatch(Pointcut p, Signature[] matches, boolean shouldMatch) { // for (int i=0; i<matches.length; i++) { @@ -116,4 +148,8 @@ public class AndOrNotTestCase extends TestCase { assertEquals("write/read", p, newP); } + private static class Foo{}; + private static class Bar{}; + private static class C{}; + } diff --git a/weaver/testsrc/org/aspectj/weaver/patterns/ArgsTestCase.java b/weaver/testsrc/org/aspectj/weaver/patterns/ArgsTestCase.java new file mode 100644 index 000000000..92c27f05e --- /dev/null +++ b/weaver/testsrc/org/aspectj/weaver/patterns/ArgsTestCase.java @@ -0,0 +1,91 @@ +/******************************************************************************* + * Copyright (c) 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.aspectj.weaver.patterns; + +import junit.framework.TestCase; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.runtime.reflect.Factory; +import org.aspectj.util.FuzzyBoolean; + +/** + * @author colyer + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +public class ArgsTestCase extends TestCase { + + Pointcut wildcardArgs; + Pointcut oneA; + Pointcut oneAandaC; + Pointcut BthenAnything; + Pointcut singleArg; + + public void testMatchJP() { + Factory f = new Factory("ArgsTestCase.java",ArgsTestCase.A.class); + + JoinPoint.StaticPart jpsp1 = f.makeSJP(JoinPoint.METHOD_EXECUTION,f.makeMethodSig(0,"aMethod",A.class,new Class[] {A.class},new String[] {"a"},new Class[] {},null) ,1); + JoinPoint.StaticPart jpsp2 = f.makeSJP(JoinPoint.METHOD_EXECUTION,f.makeMethodSig(0,"aMethod",A.class,new Class[] {B.class},new String[] {"b"},new Class[] {},null),1); + JoinPoint.StaticPart jpsp3 = f.makeSJP(JoinPoint.METHOD_EXECUTION,f.makeMethodSig(0,"aMethod",A.class,new Class[] {A.class,C.class},new String[] {"a","c"},new Class[] {},null),1); + JoinPoint.StaticPart jpsp4 = f.makeSJP(JoinPoint.METHOD_EXECUTION,f.makeMethodSig(0,"aMethod",A.class,new Class[] {A.class,A.class},new String[] {"a","a2"},new Class[] {},null),1); + JoinPoint oneAArg = Factory.makeJP(jpsp1,new A(),new A(),new A()); + JoinPoint oneBArg = Factory.makeJP(jpsp2,new A(), new A(), new B()); + JoinPoint acArgs = Factory.makeJP(jpsp3,new A(), new A(), new A(), new C()); + JoinPoint baArgs = Factory.makeJP(jpsp4,new A(), new A(), new B(), new A()); + + checkMatches(wildcardArgs,oneAArg,null,FuzzyBoolean.YES); + checkMatches(wildcardArgs,oneBArg,null,FuzzyBoolean.YES); + checkMatches(wildcardArgs,acArgs,null,FuzzyBoolean.YES); + checkMatches(wildcardArgs,baArgs,null,FuzzyBoolean.YES); + + checkMatches(oneA,oneAArg,null,FuzzyBoolean.YES); + checkMatches(oneA,oneBArg,null,FuzzyBoolean.YES); + checkMatches(oneA,acArgs,null,FuzzyBoolean.NO); + checkMatches(oneA,baArgs,null,FuzzyBoolean.NO); + + checkMatches(oneAandaC,oneAArg,null,FuzzyBoolean.NO); + checkMatches(oneAandaC,oneBArg,null,FuzzyBoolean.NO); + checkMatches(oneAandaC,acArgs,null,FuzzyBoolean.YES); + checkMatches(oneAandaC,baArgs,null,FuzzyBoolean.NO); + + checkMatches(BthenAnything,oneAArg,null,FuzzyBoolean.NO); + checkMatches(BthenAnything,oneBArg,null,FuzzyBoolean.YES); + checkMatches(BthenAnything,acArgs,null,FuzzyBoolean.NO); + checkMatches(BthenAnything,baArgs,null,FuzzyBoolean.YES); + + checkMatches(singleArg,oneAArg,null,FuzzyBoolean.YES); + checkMatches(singleArg,oneBArg,null,FuzzyBoolean.YES); + checkMatches(singleArg,acArgs,null,FuzzyBoolean.NO); + checkMatches(singleArg,baArgs,null,FuzzyBoolean.NO); + + } + + private void checkMatches(Pointcut p, JoinPoint jp, JoinPoint.StaticPart jpsp, FuzzyBoolean expected) { + assertEquals(expected,p.match(jp,jpsp)); + } + + private static class A {}; + private static class B extends A {}; + private static class C {}; + + /* (non-Javadoc) + * @see junit.framework.TestCase#setUp() + */ + protected void setUp() throws Exception { + super.setUp(); + wildcardArgs = new PatternParser("args(..)").parsePointcut().resolve(); + oneA = new PatternParser("args(org.aspectj.weaver.patterns.ArgsTestCase.A)").parsePointcut().resolve(); + oneAandaC = new PatternParser("args(org.aspectj.weaver.patterns.ArgsTestCase.A,org.aspectj.weaver.patterns.ArgsTestCase.C)").parsePointcut().resolve(); + BthenAnything = new PatternParser("args(org.aspectj.weaver.patterns.ArgsTestCase.B,..)").parsePointcut().resolve(); + singleArg = new PatternParser("args(*)").parsePointcut().resolve(); + } +} diff --git a/weaver/testsrc/org/aspectj/weaver/patterns/HandlerTestCase.java b/weaver/testsrc/org/aspectj/weaver/patterns/HandlerTestCase.java new file mode 100644 index 000000000..9238f8bc9 --- /dev/null +++ b/weaver/testsrc/org/aspectj/weaver/patterns/HandlerTestCase.java @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.aspectj.weaver.patterns; + +import java.io.IOException; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.runtime.reflect.Factory; +import org.aspectj.util.FuzzyBoolean; + +import junit.framework.TestCase; + + +public class HandlerTestCase extends TestCase { + + private Pointcut hEx; + private Pointcut hExPlus; + private Pointcut hIOEx; + + public void testHandlerMatch() { + Factory f = new Factory("HandlerTestCase.java",HandlerTestCase.class); + + JoinPoint.StaticPart jpsp1 = f.makeSJP(JoinPoint.EXCEPTION_HANDLER,f.makeCatchClauseSig(HandlerTestCase.class,Exception.class,"ex"),1); + JoinPoint ex = Factory.makeJP(jpsp1,this,this,new Exception()); + JoinPoint ioex = Factory.makeJP(jpsp1,this,this,new IOException()); + JoinPoint myex = Factory.makeJP(jpsp1,this,this,new MyException()); + + checkMatches(hEx,ex,null,FuzzyBoolean.YES); + checkMatches(hEx,ioex,null,FuzzyBoolean.NO); + checkMatches(hEx,myex,null,FuzzyBoolean.NO); + + checkMatches(hExPlus,ex,null,FuzzyBoolean.YES); + checkMatches(hExPlus,ioex,null,FuzzyBoolean.YES); + checkMatches(hExPlus,myex,null,FuzzyBoolean.YES); + + checkMatches(hIOEx,ex,null,FuzzyBoolean.NO); + checkMatches(hIOEx,ioex,null,FuzzyBoolean.YES); + checkMatches(hIOEx,myex,null,FuzzyBoolean.NO); + + } + + private void checkMatches(Pointcut p, JoinPoint jp, JoinPoint.StaticPart jpsp, FuzzyBoolean expected) { + assertEquals(expected,p.match(jp,jpsp)); + } + + private static class MyException extends Exception {} + + /* (non-Javadoc) + * @see junit.framework.TestCase#setUp() + */ + protected void setUp() throws Exception { + super.setUp(); + hEx = new PatternParser("handler(Exception)").parsePointcut().resolve(); + hExPlus = new PatternParser("handler(Exception+)").parsePointcut().resolve(); + hIOEx = new PatternParser("handler(java.io.IOException)").parsePointcut().resolve(); + } +} diff --git a/weaver/testsrc/org/aspectj/weaver/patterns/KindedTestCase.java b/weaver/testsrc/org/aspectj/weaver/patterns/KindedTestCase.java new file mode 100644 index 000000000..0da791619 --- /dev/null +++ b/weaver/testsrc/org/aspectj/weaver/patterns/KindedTestCase.java @@ -0,0 +1,102 @@ +/******************************************************************************* + * Copyright (c) 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.aspectj.weaver.patterns; + +import java.lang.reflect.Modifier; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.runtime.reflect.Factory; +import org.aspectj.util.FuzzyBoolean; + +import junit.framework.TestCase; + +/** + * @author colyer + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +public class KindedTestCase extends TestCase { + + Pointcut callpc; + Pointcut exepc; + Pointcut exepcplus; + Pointcut exepcCons; + Pointcut adviceexepc; + Pointcut initpc; + Pointcut preinitpc; + Pointcut staticinitpc; + Pointcut getpc; + Pointcut setpc; + + public void testKindedMatch() { + Factory f = new Factory("KindedTestCase.java",KindedTestCase.class); + + // JoinPoints to match against... + JoinPoint.StaticPart calljp1 = f.makeSJP(JoinPoint.METHOD_CALL,f.makeMethodSig(0,"main",Hello.class,new Class[] {String.class},new String[] {"s"},new Class[0],String.class),1); + JoinPoint.StaticPart calljp2 = f.makeSJP(JoinPoint.METHOD_CALL,f.makeMethodSig(0,"sayHi",Hello.class,new Class[] {String.class},new String[] {"s"},new Class[0],String.class),1); + JoinPoint.StaticPart exejp1 = f.makeSJP(JoinPoint.METHOD_EXECUTION,f.makeMethodSig(0,"main",Hello.class,new Class[] {String.class},new String[] {"s"},new Class[0],String.class),1); + JoinPoint.StaticPart exejp2 = f.makeSJP(JoinPoint.METHOD_EXECUTION,f.makeMethodSig(0,"sayHi",Hello.class,new Class[] {String.class},new String[] {"s"},new Class[0],void.class),1); + JoinPoint.StaticPart execonsjp1 = f.makeSJP(JoinPoint.CONSTRUCTOR_EXECUTION,f.makeConstructorSig(0,Hello.class,new Class[0],new String[0],new Class[0]),1); + JoinPoint.StaticPart execonsjp2 = f.makeSJP(JoinPoint.CONSTRUCTOR_EXECUTION,f.makeConstructorSig(0,String.class,new Class[] {String.class},new String[]{"s"},new Class[0]),1); + JoinPoint.StaticPart initjp1 = f.makeSJP(JoinPoint.INITIALIZATION,f.makeConstructorSig(0,Hello.class,new Class[0],new String[0],new Class[0]),1); + JoinPoint.StaticPart initjp2 = f.makeSJP(JoinPoint.PREINTIALIZATION,f.makeConstructorSig(0,Hello.class,new Class[]{int.class, int.class},new String[]{"a","b"},new Class[0]),1); + JoinPoint.StaticPart sinitjp1 = f.makeSJP(JoinPoint.STATICINITIALIZATION,f.makeInitializerSig(Modifier.STATIC,Hello.class),1); + JoinPoint.StaticPart sinitjp2 = f.makeSJP(JoinPoint.STATICINITIALIZATION,f.makeInitializerSig(Modifier.STATIC,String.class),1); + JoinPoint.StaticPart getjp1 = f.makeSJP(JoinPoint.FIELD_GET,f.makeFieldSig(0,"x",Hello.class,int.class),1); + JoinPoint.StaticPart getjp2 = f.makeSJP(JoinPoint.FIELD_GET,f.makeFieldSig(0,"y",String.class,String.class),1); + JoinPoint.StaticPart setjp1 = f.makeSJP(JoinPoint.FIELD_SET,f.makeFieldSig(0,"x",Hello.class,int.class),1); + JoinPoint.StaticPart setjp2 = f.makeSJP(JoinPoint.FIELD_SET,f.makeFieldSig(0,"y",String.class,String.class),1); + JoinPoint.StaticPart advjp = f.makeSJP(JoinPoint.ADVICE_EXECUTION,f.makeAdviceSig(0,"foo",Hello.class,new Class[0],new String[0],new Class[0],void.class),1); + + checkMatches(callpc,calljp1,FuzzyBoolean.YES); + checkMatches(callpc,calljp2,FuzzyBoolean.NO); + checkMatches(callpc,exejp1,FuzzyBoolean.NO); + checkMatches(exepc,exejp1,FuzzyBoolean.NO); + checkMatches(exepc,exejp2,FuzzyBoolean.YES); + checkMatches(exepcplus,exejp1,FuzzyBoolean.NO); + checkMatches(exepcplus,exejp2,FuzzyBoolean.YES); + checkMatches(exepcCons,execonsjp1,FuzzyBoolean.YES); + checkMatches(exepcCons,execonsjp2,FuzzyBoolean.NO); + checkMatches(exepcCons,exejp1,FuzzyBoolean.NO); + checkMatches(initpc,initjp1,FuzzyBoolean.YES); + checkMatches(initpc,initjp2,FuzzyBoolean.NO); + checkMatches(preinitpc,initjp1,FuzzyBoolean.NO); + checkMatches(preinitpc,initjp2,FuzzyBoolean.YES); + checkMatches(staticinitpc,sinitjp1,FuzzyBoolean.YES); + checkMatches(staticinitpc,sinitjp2,FuzzyBoolean.NO); + checkMatches(getpc,getjp1,FuzzyBoolean.YES); + checkMatches(getpc,getjp2,FuzzyBoolean.YES); + checkMatches(setpc,setjp1,FuzzyBoolean.YES); + checkMatches(setpc,setjp2,FuzzyBoolean.NO); + checkMatches(adviceexepc,advjp,FuzzyBoolean.YES); + } + + private void checkMatches(Pointcut p, JoinPoint.StaticPart jpsp, FuzzyBoolean expected) { + assertEquals(expected,p.match(jpsp)); + } + + protected void setUp() throws Exception { + super.setUp(); + callpc = new PatternParser("call(* main(..))").parsePointcut().resolve(); + exepc = new PatternParser("execution(void org.aspectj.weaver.patterns.KindedTestCase.Hello.sayHi(String))").parsePointcut().resolve(); + exepcplus = new PatternParser("execution(void Object+.sayHi(String))").parsePointcut().resolve(); + exepcCons = new PatternParser("execution(org.aspectj.weaver.patterns.KindedTestCase.Hello.new(..))").parsePointcut().resolve(); + initpc = new PatternParser("initialization(new(..))").parsePointcut().resolve(); + preinitpc = new PatternParser("preinitialization(*..H*.new(int,int))").parsePointcut().resolve(); + staticinitpc = new PatternParser("staticinitialization(org.aspectj.weaver.patterns.KindedTestCase.Hello)").parsePointcut().resolve(); + getpc = new PatternParser("get(* *)").parsePointcut().resolve(); + setpc = new PatternParser("set(int x)").parsePointcut().resolve(); + adviceexepc = new PatternParser("adviceexecution()").parsePointcut().resolve(); + } + + private static class Hello {}; +} diff --git a/weaver/testsrc/org/aspectj/weaver/patterns/PatternsTests.java b/weaver/testsrc/org/aspectj/weaver/patterns/PatternsTests.java index 9c0b672d7..c9f986d07 100644 --- a/weaver/testsrc/org/aspectj/weaver/patterns/PatternsTests.java +++ b/weaver/testsrc/org/aspectj/weaver/patterns/PatternsTests.java @@ -32,6 +32,11 @@ public class PatternsTests extends TestCase { suite.addTestSuite(TypePatternListTestCase.class); suite.addTestSuite(TypePatternTestCase.class); suite.addTestSuite(WithinTestCase.class); + suite.addTestSuite(PointcutTestCase.class); + suite.addTestSuite(ArgsTestCase.class); + suite.addTestSuite(HandlerTestCase.class); + suite.addTestSuite(KindedTestCase.class); + suite.addTestSuite(WithinCodeTestCase.class); //$JUnit-END$ return suite; } diff --git a/weaver/testsrc/org/aspectj/weaver/patterns/PointcutTestCase.java b/weaver/testsrc/org/aspectj/weaver/patterns/PointcutTestCase.java new file mode 100644 index 000000000..a640a07d5 --- /dev/null +++ b/weaver/testsrc/org/aspectj/weaver/patterns/PointcutTestCase.java @@ -0,0 +1,79 @@ +/******************************************************************************* + * Copyright (c) 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.aspectj.weaver.patterns; + +import java.io.DataOutputStream; +import java.io.IOException; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.runtime.reflect.Factory; +import org.aspectj.util.FuzzyBoolean; +import org.aspectj.weaver.IntMap; +import org.aspectj.weaver.ResolvedTypeX; +import org.aspectj.weaver.Shadow; +import org.aspectj.weaver.ast.Test; + +import junit.framework.TestCase; + + +public class PointcutTestCase extends TestCase { + + public void testMatchJP() { + Pointcut p = new Pointcut() { + + public FuzzyBoolean fastMatch(FastMatchInfo info) { + return null; + } + + public FuzzyBoolean match(Shadow shadow) { + return null; + } + + protected void resolveBindings(IScope scope, Bindings bindings) { + } + + protected void resolveBindingsFromRTTI() {} + + protected Pointcut concretize1(ResolvedTypeX inAspect, IntMap bindings) { + return null; + } + + public Test findResidue(Shadow shadow, ExposedState state) { + return null; + } + + public void write(DataOutputStream s) throws IOException { + }}; + + Factory f = new Factory("PointcutTestCase.java",PointcutTestCase.class); + + Signature methodSig = f.makeMethodSig("void aMethod()"); + JoinPoint.StaticPart jpsp = f.makeSJP(JoinPoint.METHOD_EXECUTION,methodSig,1); + JoinPoint jp = Factory.makeJP(jpsp,this,this); + + try { + p.match(jp,null); + fail("Expected UnsupportedOperationException to be thrown"); + } catch (UnsupportedOperationException unEx) { + // ok + } + + try { + p.match(jpsp); + fail("Expected UnsupportedOperationException to be thrown"); + } catch (UnsupportedOperationException unEx) { + // ok + } + + } + +} diff --git a/weaver/testsrc/org/aspectj/weaver/patterns/ThisOrTargetTestCase.java b/weaver/testsrc/org/aspectj/weaver/patterns/ThisOrTargetTestCase.java index da8f3eecb..31794bcfe 100644 --- a/weaver/testsrc/org/aspectj/weaver/patterns/ThisOrTargetTestCase.java +++ b/weaver/testsrc/org/aspectj/weaver/patterns/ThisOrTargetTestCase.java @@ -15,6 +15,9 @@ package org.aspectj.weaver.patterns; import java.io.*; +import org.aspectj.lang.JoinPoint; +import org.aspectj.runtime.reflect.Factory; +import org.aspectj.util.FuzzyBoolean; import org.aspectj.weaver.bcel.*; import junit.framework.TestCase; @@ -46,6 +49,46 @@ public class ThisOrTargetTestCase extends TestCase { } + + public void testMatchJP() { + Factory f = new Factory("ThisOrTargetTestCase.java",ThisOrTargetTestCase.class); + + Pointcut thisEx = new PatternParser("this(Exception)").parsePointcut().resolve(); + Pointcut thisIOEx = new PatternParser("this(java.io.IOException)").parsePointcut().resolve(); + + Pointcut targetEx = new PatternParser("target(Exception)").parsePointcut().resolve(); + Pointcut targetIOEx = new PatternParser("target(java.io.IOException)").parsePointcut().resolve(); + + JoinPoint.StaticPart jpsp1 = f.makeSJP(JoinPoint.EXCEPTION_HANDLER,f.makeCatchClauseSig(HandlerTestCase.class,Exception.class,"ex"),1); + JoinPoint thisExJP = Factory.makeJP(jpsp1,new Exception(),this); + JoinPoint thisIOExJP = Factory.makeJP(jpsp1,new IOException(),this); + JoinPoint targetExJP = Factory.makeJP(jpsp1,this,new Exception()); + JoinPoint targetIOExJP = Factory.makeJP(jpsp1,this,new IOException()); + + checkMatches(thisEx,thisExJP,null,FuzzyBoolean.YES); + checkMatches(thisIOEx,thisExJP,null,FuzzyBoolean.NO); + checkMatches(targetEx,thisExJP,null,FuzzyBoolean.NO); + checkMatches(targetIOEx,thisExJP,null,FuzzyBoolean.NO); + + checkMatches(thisEx,thisIOExJP,null,FuzzyBoolean.YES); + checkMatches(thisIOEx,thisIOExJP,null,FuzzyBoolean.YES); + checkMatches(targetEx,thisIOExJP,null,FuzzyBoolean.NO); + checkMatches(targetIOEx,thisIOExJP,null,FuzzyBoolean.NO); + + checkMatches(thisEx,targetExJP,null,FuzzyBoolean.NO); + checkMatches(thisIOEx,targetExJP,null,FuzzyBoolean.NO); + checkMatches(targetEx,targetExJP,null,FuzzyBoolean.YES); + checkMatches(targetIOEx,targetExJP,null,FuzzyBoolean.NO); + + checkMatches(thisEx,targetIOExJP,null,FuzzyBoolean.NO); + checkMatches(thisIOEx,targetIOExJP,null,FuzzyBoolean.NO); + checkMatches(targetEx,targetIOExJP,null,FuzzyBoolean.YES); + checkMatches(targetIOEx,targetIOExJP,null,FuzzyBoolean.YES); + } + + private void checkMatches(Pointcut p, JoinPoint jp, JoinPoint.StaticPart jpsp, FuzzyBoolean expected) { + assertEquals(expected,p.match(jp,jpsp)); + } // private Pointcut makePointcut(String pattern) { // return new PatternParser(pattern).parsePointcut(); diff --git a/weaver/testsrc/org/aspectj/weaver/patterns/WithinCodeTestCase.java b/weaver/testsrc/org/aspectj/weaver/patterns/WithinCodeTestCase.java new file mode 100644 index 000000000..1f81a0db3 --- /dev/null +++ b/weaver/testsrc/org/aspectj/weaver/patterns/WithinCodeTestCase.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.aspectj.weaver.patterns; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.runtime.reflect.Factory; +import org.aspectj.util.FuzzyBoolean; + +import junit.framework.TestCase; + + +public class WithinCodeTestCase extends TestCase { + Pointcut withinCode1; + Pointcut withinCode2; + Pointcut withinCode3; + + public void testMatchJP() { + Factory f = new Factory("WithinCodeTestCase.java",WithinCodeTestCase.class); + + // JoinPoints to match against... + JoinPoint.StaticPart exejp1 = f.makeSJP(JoinPoint.METHOD_EXECUTION,f.makeMethodSig(0,"toString",Object.class,new Class[] {},new String[] {},new Class[0],String.class),1); + JoinPoint.StaticPart exejp2 = f.makeSJP(JoinPoint.METHOD_EXECUTION,f.makeMethodSig(0,"sayHi",Hello.class,new Class[] {String.class},new String[] {"s"},new Class[0],void.class),1); + JoinPoint.StaticPart execonsjp1 = f.makeSJP(JoinPoint.CONSTRUCTOR_EXECUTION,f.makeConstructorSig(0,Object.class,new Class[0],new String[0],new Class[0]),1); + JoinPoint.StaticPart execonsjp2 = f.makeSJP(JoinPoint.CONSTRUCTOR_EXECUTION,f.makeConstructorSig(0,String.class,new Class[] {String.class},new String[]{"s"},new Class[0]),1); + + checkMatches(withinCode1,exejp1,FuzzyBoolean.YES); + checkMatches(withinCode1,exejp2,FuzzyBoolean.NO); + checkMatches(withinCode1,execonsjp1,FuzzyBoolean.NO); + checkMatches(withinCode1,execonsjp2,FuzzyBoolean.NO); + + checkMatches(withinCode2,exejp1,FuzzyBoolean.NO); + checkMatches(withinCode2,exejp2,FuzzyBoolean.NO); + checkMatches(withinCode2,execonsjp1,FuzzyBoolean.YES); + checkMatches(withinCode2,execonsjp2,FuzzyBoolean.YES); + + checkMatches(withinCode3,exejp1,FuzzyBoolean.NO); + checkMatches(withinCode3,exejp2,FuzzyBoolean.NO); + checkMatches(withinCode3,execonsjp1,FuzzyBoolean.NO); + checkMatches(withinCode3,execonsjp2,FuzzyBoolean.YES); + + } + + private void checkMatches(Pointcut p, JoinPoint.StaticPart jpsp, FuzzyBoolean expected) { + assertEquals(expected,p.match(null,jpsp)); + } + + protected void setUp() throws Exception { + super.setUp(); + withinCode1 = new PatternParser("withincode(String Object.toString())").parsePointcut().resolve(); + withinCode2 = new PatternParser("withincode(new(..))").parsePointcut().resolve(); + withinCode3 = new PatternParser("withincode(String.new(..))").parsePointcut().resolve(); + } + + private static class Hello {}; +} diff --git a/weaver/testsrc/org/aspectj/weaver/patterns/WithinTestCase.java b/weaver/testsrc/org/aspectj/weaver/patterns/WithinTestCase.java index d400288fc..18d0380ca 100644 --- a/weaver/testsrc/org/aspectj/weaver/patterns/WithinTestCase.java +++ b/weaver/testsrc/org/aspectj/weaver/patterns/WithinTestCase.java @@ -19,6 +19,8 @@ import junit.framework.TestCase; import org.aspectj.weaver.*; import org.aspectj.weaver.bcel.BcelWorld; +import org.aspectj.lang.JoinPoint; +import org.aspectj.runtime.reflect.Factory; import org.aspectj.util.FuzzyBoolean; public class WithinTestCase extends TestCase { @@ -67,6 +69,29 @@ public class WithinTestCase extends TestCase { } + + public void testMatchJP() { + Factory f = new Factory("WithinTestCase.java",WithinTestCase.class); + + JoinPoint.StaticPart inString = f.makeSJP(JoinPoint.CONSTRUCTOR_EXECUTION,f.makeConstructorSig(0,String.class,new Class[] {String.class},new String[]{"s"},new Class[0]),1); + JoinPoint.StaticPart inObject = f.makeSJP(JoinPoint.CONSTRUCTOR_EXECUTION,f.makeConstructorSig(0,Object.class,new Class[] {},new String[]{},new Class[0]),1); + + Pointcut withinString = new PatternParser("within(String)").parsePointcut().resolve(); + Pointcut withinObject = new PatternParser("within(Object)").parsePointcut().resolve(); + Pointcut withinObjectPlus = new PatternParser("within(Object+)").parsePointcut().resolve(); + + checkMatches(withinString,inString,FuzzyBoolean.YES); + checkMatches(withinString,inObject,FuzzyBoolean.NO); + checkMatches(withinObject,inString,FuzzyBoolean.NO); + checkMatches(withinObject,inObject, FuzzyBoolean.YES); + checkMatches(withinObjectPlus,inString,FuzzyBoolean.YES); + checkMatches(withinObjectPlus,inObject,FuzzyBoolean.YES); + } + + private void checkMatches(Pointcut p, JoinPoint.StaticPart jpsp, FuzzyBoolean expected) { + assertEquals(expected,p.match(null,jpsp)); + } + public Pointcut makePointcut(String pattern) { Pointcut pointcut0 = Pointcut.fromString(pattern); |