1 | /* |
2 | * Copyright (c) 2001-2009, Jean Tessier |
3 | * All rights reserved. |
4 | * |
5 | * Redistribution and use in source and binary forms, with or without |
6 | * modification, are permitted provided that the following conditions |
7 | * are met: |
8 | * |
9 | * * Redistributions of source code must retain the above copyright |
10 | * notice, this list of conditions and the following disclaimer. |
11 | * |
12 | * * Redistributions in binary form must reproduce the above copyright |
13 | * notice, this list of conditions and the following disclaimer in the |
14 | * documentation and/or other materials provided with the distribution. |
15 | * |
16 | * * Neither the name of Jean Tessier nor the names of his contributors |
17 | * may be used to endorse or promote products derived from this software |
18 | * without specific prior written permission. |
19 | * |
20 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
21 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
22 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
23 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR |
24 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
25 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
26 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
27 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
28 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
29 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
30 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
31 | */ |
32 | |
33 | package com.jeantessier.dependency; |
34 | |
35 | import java.util.*; |
36 | |
37 | import junit.framework.*; |
38 | |
39 | public class TestSelectiveTraversalStrategy extends TestCase { |
40 | private RegularExpressionSelectionCriteria scopeCriteria; |
41 | private RegularExpressionSelectionCriteria filterCriteria; |
42 | private SelectiveTraversalStrategy strategy; |
43 | |
44 | private PackageNode a; |
45 | private ClassNode a_A; |
46 | private FeatureNode a_A_a; |
47 | |
48 | private PackageNode b; |
49 | private ClassNode b_B; |
50 | private FeatureNode b_B_b; |
51 | |
52 | private PackageNode c; |
53 | private ClassNode c_C; |
54 | private FeatureNode c_C_c; |
55 | |
56 | private List<String> include; |
57 | private List<String> exclude; |
58 | |
59 | protected void setUp() throws Exception { |
60 | scopeCriteria = new RegularExpressionSelectionCriteria("//"); |
61 | filterCriteria = new RegularExpressionSelectionCriteria("//"); |
62 | strategy = new SelectiveTraversalStrategy(scopeCriteria, filterCriteria); |
63 | |
64 | NodeFactory factory = new NodeFactory(); |
65 | |
66 | a = factory.createPackage("a"); |
67 | a_A = factory.createClass("a.A"); |
68 | a_A_a = factory.createFeature("a.A.a"); |
69 | |
70 | b = factory.createPackage("b"); |
71 | b_B = factory.createClass("b.B"); |
72 | b_B_b = factory.createFeature("b.B.b"); |
73 | |
74 | c = factory.createPackage("c"); |
75 | c_C = factory.createClass("c.C"); |
76 | c_C_c = factory.createFeature("c.C.c"); |
77 | |
78 | include = Collections.singletonList("/^b/"); |
79 | exclude = Collections.singletonList("/^c/"); |
80 | } |
81 | |
82 | public void testScope() { |
83 | scopeCriteria.setMatchingPackages(true); |
84 | scopeCriteria.setMatchingClasses(false); |
85 | scopeCriteria.setMatchingFeatures(false); |
86 | |
87 | assertTrue("a not in package scope", strategy.isInScope(a)); |
88 | assertTrue("a.A in package scope", !strategy.isInScope(a_A)); |
89 | assertTrue("a.A.a in package scope", !strategy.isInScope(a_A_a)); |
90 | assertTrue("b not in package scope", strategy.isInScope(b)); |
91 | assertTrue("b.B in package scope", !strategy.isInScope(b_B)); |
92 | assertTrue("b.B.b in package scope", !strategy.isInScope(b_B_b)); |
93 | assertTrue("c not in package scope", strategy.isInScope(c)); |
94 | assertTrue("c.C in package scope", !strategy.isInScope(c_C)); |
95 | assertTrue("c.C.c in package scope", !strategy.isInScope(c_C_c)); |
96 | |
97 | scopeCriteria.setMatchingPackages(false); |
98 | scopeCriteria.setMatchingClasses(true); |
99 | scopeCriteria.setMatchingFeatures(false); |
100 | |
101 | assertTrue("a in package scope", !strategy.isInScope(a)); |
102 | assertTrue("a.A not in package scope", strategy.isInScope(a_A)); |
103 | assertTrue("a.A.a in package scope", !strategy.isInScope(a_A_a)); |
104 | assertTrue("b not in package scope", !strategy.isInScope(b)); |
105 | assertTrue("b.B in package scope", strategy.isInScope(b_B)); |
106 | assertTrue("b.B.b in package scope", !strategy.isInScope(b_B_b)); |
107 | assertTrue("c not in package scope", !strategy.isInScope(c)); |
108 | assertTrue("c.C in package scope", strategy.isInScope(c_C)); |
109 | assertTrue("c.C.c in package scope", !strategy.isInScope(c_C_c)); |
110 | |
111 | scopeCriteria.setMatchingPackages(false); |
112 | scopeCriteria.setMatchingClasses(false); |
113 | scopeCriteria.setMatchingFeatures(true); |
114 | |
115 | assertTrue("a in package scope", !strategy.isInScope(a)); |
116 | assertTrue("a.A in package scope", !strategy.isInScope(a_A)); |
117 | assertTrue("a.A.a not in package scope", strategy.isInScope(a_A_a)); |
118 | assertTrue("b not in package scope", !strategy.isInScope(b)); |
119 | assertTrue("b.B in package scope", !strategy.isInScope(b_B)); |
120 | assertTrue("b.B.b in package scope", strategy.isInScope(b_B_b)); |
121 | assertTrue("c not in package scope", !strategy.isInScope(c)); |
122 | assertTrue("c.C in package scope", !strategy.isInScope(c_C)); |
123 | assertTrue("c.C.c in package scope", strategy.isInScope(c_C_c)); |
124 | } |
125 | |
126 | public void testScopeIncludes() { |
127 | scopeCriteria.setGlobalIncludes(include); |
128 | |
129 | scopeCriteria.setMatchingPackages(true); |
130 | scopeCriteria.setMatchingClasses(false); |
131 | scopeCriteria.setMatchingFeatures(false); |
132 | |
133 | assertTrue("a in package scope", !strategy.isInScope(a)); |
134 | assertTrue("a.A in package scope", !strategy.isInScope(a_A)); |
135 | assertTrue("a.A.a in package scope", !strategy.isInScope(a_A_a)); |
136 | assertTrue("b not in package scope", strategy.isInScope(b)); |
137 | assertTrue("b.B in package scope", !strategy.isInScope(b_B)); |
138 | assertTrue("b.B.b in package scope", !strategy.isInScope(b_B_b)); |
139 | assertTrue("c in package scope", !strategy.isInScope(c)); |
140 | assertTrue("c.C in package scope", !strategy.isInScope(c_C)); |
141 | assertTrue("c.C.c in package scope", !strategy.isInScope(c_C_c)); |
142 | |
143 | scopeCriteria.setMatchingPackages(false); |
144 | scopeCriteria.setMatchingClasses(true); |
145 | scopeCriteria.setMatchingFeatures(false); |
146 | |
147 | assertTrue("a in package scope", !strategy.isInScope(a)); |
148 | assertTrue("a.A in package scope", !strategy.isInScope(a_A)); |
149 | assertTrue("a.A.a in package scope", !strategy.isInScope(a_A_a)); |
150 | assertTrue("b in package scope", !strategy.isInScope(b)); |
151 | assertTrue("b.B not in package scope", strategy.isInScope(b_B)); |
152 | assertTrue("b.B.b in package scope", !strategy.isInScope(b_B_b)); |
153 | assertTrue("c in package scope", !strategy.isInScope(c)); |
154 | assertTrue("c.C in package scope", !strategy.isInScope(c_C)); |
155 | assertTrue("c.C.c in package scope", !strategy.isInScope(c_C_c)); |
156 | |
157 | scopeCriteria.setMatchingPackages(false); |
158 | scopeCriteria.setMatchingClasses(false); |
159 | scopeCriteria.setMatchingFeatures(true); |
160 | |
161 | assertTrue("a in package scope", !strategy.isInScope(a)); |
162 | assertTrue("a.A in package scope", !strategy.isInScope(a_A)); |
163 | assertTrue("a.A.a in package scope", !strategy.isInScope(a_A_a)); |
164 | assertTrue("b in package scope", !strategy.isInScope(b)); |
165 | assertTrue("b.B in package scope", !strategy.isInScope(b_B)); |
166 | assertTrue("b.B.b not in package scope", strategy.isInScope(b_B_b)); |
167 | assertTrue("c in package scope", !strategy.isInScope(c)); |
168 | assertTrue("c.C in package scope", !strategy.isInScope(c_C)); |
169 | assertTrue("c.C.c in package scope", !strategy.isInScope(c_C_c)); |
170 | } |
171 | |
172 | public void testScopeExcludes() { |
173 | scopeCriteria.setGlobalExcludes(exclude); |
174 | |
175 | scopeCriteria.setMatchingPackages(true); |
176 | scopeCriteria.setMatchingClasses(false); |
177 | scopeCriteria.setMatchingFeatures(false); |
178 | |
179 | assertTrue("a not in package scope", strategy.isInScope(a)); |
180 | assertTrue("a.A in package scope", !strategy.isInScope(a_A)); |
181 | assertTrue("a.A.a in package scope", !strategy.isInScope(a_A_a)); |
182 | assertTrue("b not in package scope", strategy.isInScope(b)); |
183 | assertTrue("b.B in package scope", !strategy.isInScope(b_B)); |
184 | assertTrue("b.B.b in package scope", !strategy.isInScope(b_B_b)); |
185 | assertTrue("c in package scope", !strategy.isInScope(c)); |
186 | assertTrue("c.C in package scope", !strategy.isInScope(c_C)); |
187 | assertTrue("c.C.c in package scope", !strategy.isInScope(c_C_c)); |
188 | |
189 | scopeCriteria.setMatchingPackages(false); |
190 | scopeCriteria.setMatchingClasses(true); |
191 | scopeCriteria.setMatchingFeatures(false); |
192 | |
193 | assertTrue("a in package scope", !strategy.isInScope(a)); |
194 | assertTrue("a.A not in package scope", strategy.isInScope(a_A)); |
195 | assertTrue("a.A.a in package scope", !strategy.isInScope(a_A_a)); |
196 | assertTrue("b in package scope", !strategy.isInScope(b)); |
197 | assertTrue("b.B not in package scope", strategy.isInScope(b_B)); |
198 | assertTrue("b.B.b in package scope", !strategy.isInScope(b_B_b)); |
199 | assertTrue("c not in package scope", !strategy.isInScope(c)); |
200 | assertTrue("c.C in package scope", !strategy.isInScope(c_C)); |
201 | assertTrue("c.C.c in package scope", !strategy.isInScope(c_C_c)); |
202 | |
203 | scopeCriteria.setMatchingPackages(false); |
204 | scopeCriteria.setMatchingClasses(false); |
205 | scopeCriteria.setMatchingFeatures(true); |
206 | |
207 | assertTrue("a in package scope", !strategy.isInScope(a)); |
208 | assertTrue("a.A in package scope", !strategy.isInScope(a_A)); |
209 | assertTrue("a.A.a not in package scope", strategy.isInScope(a_A_a)); |
210 | assertTrue("b in package scope", !strategy.isInScope(b)); |
211 | assertTrue("b.B in package scope", !strategy.isInScope(b_B)); |
212 | assertTrue("b.B.b not in package scope", strategy.isInScope(b_B_b)); |
213 | assertTrue("c not in package scope", !strategy.isInScope(c)); |
214 | assertTrue("c.C in package scope", !strategy.isInScope(c_C)); |
215 | assertTrue("c.C.c in package scope", !strategy.isInScope(c_C_c)); |
216 | } |
217 | |
218 | public void testFilter() { |
219 | filterCriteria.setMatchingPackages(true); |
220 | filterCriteria.setMatchingClasses(false); |
221 | filterCriteria.setMatchingFeatures(false); |
222 | |
223 | assertTrue("a not in package filter", strategy.isInFilter(a)); |
224 | assertTrue("a.A in package filter", !strategy.isInFilter(a_A)); |
225 | assertTrue("a.A.a in package filter", !strategy.isInFilter(a_A_a)); |
226 | assertTrue("b not in package filter", strategy.isInFilter(b)); |
227 | assertTrue("b.B in package filter", !strategy.isInFilter(b_B)); |
228 | assertTrue("b.B.b in package filter", !strategy.isInFilter(b_B_b)); |
229 | assertTrue("c not in package filter", strategy.isInFilter(c)); |
230 | assertTrue("c.C in package filter", !strategy.isInFilter(c_C)); |
231 | assertTrue("c.C.c in package filter", !strategy.isInFilter(c_C_c)); |
232 | |
233 | filterCriteria.setMatchingPackages(false); |
234 | filterCriteria.setMatchingClasses(true); |
235 | filterCriteria.setMatchingFeatures(false); |
236 | |
237 | assertTrue("a in package filter", !strategy.isInFilter(a)); |
238 | assertTrue("a.A not in package filter", strategy.isInFilter(a_A)); |
239 | assertTrue("a.A.a in package filter", !strategy.isInFilter(a_A_a)); |
240 | assertTrue("b not in package filter", !strategy.isInFilter(b)); |
241 | assertTrue("b.B in package filter", strategy.isInFilter(b_B)); |
242 | assertTrue("b.B.b in package filter", !strategy.isInFilter(b_B_b)); |
243 | assertTrue("c not in package filter", !strategy.isInFilter(c)); |
244 | assertTrue("c.C in package filter", strategy.isInFilter(c_C)); |
245 | assertTrue("c.C.c in package filter", !strategy.isInFilter(c_C_c)); |
246 | |
247 | filterCriteria.setMatchingPackages(false); |
248 | filterCriteria.setMatchingClasses(false); |
249 | filterCriteria.setMatchingFeatures(true); |
250 | |
251 | assertTrue("a in package filter", !strategy.isInFilter(a)); |
252 | assertTrue("a.A in package filter", !strategy.isInFilter(a_A)); |
253 | assertTrue("a.A.a not in package filter", strategy.isInFilter(a_A_a)); |
254 | assertTrue("b not in package filter", !strategy.isInFilter(b)); |
255 | assertTrue("b.B in package filter", !strategy.isInFilter(b_B)); |
256 | assertTrue("b.B.b in package filter", strategy.isInFilter(b_B_b)); |
257 | assertTrue("c not in package filter", !strategy.isInFilter(c)); |
258 | assertTrue("c.C in package filter", !strategy.isInFilter(c_C)); |
259 | assertTrue("c.C.c in package filter", strategy.isInFilter(c_C_c)); |
260 | } |
261 | |
262 | public void testFilterIncludes() { |
263 | filterCriteria.setGlobalIncludes(include); |
264 | |
265 | filterCriteria.setMatchingPackages(true); |
266 | filterCriteria.setMatchingClasses(false); |
267 | filterCriteria.setMatchingFeatures(false); |
268 | |
269 | assertTrue("a in package filter", !strategy.isInFilter(a)); |
270 | assertTrue("a.A in package filter", !strategy.isInFilter(a_A)); |
271 | assertTrue("a.A.a in package filter", !strategy.isInFilter(a_A_a)); |
272 | assertTrue("b not in package filter", strategy.isInFilter(b)); |
273 | assertTrue("b.B in package filter", !strategy.isInFilter(b_B)); |
274 | assertTrue("b.B.b in package filter", !strategy.isInFilter(b_B_b)); |
275 | assertTrue("c in package filter", !strategy.isInFilter(c)); |
276 | assertTrue("c.C in package filter", !strategy.isInFilter(c_C)); |
277 | assertTrue("c.C.c in package filter", !strategy.isInFilter(c_C_c)); |
278 | |
279 | filterCriteria.setMatchingPackages(false); |
280 | filterCriteria.setMatchingClasses(true); |
281 | filterCriteria.setMatchingFeatures(false); |
282 | |
283 | assertTrue("a in package filter", !strategy.isInFilter(a)); |
284 | assertTrue("a.A in package filter", !strategy.isInFilter(a_A)); |
285 | assertTrue("a.A.a in package filter", !strategy.isInFilter(a_A_a)); |
286 | assertTrue("b in package filter", !strategy.isInFilter(b)); |
287 | assertTrue("b.B not in package filter", strategy.isInFilter(b_B)); |
288 | assertTrue("b.B.b in package filter", !strategy.isInFilter(b_B_b)); |
289 | assertTrue("c in package filter", !strategy.isInFilter(c)); |
290 | assertTrue("c.C in package filter", !strategy.isInFilter(c_C)); |
291 | assertTrue("c.C.c in package filter", !strategy.isInFilter(c_C_c)); |
292 | |
293 | filterCriteria.setMatchingPackages(false); |
294 | filterCriteria.setMatchingClasses(false); |
295 | filterCriteria.setMatchingFeatures(true); |
296 | |
297 | assertTrue("a in package filter", !strategy.isInFilter(a)); |
298 | assertTrue("a.A in package filter", !strategy.isInFilter(a_A)); |
299 | assertTrue("a.A.a in package filter", !strategy.isInFilter(a_A_a)); |
300 | assertTrue("b in package filter", !strategy.isInFilter(b)); |
301 | assertTrue("b.B in package filter", !strategy.isInFilter(b_B)); |
302 | assertTrue("b.B.b not in package filter", strategy.isInFilter(b_B_b)); |
303 | assertTrue("c in package filter", !strategy.isInFilter(c)); |
304 | assertTrue("c.C in package filter", !strategy.isInFilter(c_C)); |
305 | assertTrue("c.C.c in package filter", !strategy.isInFilter(c_C_c)); |
306 | } |
307 | |
308 | public void testFilterExcludes() { |
309 | filterCriteria.setGlobalExcludes(exclude); |
310 | |
311 | filterCriteria.setMatchingPackages(true); |
312 | filterCriteria.setMatchingClasses(false); |
313 | filterCriteria.setMatchingFeatures(false); |
314 | |
315 | assertTrue("a not in package filter", strategy.isInFilter(a)); |
316 | assertTrue("a.A in package filter", !strategy.isInFilter(a_A)); |
317 | assertTrue("a.A.a in package filter", !strategy.isInFilter(a_A_a)); |
318 | assertTrue("b not in package filter", strategy.isInFilter(b)); |
319 | assertTrue("b.B in package filter", !strategy.isInFilter(b_B)); |
320 | assertTrue("b.B.b in package filter", !strategy.isInFilter(b_B_b)); |
321 | assertTrue("c in package filter", !strategy.isInFilter(c)); |
322 | assertTrue("c.C in package filter", !strategy.isInFilter(c_C)); |
323 | assertTrue("c.C.c in package filter", !strategy.isInFilter(c_C_c)); |
324 | |
325 | filterCriteria.setMatchingPackages(false); |
326 | filterCriteria.setMatchingClasses(true); |
327 | filterCriteria.setMatchingFeatures(false); |
328 | |
329 | assertTrue("a in package filter", !strategy.isInFilter(a)); |
330 | assertTrue("a.A not in package filter", strategy.isInFilter(a_A)); |
331 | assertTrue("a.A.a in package filter", !strategy.isInFilter(a_A_a)); |
332 | assertTrue("b in package filter", !strategy.isInFilter(b)); |
333 | assertTrue("b.B not in package filter", strategy.isInFilter(b_B)); |
334 | assertTrue("b.B.b in package filter", !strategy.isInFilter(b_B_b)); |
335 | assertTrue("c in package filter", !strategy.isInFilter(c)); |
336 | assertTrue("c.C in package filter", !strategy.isInFilter(c_C)); |
337 | assertTrue("c.C.c in package filter", !strategy.isInFilter(c_C_c)); |
338 | |
339 | filterCriteria.setMatchingPackages(false); |
340 | filterCriteria.setMatchingClasses(false); |
341 | filterCriteria.setMatchingFeatures(true); |
342 | |
343 | assertTrue("a in package filter", !strategy.isInFilter(a)); |
344 | assertTrue("a.A in package filter", !strategy.isInFilter(a_A)); |
345 | assertTrue("a.A.a not in package filter", strategy.isInFilter(a_A_a)); |
346 | assertTrue("b in package filter", !strategy.isInFilter(b)); |
347 | assertTrue("b.B in package filter", !strategy.isInFilter(b_B)); |
348 | assertTrue("b.B.b not in package filter", strategy.isInFilter(b_B_b)); |
349 | assertTrue("c in package filter", !strategy.isInFilter(c)); |
350 | assertTrue("c.C in package filter", !strategy.isInFilter(c_C)); |
351 | assertTrue("c.C.c in package filter", !strategy.isInFilter(c_C_c)); |
352 | } |
353 | } |