/**************************************************************************************
* 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;
import junit.framework.TestCase;
import java.io.PrintStream;
import org.codehaus.aspectwerkz.annotation.Before;
import org.codehaus.aspectwerkz.joinpoint.StaticJoinPoint;
/**
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a>
*/
public class FieldGetOutOfWeaver extends TestCase {
static String s_log = "";
public void testSystemGet() {
s_log = "";
PrintStream out = System.out;
out = Foo.out;// match as well
assertEquals("advice advice ", s_log);
}
public void testSystemGetOutsideCode() {
s_log = "";
PrintStream out = System.out;
out = Foo.out;
assertEquals("", s_log);
}
public void testSystemGetTyped() {
s_log = "";
PrintStream out = System.out;
out = Foo.out;
assertEquals("adviceTyped ", s_log);
}
public void testSystemGetPatternedTyped() {
s_log = "";
PrintStream out = System.out;
out = Foo.out;
assertEquals("advicePatternedTyped ", s_log);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
public static junit.framework.Test suite() {
return new junit.framework.TestSuite(FieldGetOutOfWeaver.class);
}
public static class Foo {
public static PrintStream out;
}
public static class Aspect {
@Before("get(* out) && withincode(* test.FieldGetOutOfWeaver.testSystemGet(..))")
void before(StaticJoinPoint sjp) {
FieldGetOutOfWeaver.s_log += "advice ";
}
@Before("get(* java.lang.System.out) && withincode(* test.FieldGetOutOfWeaver.testSystemGetTyped(..))")
void beforeTyped() {
FieldGetOutOfWeaver.s_log += "adviceTyped ";
}
@Before("get(* java.lang.*.out) && withincode(* test.FieldGetOutOfWeaver.testSystemGetPatternedTyped(..))")
void beforePatternedTyped() {
FieldGetOutOfWeaver.s_log += "advicePatternedTyped ";
}
}
}