KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > ch > ethz > prose > filter > FieldSTest


1 // $Id: FieldSTest.java,v 1.2 2004/05/12 17:26:52 anicoara Exp $
2
// =====================================================================
3
//
4
// (history at end)
5
//
6

7 package ch.ethz.prose.filter;
8
9 // used packages
10
import java.lang.reflect.Modifier JavaDoc;
11
12 import junit.framework.*;
13 import ch.ethz.jvmai.FieldAccessJoinPoint;
14 import ch.ethz.prose.ProseSystem;
15 import ch.ethz.prose.engine.FieldAccessRequest;
16 import ch.ethz.prose.engine.JoinPointManager;
17
18 /**
19  * JUnit testcase for class ch.ethz.prose.crosscut.spec.Fields.
20  *
21  * @version $Revision: 1.2 $
22  * @author Gerard Roos
23  */

24 public class FieldSTest extends TestCase {
25
26       // fixture
27
// some example Fields
28
static class Single {
29         int anna;
30       }
31
32       static class Basket {
33         public boolean apple;
34         transient protected short pear;
35         long banana;
36         private float tea;
37       }
38
39       static public class Meal {
40         transient public long salad;
41         protected int steak;
42         float sauce;
43         private double scotch;
44       }
45
46
47
48       Basket pickNick;
49       Meal dinner;
50
51       // the requests
52
FieldAccessRequest annaRequest;
53       FieldAccessRequest appleRequest;
54       FieldAccessRequest bananaRequest;
55       FieldAccessRequest pearRequest;
56       FieldAccessRequest teaRequest;
57       FieldAccessRequest saladRequest;
58       FieldAccessRequest steakRequest;
59       FieldAccessRequest sauceRequest;
60       FieldAccessRequest scotchRequest;
61
62       /**
63        * Construct test with given name.
64        * @param name test name
65        */

66       public FieldSTest(String JavaDoc name) {
67         super(name);
68       }
69
70       /**
71        * Set up fixture.
72        */

73       protected void setUp() throws Exception JavaDoc {
74         ProseSystem.startup();
75
76         JoinPointManager jpm = ProseSystem.getAspectManager().getJoinPointManager();
77
78         pickNick = new Basket();
79         dinner = new Meal();
80
81         annaRequest = (FieldAccessRequest)jpm.createJoinPointRequest(FieldAccessJoinPoint.KIND,Single.class.getDeclaredField("anna") );
82         appleRequest = (FieldAccessRequest)jpm.createJoinPointRequest(FieldAccessJoinPoint.KIND,Basket.class.getDeclaredField("apple") );
83         bananaRequest = (FieldAccessRequest)jpm.createJoinPointRequest(FieldAccessJoinPoint.KIND,Basket.class.getDeclaredField("banana"));
84         pearRequest = (FieldAccessRequest)jpm.createJoinPointRequest(FieldAccessJoinPoint.KIND,Basket.class.getDeclaredField("pear") );
85         teaRequest = (FieldAccessRequest)jpm.createJoinPointRequest(FieldAccessJoinPoint.KIND,Basket.class.getDeclaredField("tea") );
86         saladRequest = (FieldAccessRequest)jpm.createJoinPointRequest(FieldAccessJoinPoint.KIND, Meal.class.getDeclaredField("salad") );
87         steakRequest = (FieldAccessRequest)jpm.createJoinPointRequest(FieldAccessJoinPoint.KIND, Meal.class.getDeclaredField("steak") );
88         sauceRequest = (FieldAccessRequest)jpm.createJoinPointRequest(FieldAccessJoinPoint.KIND, Meal.class.getDeclaredField("sauce") );
89         scotchRequest = (FieldAccessRequest)jpm.createJoinPointRequest(FieldAccessJoinPoint.KIND, Meal.class.getDeclaredField("scotch"));
90       }
91
92       protected void tearDown()
93         {
94           try
95            { ProseSystem.teardown(); }
96           catch (Exception JavaDoc e)
97            { Assert.fail("ProseSystem.teardown() failed"); }
98         }
99
100       public void testFieldSNamed() {
101         try
102           {
103         PointCutter wantsToDance = (Fields.named("anna"));
104         assertTrue("1", wantsToDance.isSpecialRequest(annaRequest));
105         assertTrue("2", ! wantsToDance.isSpecialRequest(appleRequest));
106
107         PointCutter dinnerReady = (Fields.named("s.*"));
108         assertTrue("3", dinnerReady.isSpecialRequest(saladRequest));
109         assertTrue("4", dinnerReady.isSpecialRequest(steakRequest));
110         assertTrue("5", dinnerReady.isSpecialRequest(sauceRequest));
111         assertTrue("6", dinnerReady.isSpecialRequest(scotchRequest));
112         assertTrue("7", ! dinnerReady.isSpecialRequest(annaRequest));
113
114         PointFilter danceOrDinner =
115           (wantsToDance).OR
116           (dinnerReady);
117         assertTrue("8", danceOrDinner.isSpecialRequest(annaRequest));
118         assertTrue("9", danceOrDinner.isSpecialRequest(saladRequest));
119         assertTrue("10", ! danceOrDinner.isSpecialRequest(appleRequest));
120
121         PointFilter noDinnerAndDance =
122           (wantsToDance).AND
123           (dinnerReady);
124         assertTrue("11", ! noDinnerAndDance.isSpecialRequest(annaRequest));
125         assertTrue("12", ! noDinnerAndDance.isSpecialRequest(steakRequest));
126           }
127         catch (RuntimeException JavaDoc wrongTest)
128           {
129         wrongTest.printStackTrace();
130         throw wrongTest;
131           }
132       }
133
134
135       public void testFieldsDeclared()
136         {
137           PointCutter publicFood = (Fields.withModifier(Modifier.PUBLIC));
138           assertTrue("1", publicFood.isSpecialRequest(appleRequest));
139           assertTrue("2", publicFood.isSpecialRequest(saladRequest));
140           assertTrue("3", ! publicFood.isSpecialRequest(pearRequest)); // not public
141
assertTrue("4", ! publicFood.isSpecialRequest(bananaRequest)); // not public
142
assertTrue("5", ! publicFood.isSpecialRequest(scotchRequest)); // not public
143

144           PointCutter transientFood = (Fields.withModifier(Modifier.TRANSIENT));
145           assertTrue("6", transientFood.isSpecialRequest(saladRequest));
146           assertTrue("7", ! transientFood.isSpecialRequest(appleRequest));
147
148           PointFilter transientPublicFood =
149         (publicFood).AND
150         (transientFood);
151           assertTrue("8", transientPublicFood.isSpecialRequest(saladRequest));
152           assertTrue("9", ! transientPublicFood.isSpecialRequest(appleRequest)); // not sync
153
assertTrue("10", ! transientPublicFood.isSpecialRequest(pearRequest)); // not public
154

155           PointFilter transientOrPublicFood =
156         (publicFood).OR
157         (transientFood);
158           assertTrue("11", transientOrPublicFood.isSpecialRequest(saladRequest));
159           assertTrue("12", transientOrPublicFood.isSpecialRequest(appleRequest));
160           assertTrue("13", transientOrPublicFood.isSpecialRequest(pearRequest));
161           // neither sync nor public:
162
assertTrue("14", ! transientOrPublicFood.isSpecialRequest(bananaRequest));
163         }
164
165       /**
166        * Test suite.
167        * @return test instance
168        */

169       public static Test suite() {
170         return new TestSuite(FieldSTest.class);
171       }
172
173 }
174
175
176 //======================================================================
177
//
178
// $Log: FieldSTest.java,v $
179
// Revision 1.2 2004/05/12 17:26:52 anicoara
180
// Adapt Junit tests to 3.8.1 version and the new package structure
181
//
182
// Revision 1.1.1.1 2003/07/02 15:30:43 apopovic
183
// Imported from ETH Zurich
184
//
185
// Revision 1.1 2003/05/05 14:03:00 popovici
186
// renaming from runes to prose
187
//
188
// Revision 1.14 2003/04/27 13:09:01 popovici
189
// Specializers renamed to PointCutter
190
//
191
// Revision 1.13 2003/04/26 18:51:43 popovici
192
// 1 Bug fix which lead to a refactoring step:
193
// 1. the bug: 'JoinPointRequests' used to write to a static list, which survived a startup/teardown;
194
// now this list belongs to the JoinPointManager;
195
// 2. the refactoring: the JoinPointManager now creates (and shares state) with join-points.
196
//
197
// Revision 1.12 2003/04/25 15:15:12 popovici
198
// FieldS renamed to 'Fields'
199
//
200
// Revision 1.11 2003/04/17 15:14:58 popovici
201
// Extension->Aspect renaming
202
//
203
// Revision 1.10 2003/04/17 14:46:05 popovici
204
// ThiS renamed to This; additional method renamings
205
//
206
// Revision 1.9 2003/04/17 13:59:38 popovici
207
// This class and methods renamed
208
//
209
// Revision 1.8 2003/04/17 12:49:29 popovici
210
// Refactoring of the crosscut package
211
// ExceptionCut renamed to ThrowCut
212
// McutSignature is now SignaturePattern
213
//
214
// Revision 1.7 2003/04/17 08:46:51 popovici
215
// Important functionality additions
216
// - Cflow specializers
217
// - Restructuring of the MethodCut, SetCut, ThrowCut, and GetCut (they are much smaller)
218
// - Transactional capabilities
219
// - Total refactoring of Specializer evaluation, which permits fine-grained distinction
220
// between static and dynamic specializers.
221
// - Functionality pulled up in abstract classes
222
// - Uniformization of advice methods patterns and names
223
//
224
// Revision 1.6 2003/03/04 18:36:11 popovici
225
// Organization of imprts
226
//
227
// Revision 1.5 2003/03/04 11:26:02 popovici
228
// Important refactorization step (march):
229
// - removal of 'JoinPointEvents'; JoinPoints now have the same function as events
230
// - reimplementation of the JVMAIDebuggerAspectInterface (better performance, coding conventions, removal of ProseVM
231
// structures
232
//
233
// Revision 1.4 2002/11/26 17:15:41 pschoch
234
// RootComponent now added (replaces RootComponent now added (replaces old ProseSystem)
235
// ProseSystem now owns and starts the Aspect interface.
236
// ProseSystem now containes a 'test' AspectManager
237
// AspectManager now owns the JoinPointManager.
238
// ExtensionManger can be 'connected' to the JVM, or disconnected. The
239
// JoinPointManager of a connected Ext.Mgr enables joinpoints; the
240
// JoinPointManger of a disconnected Ext.Mgr never enables join-points
241
// Documentation updated accordingly.
242
//
243
// Revision 1.3 2002/05/16 09:18:23 popovici
244
// ClasseS and CFlow replaced with Target, This; the crosscut spec package is refactorized. Now all
245
// crosscuts are grouped (abstract definitions + concrete definitions). Crosscuts explicitely are dynamic and static, and
246
// or/Not/And combinations can be created.
247
//
248
// Revision 1.2 2002/02/05 11:18:35 smarkwal
249
// modifications to test JVMAI-based implementation
250
//
251
// Revision 1.1.1.1 2001/11/29 18:13:31 popovici
252
// Sources from runes
253
//
254
// Revision 1.1.2.3 2001/02/22 16:50:23 popovici
255
// ProseSystem.setup replaced with startup; teardown introduced
256
//
257
// Revision 1.1.2.2 2001/02/21 13:39:42 popovici
258
// Minor verbosing of one test case.
259
//
260
// Revision 1.1.2.1 2000/11/28 16:59:22 groos
261
// Initial Revision.
262
//
263
Popular Tags