/************************************************************************************** * 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; /** * @author <a href="mailto:jboner@codehaus.org">Jonas Bon�r </a> */ public class FieldAdviceTest extends TestCase { private static String s_logString = ""; private static long s_setStaticFieldAroundAdviced = 0L; private static int s_setStaticFieldPreAdviced = 0; private static String s_setStaticFieldPostAdviced = "string"; private static double s_setStaticFieldPrePostAdviced = 0.000D; private static long s_getStaticFieldAroundAdviced = 1L; private static int s_getStaticFieldPreAdviced = 1; private static String s_getStaticFieldPostAdviced = "string"; private static double s_getStaticFieldPrePostAdviced = 1.1111D; private long m_setFieldAroundAdviced = 0L; private int m_setFieldAroundAdvicedWithNullAdvice = 0; private String m_setFieldAroundAdvicedObjectWithNullAdvice = new String("0"); private String m_setFieldAroundAdvicedObjectWithAPI = new String("0"); private int m_setFieldAroundAdvicedWithAPI = 0; private int m_setFieldPreAdviced = 0; private String m_setFieldPostAdviced = "string"; private double m_setFieldPrePostAdviced = 0.000D; private long m_getFieldAroundAdviced = 1L; private String m_getFieldAroundAdvicedWithNullAdvice = "string"; private double m_getFieldPreAdviced = 1.0000D; private int m_getFieldPostAdviced = 1; private int m_getFieldPrePostAdviced = 1; public FieldAdviceTest() { } public FieldAdviceTest(String name) { super(name); } public void testSetMemberFieldAroundAdviced() { s_logString = ""; try { setFieldAroundAdviced(); assertEquals("before after ", s_logString); assertEquals(187, m_setFieldAroundAdviced); } catch (Exception e) { fail(); } } public void testSetMemberFieldAroundAdvicedWithNullAdvice() { s_logString = ""; try { setFieldAroundAdvicedWithNullAdvice(); assertEquals("before after ", s_logString); //CAUTION: null advice for @Set leave the assigned value //The advice return value is ignored assertEquals(187, m_setFieldAroundAdvicedWithNullAdvice); } catch (Exception e) { fail(); } } public void testSetMemberFieldAroundAdvicedObjectWithNullAdvice() { s_logString = ""; try { setFieldAroundAdvicedObjectWithNullAdvice(); assertEquals("before after ", s_logString); //CAUTION: null advice for @Set leave the assigned value //The advice return value is ignored assertEquals("1", m_setFieldAroundAdvicedObjectWithNullAdvice); } catch (Exception e) { fail(); } } //FIXME - activate when proceed(args) will be supported // public void testSetMemberFieldAroundAdvicedObjectWithAPI() { // s_logString = ""; // try { // setFieldAroundAdvicedObjectWithAPI(); // assertEquals("before after ", s_logString); // // //The advice is using the Signature API to alter the assigned value // assertEquals("byAdvice", m_setFieldAroundAdvicedObjectWithAPI); // } catch (Exception e) { // fail(); // } // } // // public void testSetMemberFieldAroundAdvicedWithAPI() { // s_logString = ""; // try { // setFieldAroundAdvicedWithAPI(); // assertEquals("before after ", s_logString); // // //The advice is using the Signature API to alter the assigned value // assertEquals(3, m_setFieldAroundAdvicedWithAPI); // } catch (Exception e) { // fail(); // } // } public void testGetMemberFieldAroundAdviced() { s_logString = ""; try { long i = getFieldAroundAdviced(); // int default value assertEquals("before after ", s_logString); assertEquals(1L, i); } catch (Exception e) { fail(); } } public void testGetMemberFieldAroundAdvicedWithNullAdvice() { s_logString = ""; try { String i = getFieldAroundAdvicedWithNullAdvice(); assertEquals("before after ", s_logString); assertEquals(null, i); } catch (Exception e) { fail(); } } public void testSetFieldPreAdviced() { s_logString = ""; try { setFieldPreAdviced(); assertEquals("pre1 pre2 ", s_logString); } catch (Exception e) { fail(); } } public void testSetFieldPostAdviced() { s_logString = ""; try { setFieldPostAdviced(); assertEquals("post2 post1 ", s_logString); } catch (Exception e) { fail(); } } public void testSetFieldPrePostAdviced() { s_logString = ""; try { setFieldPrePostAdviced(); assertEquals("pre1 pre2 post2 post1 ", s_logString); } catch (Exception e) { fail(); } } public void testGetFieldPreAdviced() { s_logString = ""; try { getFieldPreAdviced(); assertEquals("pre1 pre2 ", s_logString); } catch (Exception e) { e.printStackTrace(); fail(); } } public void testGetFieldPostAdviced() { s_logString = ""; try { getFieldPostAdviced(); assertEquals("post2 post1 ", s_logString); } catch (Exception e) { fail(); } } public void testGetFieldPrePostAdviced() { s_logString = ""; try { getFieldPrePostAdviced(); assertEquals("pre1 pre2 post2 post1 ", s_logString); } catch (Exception e) { fail(); } } public void testSetStaticFieldAroundAdviced() { s_logString = ""; try { setStaticFieldAroundAdviced(); assertEquals("before after ", s_logString); assertEquals(3, s_setStaticFieldAroundAdviced); } catch (Exception e) { fail(); } } public void testGetStaticFieldAroundAdviced() { s_logString = ""; try { long i = getStaticFieldAroundAdviced(); assertEquals("before after ", s_logString); assertEquals(1L, i); } catch (Exception e) { fail(); } } public void testSetStaticFieldPreAdviced() { s_logString = ""; try { setStaticFieldPreAdviced(); assertEquals("pre1 pre2 ", s_logString); } catch (Exception e) { fail(); } } public void testSetStaticFieldPostAdviced() { s_logString = ""; try { setStaticFieldPostAdviced(); assertEquals("post2 post1 ", s_logString); } catch (Exception e) { fail(); } } public void testSetStaticFieldPrePostAdviced() { s_logString = ""; try { setStaticFieldPrePostAdviced(); assertEquals("pre1 pre2 post2 post1 ", s_logString); } catch (Exception e) { fail(); } } public void testGetStaticFieldPreAdviced() { s_logString = ""; try { getStaticFieldPreAdviced(); assertEquals("pre1 pre2 ", s_logString); } catch (Exception e) { fail(); } } public void testGetStaticFieldPostAdviced() { s_logString = ""; try { getStaticFieldPostAdviced(); assertEquals("post2 post1 ", s_logString); } catch (Exception e) { fail(); } } public void testStaticGetFieldPrePostAdviced() { s_logString = ""; try { getStaticFieldPrePostAdviced(); assertEquals("pre1 pre2 post2 post1 ", s_logString); } catch (Exception e) { fail(); } } public void testPublicFieldOutOfWeaverScope() { s_logString = ""; PrintStream out = System.out;//field get(* java.lang.System) && withincode .. PrintStream err = System.err; assertEquals("adviceOnPublicField ", s_logString); } public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } public static junit.framework.Test suite() { return new junit.framework.TestSuite(FieldAdviceTest.class); } // ==== methods to test ==== public static void log(final String wasHere) { s_logString += wasHere; } public void setFieldAroundAdviced() { m_setFieldAroundAdviced = 3 + (23 * 8); } public void setFieldAroundAdvicedWithNullAdvice() { m_setFieldAroundAdvicedWithNullAdvice = 3 + (23 * 8); } public void setFieldAroundAdvicedObjectWithNullAdvice() { m_setFieldAroundAdvicedObjectWithNullAdvice = new String("1"); } public void setFieldAroundAdvicedObjectWithAPI() { m_setFieldAroundAdvicedObjectWithAPI = new String("original"); } public void setFieldAroundAdvicedWithAPI() { m_setFieldAroundAdvicedWithAPI = 2; } public void setFieldPreAdviced() { m_setFieldPreAdviced = 3 + (23 * 8); } public void setFieldPostAdviced() { m_setFieldPostAdviced = "asdf"; } public void setFieldPrePostAdviced() { m_setFieldPrePostAdviced = 3; } public long getFieldAroundAdviced() { return m_getFieldAroundAdviced; } public String getFieldAroundAdvicedWithNullAdvice() { return m_getFieldAroundAdvicedWithNullAdvice; } public double getFieldPreAdviced() { return m_getFieldPreAdviced; } public int getFieldPostAdviced() { return m_getFieldPostAdviced; } public int getFieldPrePostAdviced() { return m_getFieldPrePostAdviced; } public static void setStaticFieldAroundAdviced() { s_setStaticFieldAroundAdviced = 3; } public static void setStaticFieldPreAdviced() { s_setStaticFieldPreAdviced = 3; } public static void setStaticFieldPostAdviced() { s_setStaticFieldPostAdviced = "asdf"; } public static void setStaticFieldPrePostAdviced() { s_setStaticFieldPrePostAdviced = 3; } public static long getStaticFieldAroundAdviced() { return s_getStaticFieldAroundAdviced; } public static int getStaticFieldPreAdviced() { return s_getStaticFieldPreAdviced; } public static String getStaticFieldPostAdviced() { return s_getStaticFieldPostAdviced; } public static double getStaticFieldPrePostAdviced() { return s_getStaticFieldPrePostAdviced; } }