1   /***************************************************************************************
2    * Copyright (c) Jonas Bonér, Alexandre Vasseur. All rights reserved.                 *
3    * http://aspectwerkz.codehaus.org                                                    *
4    * ---------------------------------------------------------------------------------- *
5    * The software in this package is published under the terms of the LGPL license      *
6    * a copy of which has been included with this distribution in the license.txt file.  *
7    **************************************************************************************/
8   package test;
9   
10  import junit.framework.TestCase;
11  
12  /***
13   * @author <a href="mailto:jboner@codehaus.org">Jonas Bonér </a>
14   */
15  public class FieldAdviceTest extends TestCase {
16      private static String s_logString = "";
17  
18      private static int s_setStaticFieldAroundAdviced = 0;
19  
20      private static int s_setStaticFieldPreAdviced = 0;
21  
22      private static int s_setStaticFieldPostAdviced = 0;
23  
24      private static int s_setStaticFieldPrePostAdviced = 0;
25  
26      private static int s_getStaticFieldAroundAdviced = 1;
27  
28      private static int s_getStaticFieldPreAdviced = 1;
29  
30      private static int s_getStaticFieldPostAdviced = 1;
31  
32      private static int s_getStaticFieldPrePostAdviced = 1;
33  
34      private int m_setFieldAroundAdviced = 0;
35  
36      private int m_setFieldAroundAdvicedWithNullAdvice = 0;
37  
38      private String m_setFieldAroundAdvicedObjectWithNullAdvice = new String("0");
39  
40      private String m_setFieldAroundAdvicedObjectWithAPI = new String("0");
41  
42      private int m_setFieldAroundAdvicedWithAPI = 0;
43  
44      private int m_setFieldPreAdviced = 0;
45  
46      private int m_setFieldPostAdviced = 0;
47  
48      private int m_setFieldPrePostAdviced = 0;
49  
50      private int m_getFieldAroundAdviced = 1;
51  
52      private int m_getFieldAroundAdvicedWithNullAdvice = 1;
53  
54      private int m_getFieldPreAdviced = 1;
55  
56      private int m_getFieldPostAdviced = 1;
57  
58      private int m_getFieldPrePostAdviced = 1;
59  
60      public FieldAdviceTest() {
61      }
62  
63      public FieldAdviceTest(String name) {
64          super(name);
65      }
66  
67      public void testSetMemberFieldAroundAdviced() {
68          s_logString = "";
69          try {
70              setFieldAroundAdviced();
71              assertEquals("before after ", s_logString);
72              assertEquals(187, m_setFieldAroundAdviced);
73          } catch (Exception e) {
74              fail();
75          }
76      }
77  
78      public void testSetMemberFieldAroundAdvicedWithNullAdvice() {
79          s_logString = "";
80          try {
81              setFieldAroundAdvicedWithNullAdvice();
82              assertEquals("before after ", s_logString);
83  
84              //CAUTION: null advice for @Set leave the assigned value
85              //The advice return value is ignored
86              assertEquals(187, m_setFieldAroundAdvicedWithNullAdvice);
87          } catch (Exception e) {
88              fail();
89          }
90      }
91  
92      public void testSetMemberFieldAroundAdvicedObjectWithNullAdvice() {
93          s_logString = "";
94          try {
95              setFieldAroundAdvicedObjectWithNullAdvice();
96              assertEquals("before after ", s_logString);
97  
98              //CAUTION: null advice for @Set leave the assigned value
99              //The advice return value is ignored
100             assertEquals("1", m_setFieldAroundAdvicedObjectWithNullAdvice);
101         } catch (Exception e) {
102             fail();
103         }
104     }
105 
106     public void testSetMemberFieldAroundAdvicedObjectWithAPI() {
107         s_logString = "";
108         try {
109             setFieldAroundAdvicedObjectWithAPI();
110             assertEquals("before after ", s_logString);
111 
112             //The advice is using the Signature API to alter the assigned value
113             assertEquals("byAdvice", m_setFieldAroundAdvicedObjectWithAPI);
114         } catch (Exception e) {
115             fail();
116         }
117     }
118 
119     public void testSetMemberFieldAroundAdvicedWithAPI() {
120         s_logString = "";
121         try {
122             setFieldAroundAdvicedWithAPI();
123             assertEquals("before after ", s_logString);
124 
125             //The advice is using the Signature API to alter the assigned value
126             assertEquals(3, m_setFieldAroundAdvicedWithAPI);
127         } catch (Exception e) {
128             fail();
129         }
130     }
131 
132     public void testGetMemberFieldAroundAdviced() {
133         s_logString = "";
134         try {
135             int i = getFieldAroundAdviced(); // int default value
136             assertEquals("before after ", s_logString);
137             assertEquals(1, i);
138         } catch (Exception e) {
139             fail();
140         }
141     }
142 
143     public void testGetMemberFieldAroundAdvicedWithNullAdvice() {
144         s_logString = "";
145         try {
146             int i = getFieldAroundAdvicedWithNullAdvice();
147             assertEquals("before after ", s_logString);
148             assertEquals(0, i);
149         } catch (Exception e) {
150             fail();
151         }
152     }
153 
154     public void testSetFieldPreAdviced() {
155         s_logString = "";
156         try {
157             setFieldPreAdviced();
158             assertEquals("pre1 pre2 ", s_logString);
159         } catch (Exception e) {
160             fail();
161         }
162     }
163 
164     public void testSetFieldPostAdviced() {
165         s_logString = "";
166         try {
167             setFieldPostAdviced();
168             assertEquals("post2 post1 ", s_logString);
169         } catch (Exception e) {
170             fail();
171         }
172     }
173 
174     public void testSetFieldPrePostAdviced() {
175         s_logString = "";
176         try {
177             setFieldPrePostAdviced();
178             assertEquals("pre1 pre2 post2 post1 ", s_logString);
179         } catch (Exception e) {
180             fail();
181         }
182     }
183 
184     public void testGetFieldPreAdviced() {
185         s_logString = "";
186         try {
187             getFieldPreAdviced();
188             assertEquals("pre1 pre2 ", s_logString);
189         } catch (Exception e) {
190             e.printStackTrace();
191             fail();
192         }
193     }
194 
195     public void testGetFieldPostAdviced() {
196         s_logString = "";
197         try {
198             getFieldPostAdviced();
199             assertEquals("post2 post1 ", s_logString);
200         } catch (Exception e) {
201             fail();
202         }
203     }
204 
205     public void testGetFieldPrePostAdviced() {
206         s_logString = "";
207         try {
208             getFieldPrePostAdviced();
209             assertEquals("pre1 pre2 post2 post1 ", s_logString);
210         } catch (Exception e) {
211             fail();
212         }
213     }
214 
215     public void testSetStaticFieldAroundAdviced() {
216         s_logString = "";
217         try {
218             setStaticFieldAroundAdviced();
219             assertEquals("before after ", s_logString);
220             assertEquals(3, s_setStaticFieldAroundAdviced);
221         } catch (Exception e) {
222             fail();
223         }
224     }
225 
226     public void testGetStaticFieldAroundAdviced() {
227         s_logString = "";
228         try {
229             int i = getStaticFieldAroundAdviced();
230             assertEquals("before after ", s_logString);
231             assertEquals(1, i);
232         } catch (Exception e) {
233             fail();
234         }
235     }
236 
237     public void testSetStaticFieldPreAdviced() {
238         s_logString = "";
239         try {
240             setStaticFieldPreAdviced();
241             assertEquals("pre1 pre2 ", s_logString);
242         } catch (Exception e) {
243             fail();
244         }
245     }
246 
247     public void testSetStaticFieldPostAdviced() {
248         s_logString = "";
249         try {
250             setStaticFieldPostAdviced();
251             assertEquals("post2 post1 ", s_logString);
252         } catch (Exception e) {
253             fail();
254         }
255     }
256 
257     public void testSetStaticFieldPrePostAdviced() {
258         s_logString = "";
259         try {
260             setStaticFieldPrePostAdviced();
261             assertEquals("pre1 pre2 post2 post1 ", s_logString);
262         } catch (Exception e) {
263             fail();
264         }
265     }
266 
267     public void testGetStaticFieldPreAdviced() {
268         s_logString = "";
269         try {
270             getStaticFieldPreAdviced();
271             assertEquals("pre1 pre2 ", s_logString);
272         } catch (Exception e) {
273             fail();
274         }
275     }
276 
277     public void testGetStaticFieldPostAdviced() {
278         s_logString = "";
279         try {
280             getStaticFieldPostAdviced();
281             assertEquals("post2 post1 ", s_logString);
282         } catch (Exception e) {
283             fail();
284         }
285     }
286 
287     public void testStaticGetFieldPrePostAdviced() {
288         s_logString = "";
289         try {
290             getStaticFieldPrePostAdviced();
291             assertEquals("pre1 pre2 post2 post1 ", s_logString);
292         } catch (Exception e) {
293             fail();
294         }
295     }
296 
297     public static void main(String[] args) {
298         junit.textui.TestRunner.run(suite());
299     }
300 
301     public static junit.framework.Test suite() {
302         return new junit.framework.TestSuite(FieldAdviceTest.class);
303     }
304 
305     // ==== methods to test ====
306     public static void log(final String wasHere) {
307         s_logString += wasHere;
308     }
309 
310     public void setFieldAroundAdviced() {
311         m_setFieldAroundAdviced = 3 + (23 * 8);
312     }
313 
314     public void setFieldAroundAdvicedWithNullAdvice() {
315         m_setFieldAroundAdvicedWithNullAdvice = 3 + (23 * 8);
316     }
317 
318     public void setFieldAroundAdvicedObjectWithNullAdvice() {
319         m_setFieldAroundAdvicedObjectWithNullAdvice = new String("1");
320     }
321 
322     public void setFieldAroundAdvicedObjectWithAPI() {
323         m_setFieldAroundAdvicedObjectWithAPI = new String("original");
324     }
325 
326     public void setFieldAroundAdvicedWithAPI() {
327         m_setFieldAroundAdvicedWithAPI = 2;
328     }
329 
330     public void setFieldPreAdviced() {
331         m_setFieldPreAdviced = 3 + (23 * 8);
332     }
333 
334     public void setFieldPostAdviced() {
335         m_setFieldPostAdviced = 3;
336     }
337 
338     public void setFieldPrePostAdviced() {
339         m_setFieldPrePostAdviced = 3;
340     }
341 
342     public int getFieldAroundAdviced() {
343         return m_getFieldAroundAdviced;
344     }
345 
346     public int getFieldAroundAdvicedWithNullAdvice() {
347         return m_getFieldAroundAdvicedWithNullAdvice;
348     }
349 
350     public int getFieldPreAdviced() {
351         return m_getFieldPreAdviced;
352     }
353 
354     public int getFieldPostAdviced() {
355         return m_getFieldPostAdviced;
356     }
357 
358     public int getFieldPrePostAdviced() {
359         return m_getFieldPrePostAdviced;
360     }
361 
362     public static void setStaticFieldAroundAdviced() {
363         s_setStaticFieldAroundAdviced = 3;
364     }
365 
366     public static void setStaticFieldPreAdviced() {
367         s_setStaticFieldPreAdviced = 3;
368     }
369 
370     public static void setStaticFieldPostAdviced() {
371         s_setStaticFieldPostAdviced = 3;
372     }
373 
374     public static void setStaticFieldPrePostAdviced() {
375         s_setStaticFieldPrePostAdviced = 3;
376     }
377 
378     public static int getStaticFieldAroundAdviced() {
379         return s_getStaticFieldAroundAdviced;
380     }
381 
382     public static int getStaticFieldPreAdviced() {
383         return s_getStaticFieldPreAdviced;
384     }
385 
386     public static int getStaticFieldPostAdviced() {
387         return s_getStaticFieldPostAdviced;
388     }
389 
390     public static int getStaticFieldPrePostAdviced() {
391         return s_getStaticFieldPrePostAdviced;
392     }
393 }