summaryrefslogtreecommitdiffstats
path: root/weaver/testsrc
diff options
context:
space:
mode:
authoracolyer <acolyer>2005-12-13 15:52:47 +0000
committeracolyer <acolyer>2005-12-13 15:52:47 +0000
commitdba2ee75f6cf5ee6de9462cb38a669bb488f2257 (patch)
tree6db002f38308df10a14d6c0de2c8caeff18fb934 /weaver/testsrc
parent9d32b76c9b48e6a2593bff77dc120eb8c5f17cff (diff)
downloadaspectj-dba2ee75f6cf5ee6de9462cb38a669bb488f2257.tar.gz
aspectj-dba2ee75f6cf5ee6de9462cb38a669bb488f2257.zip
permit extensions to pointcut designator set when using weaver tools API
Diffstat (limited to 'weaver/testsrc')
-rw-r--r--weaver/testsrc/org/aspectj/weaver/tools/PointcutDesignatorHandlerTests.java142
-rw-r--r--weaver/testsrc/org/aspectj/weaver/tools/ToolsTests.java1
2 files changed, 143 insertions, 0 deletions
diff --git a/weaver/testsrc/org/aspectj/weaver/tools/PointcutDesignatorHandlerTests.java b/weaver/testsrc/org/aspectj/weaver/tools/PointcutDesignatorHandlerTests.java
new file mode 100644
index 000000000..e26fe73d3
--- /dev/null
+++ b/weaver/testsrc/org/aspectj/weaver/tools/PointcutDesignatorHandlerTests.java
@@ -0,0 +1,142 @@
+/* *******************************************************************
+ * Copyright (c) 2005 Contributors.
+ * All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Adrian Colyer Initial implementation
+ * ******************************************************************/
+package org.aspectj.weaver.tools;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Adrian
+ *
+ */
+public class PointcutDesignatorHandlerTests extends TestCase {
+
+ public void testParseWithoutHandler() {
+ try {
+ PointcutParser
+ .getPointcutParserSupportingAllPrimitivesAndUsingContextClassloaderForResolution()
+ .parsePointcutExpression("bean(service.*");
+ fail("should not be able to parse bean(service.*)");
+ } catch(IllegalArgumentException ex) {
+ assertTrue("contains bean",ex.getMessage().contains("bean"));
+ }
+ }
+
+ public void testParseWithHandler() {
+ PointcutParser parser = PointcutParser.getPointcutParserSupportingAllPrimitivesAndUsingContextClassloaderForResolution();
+ BeanDesignatorHandler beanHandler = new BeanDesignatorHandler();
+ parser.registerPointcutDesignatorHandler(beanHandler);
+ parser.parsePointcutExpression("bean(service.*)");
+ assertEquals("service.*",beanHandler.getExpressionLastAskedToParse());
+ }
+
+ public void testStaticMatch() throws Exception {
+ PointcutParser parser = PointcutParser.getPointcutParserSupportingAllPrimitivesAndUsingContextClassloaderForResolution();
+ BeanDesignatorHandler beanHandler = new BeanDesignatorHandler();
+ parser.registerPointcutDesignatorHandler(beanHandler);
+ PointcutExpression pc = parser.parsePointcutExpression("bean(myBean)");
+ DefaultMatchingContext context = new DefaultMatchingContext();
+ context.addContextBinding("beanName","myBean");
+ pc.setMatchingContext(context);
+ ShadowMatch sm = pc.matchesMethodExecution(Object.class.getMethod("toString",new Class[0]));
+ assertTrue(sm.alwaysMatches());
+ context.addContextBinding("beanName", "notMyBean");
+ sm = pc.matchesMethodExecution(Object.class.getMethod("toString",new Class[0]));
+ assertTrue(sm.neverMatches());
+ }
+
+ public void testDynamicMatch() throws Exception {
+ PointcutParser parser = PointcutParser.getPointcutParserSupportingAllPrimitivesAndUsingContextClassloaderForResolution();
+ BeanDesignatorHandler beanHandler = new BeanDesignatorHandler();
+ beanHandler.simulateDynamicTest = true;
+ parser.registerPointcutDesignatorHandler(beanHandler);
+ PointcutExpression pc = parser.parsePointcutExpression("bean(myBean)");
+ ShadowMatch sm = pc.matchesMethodExecution(Object.class.getMethod("toString",new Class[0]));
+ DefaultMatchingContext context = new DefaultMatchingContext();
+ assertTrue(sm.maybeMatches());
+ assertFalse(sm.alwaysMatches());
+ assertFalse(sm.neverMatches());
+ context.addContextBinding("beanName","myBean");
+ sm.setMatchingContext(context);
+ assertTrue(sm.matchesJoinPoint(null, null, null).matches());
+ context.addContextBinding("beanName", "notMyBean");
+ assertFalse(sm.matchesJoinPoint(null, null, null).matches());
+ }
+
+
+
+ private class BeanDesignatorHandler implements PointcutDesignatorHandler {
+
+ private String askedToParse;
+ public boolean simulateDynamicTest = false;
+
+ public String getDesignatorName() {
+ return "bean";
+ }
+
+ /* (non-Javadoc)
+ * @see org.aspectj.weaver.tools.PointcutDesignatorHandler#parse(java.lang.String)
+ */
+ public ContextBasedMatcher parse(String expression) {
+ this.askedToParse = expression;
+ return new BeanPointcutExpression(expression,this.simulateDynamicTest);
+ }
+
+ public String getExpressionLastAskedToParse() {
+ return this.askedToParse;
+ }
+ }
+
+ private class BeanPointcutExpression implements ContextBasedMatcher {
+
+ private final String beanNamePattern;
+ private final boolean simulateDynamicTest;
+
+ public BeanPointcutExpression(String beanNamePattern, boolean simulateDynamicTest) {
+ this.beanNamePattern = beanNamePattern;
+ this.simulateDynamicTest = simulateDynamicTest;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.aspectj.weaver.tools.ContextBasedMatcher#couldMatchJoinPointsInType(java.lang.Class)
+ */
+ public boolean couldMatchJoinPointsInType(Class aClass) {
+ return true;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.aspectj.weaver.tools.ContextBasedMatcher#mayNeedDynamicTest()
+ */
+ public boolean mayNeedDynamicTest() {
+ return this.simulateDynamicTest;
+ }
+
+
+ public FuzzyBoolean matchesStatically(MatchingContext matchContext) {
+ if (this.simulateDynamicTest) return FuzzyBoolean.MAYBE;
+ if (this.beanNamePattern.equals(matchContext.getBinding("beanName"))) {
+ return FuzzyBoolean.YES;
+ } else {
+ return FuzzyBoolean.NO;
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.aspectj.weaver.tools.ContextBasedMatcher#matchesDynamically(org.aspectj.weaver.tools.MatchingContext)
+ */
+ public boolean matchesDynamically(MatchingContext matchContext) {
+ return this.beanNamePattern.equals(matchContext.getBinding("beanName"));
+ }
+ }
+} \ No newline at end of file
diff --git a/weaver/testsrc/org/aspectj/weaver/tools/ToolsTests.java b/weaver/testsrc/org/aspectj/weaver/tools/ToolsTests.java
index aa91c9f65..f98303ad5 100644
--- a/weaver/testsrc/org/aspectj/weaver/tools/ToolsTests.java
+++ b/weaver/testsrc/org/aspectj/weaver/tools/ToolsTests.java
@@ -20,6 +20,7 @@ public class ToolsTests {
suite.addTestSuite(PointcutParserTest.class);
suite.addTestSuite(PointcutExpressionTest.class);
suite.addTestSuite(TypePatternMatcherTest.class);
+ suite.addTestSuite(PointcutDesignatorHandlerTests.class);
//$JUnit-END$
return suite;
}