/************************************************************************************** * 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 org.codehaus.aspectwerkz.annotation.Mixin; /** * @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> */ public class MixinTest extends TestCase { @AnnotatedMethod public void iHaveAnnotatedMethod() {} public void testIntroduced() { assertTrue(this instanceof Counter); assertEquals(1, ((Counter)this).getCounter()); assertEquals(2, ((Counter)this).getCounter()); // we have perInstance MixinTest another = new MixinTest(); assertEquals(1, ((Counter)another).getCounter()); } public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } public static junit.framework.Test suite() { return new junit.framework.TestSuite(MixinTest.class); } static interface Counter { int getCounter(); } @Mixin("hasmethod(@test.MixinTest$AnnotatedMethod * test.Mixin*.*(..))") public static class CounterImpl implements Counter { int i = 0; public int getCounter() { return ++i; } } public static @interface AnnotatedMethod {} }