EMMA Coverage Report (generated Mon Nov 29 14:43:38 PST 2010)
[all classes][com.jeantessier.dependency]

COVERAGE SUMMARY FOR SOURCE FILE [TestTransitiveClosureEngine.java]

nameclass, %method, %block, %line, %
TestTransitiveClosureEngine.java100% (1/1)100% (21/21)100% (3114/3114)100% (404/404)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class TestTransitiveClosureEngine100% (1/1)100% (21/21)100% (3114/3114)100% (404/404)
TestTransitiveClosureEngine (): void 100% (1/1)100% (3/3)100% (1/1)
setUp (): void 100% (1/1)100% (86/86)100% (17/17)
testCompute1LayerOnly (): void 100% (1/1)100% (135/135)100% (17/17)
testCompute4LayersWithStopCriteria (): void 100% (1/1)100% (135/135)100% (17/17)
testComputeAllInboundLayersP2P (): void 100% (1/1)100% (247/247)100% (34/34)
testComputeAllLayers (): void 100% (1/1)100% (174/174)100% (20/20)
testComputeAllLayersUntilStartCriteria (): void 100% (1/1)100% (93/93)100% (13/13)
testComputeAllLayersWithStopCriteria (): void 100% (1/1)100% (134/134)100% (17/17)
testComputeAllOutboundLayersP2P (): void 100% (1/1)100% (247/247)100% (34/34)
testFourInboundLayers (): void 100% (1/1)100% (180/180)100% (23/23)
testFourOutboundLayers (): void 100% (1/1)100% (180/180)100% (23/23)
testInboundStartingPoint (): void 100% (1/1)100% (112/112)100% (14/14)
testOneInboundLayer (): void 100% (1/1)100% (155/155)100% (19/19)
testOneOutboundLayer (): void 100% (1/1)100% (155/155)100% (19/19)
testOutboundStartingPoint (): void 100% (1/1)100% (112/112)100% (14/14)
testSelectScope (): void 100% (1/1)100% (74/74)100% (10/10)
testStopCriteria (): void 100% (1/1)100% (140/140)100% (20/20)
testThreeInboundLayers (): void 100% (1/1)100% (178/178)100% (22/22)
testThreeOutboundLayers (): void 100% (1/1)100% (178/178)100% (22/22)
testTwoInboundLayers (): void 100% (1/1)100% (198/198)100% (24/24)
testTwoOutboundLayers (): void 100% (1/1)100% (198/198)100% (24/24)

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 
33package com.jeantessier.dependency;
34 
35import java.util.*;
36 
37import junit.framework.*;
38 
39public class TestTransitiveClosureEngine extends TestCase {
40    private NodeFactory factory;
41 
42    private PackageNode a;
43    private ClassNode   a_A;
44    private FeatureNode a_A_a;
45    
46    private PackageNode b;
47    private ClassNode   b_B;
48    private FeatureNode b_B_b;
49    
50    private PackageNode c;
51    private ClassNode   c_C;
52    private FeatureNode c_C_c;
53 
54    private RegularExpressionSelectionCriteria startCriteria;
55    private RegularExpressionSelectionCriteria stopCriteria;
56    
57    protected void setUp() throws Exception {
58        super.setUp();
59        
60        factory = new NodeFactory();
61 
62        a     = factory.createPackage("a");
63        a_A   = factory.createClass("a.A");
64        a_A_a = factory.createFeature("a.A.a");
65        
66        b     = factory.createPackage("b");
67        b_B   = factory.createClass("b.B");
68        b_B_b = factory.createFeature("b.B.b");
69        
70        c     = factory.createPackage("c");
71        c_C   = factory.createClass("c.C");
72        c_C_c = factory.createFeature("c.C.c");
73 
74        a_A_a.addDependency(b_B_b);
75        b_B_b.addDependency(c_C_c);
76 
77        startCriteria = new RegularExpressionSelectionCriteria();
78        stopCriteria  = new RegularExpressionSelectionCriteria();
79        stopCriteria.setGlobalIncludes("");
80    }
81 
82    public void testSelectScope() {
83        startCriteria.setGlobalIncludes("/a.A.a/");
84 
85        GraphCopier copier = new GraphCopier(new SelectiveTraversalStrategy(startCriteria, new RegularExpressionSelectionCriteria()));
86 
87        copier.traverseNodes(factory.getPackages().values());
88        
89        assertEquals("packages in scope: " , 1, copier.getScopeFactory().getPackages().values().size());
90        assertEquals("classes in scope"    , 1, copier.getScopeFactory().getClasses().values().size());
91        assertEquals("features in scope"   , 1, copier.getScopeFactory().getFeatures().values().size());
92 
93        assertEquals("package b in scope"    , a,     copier.getScopeFactory().getPackages().get("a"));
94        assertEquals("class a.A in scope"    , a_A,   copier.getScopeFactory().getClasses().get("a.A"));
95        assertEquals("feature a.A.a in scope", a_A_a, copier.getScopeFactory().getFeatures().get("a.A.a"));
96    }
97 
98    public void testOutboundStartingPoint() {
99        startCriteria.setGlobalIncludes("/a.A.a/");
100 
101        TransitiveClosureEngine engine = new TransitiveClosureEngine(factory.getPackages().values(), startCriteria, stopCriteria, new ClosureOutboundSelector());
102 
103        assertEquals("Nb layers", 1, engine.getNbLayers());
104 
105        assertEquals("layer 0", 1, engine.getLayer(0).size());
106        assertEquals("a.A.a in layer 0", a_A_a, engine.getLayer(0).iterator().next());
107        assertNotSame("a.A.a in layer 0", a_A_a, engine.getLayer(0).iterator().next());
108 
109        assertEquals("Nb outbounds from a.A.a", 0, ((Node) engine.getLayer(0).iterator().next()).getOutboundDependencies().size());
110        
111        assertEquals("packages in scope: ", 1, engine.getFactory().getPackages().values().size());
112        assertEquals("classes in scope" ,   1, engine.getFactory().getClasses().values().size());
113        assertEquals("features in scope",   1, engine.getFactory().getFeatures().values().size());
114 
115        assertEquals("package a in scope",     a,     engine.getFactory().getPackages().get("a"));
116        assertEquals("class a.A in scope",     a_A,   engine.getFactory().getClasses().get("a.A"));
117        assertEquals("feature a.A.a in scope", a_A_a, engine.getFactory().getFeatures().get("a.A.a"));
118    }
119 
120    public void testOneOutboundLayer() {
121        startCriteria.setGlobalIncludes("/a.A.a/");
122 
123        TransitiveClosureEngine engine = new TransitiveClosureEngine(factory.getPackages().values(), startCriteria, stopCriteria, new ClosureOutboundSelector());
124        engine.computeNextLayer();
125 
126        assertEquals("Nb layers", 2, engine.getNbLayers());
127 
128        assertEquals("layer 1", 1, engine.getLayer(1).size());
129        assertEquals("b.B.b in layer 1", b_B_b, engine.getLayer(1).iterator().next());
130        assertNotSame("b.B.b in layer 1", b_B_b, engine.getLayer(1).iterator().next());
131 
132        assertEquals("Nb outbounds from a.A.a", a_A_a.getOutboundDependencies().size(), ((Node) engine.getLayer(0).iterator().next()).getOutboundDependencies().size());
133        assertEquals("Nb outbounds from b.B.b", 0,                       ((Node) engine.getLayer(1).iterator().next()).getOutboundDependencies().size());
134        
135        assertEquals("packages in scope: ", 2, engine.getFactory().getPackages().values().size());
136        assertEquals("classes in scope" ,   2, engine.getFactory().getClasses().values().size());
137        assertEquals("features in scope",   2, engine.getFactory().getFeatures().values().size());
138 
139        assertEquals("package a in scope",     a,     engine.getFactory().getPackages().get("a"));
140        assertEquals("class a.A in scope",     a_A,   engine.getFactory().getClasses().get("a.A"));
141        assertEquals("feature a.A.a in scope", a_A_a, engine.getFactory().getFeatures().get("a.A.a"));
142        assertEquals("package b in scope",     b,     engine.getFactory().getPackages().get("b"));
143        assertEquals("class b.B in scope",     b_B,   engine.getFactory().getClasses().get("b.B"));
144        assertEquals("feature b.B.b in scope", b_B_b, engine.getFactory().getFeatures().get("b.B.b"));
145    }
146 
147    public void testTwoOutboundLayers() {
148        startCriteria.setGlobalIncludes("/a.A.a/");
149 
150        TransitiveClosureEngine engine = new TransitiveClosureEngine(factory.getPackages().values(), startCriteria, stopCriteria, new ClosureOutboundSelector());
151        engine.computeNextLayer();
152        engine.computeNextLayer();
153 
154        assertEquals("Nb layers", 3, engine.getNbLayers());
155 
156        assertEquals("layer 2", 1, engine.getLayer(1).size());
157        assertEquals("c.C.c in layer 2", c_C_c, engine.getLayer(2).iterator().next());
158        assertNotSame("c.C.c in layer 2", c_C_c, engine.getLayer(2).iterator().next());
159 
160        assertEquals("Nb outbounds from a.A.a", a_A_a.getOutboundDependencies().size(), ((Node) engine.getLayer(0).iterator().next()).getOutboundDependencies().size());
161        assertEquals("Nb outbounds from b.B.b", b_B_b.getOutboundDependencies().size(), ((Node) engine.getLayer(1).iterator().next()).getOutboundDependencies().size());
162        assertEquals("Nb outbounds from c.C.c", 0,                       ((Node) engine.getLayer(2).iterator().next()).getOutboundDependencies().size());
163        
164        assertEquals("packages in scope: ", 3, engine.getFactory().getPackages().values().size());
165        assertEquals("classes in scope" ,   3, engine.getFactory().getClasses().values().size());
166        assertEquals("features in scope",   3, engine.getFactory().getFeatures().values().size());
167 
168        assertEquals("package a in scope",     a,     engine.getFactory().getPackages().get("a"));
169        assertEquals("class a.A in scope",     a_A,   engine.getFactory().getClasses().get("a.A"));
170        assertEquals("feature a.A.a in scope", a_A_a, engine.getFactory().getFeatures().get("a.A.a"));
171        assertEquals("package b in scope",     b,     engine.getFactory().getPackages().get("b"));
172        assertEquals("class b.B in scope",     b_B,   engine.getFactory().getClasses().get("b.B"));
173        assertEquals("feature b.B.b in scope", b_B_b, engine.getFactory().getFeatures().get("b.B.b"));
174        assertEquals("package c in scope",     c,     engine.getFactory().getPackages().get("c"));
175        assertEquals("class c.C in scope",     c_C,   engine.getFactory().getClasses().get("c.C"));
176        assertEquals("feature c.C.c in scope", c_C_c, engine.getFactory().getFeatures().get("c.C.c"));
177    }
178 
179    public void testThreeOutboundLayers() {
180        startCriteria.setGlobalIncludes("/a.A.a/");
181 
182        TransitiveClosureEngine engine = new TransitiveClosureEngine(factory.getPackages().values(), startCriteria, stopCriteria, new ClosureOutboundSelector());
183        engine.computeNextLayer();
184        engine.computeNextLayer();
185        engine.computeNextLayer();
186 
187        assertEquals("Nb layers", 3, engine.getNbLayers());
188 
189        assertEquals("Nb outbounds from a.A.a", a_A_a.getOutboundDependencies().size(), ((Node) engine.getLayer(0).iterator().next()).getOutboundDependencies().size());
190        assertEquals("Nb outbounds from b.B.b", b_B_b.getOutboundDependencies().size(), ((Node) engine.getLayer(1).iterator().next()).getOutboundDependencies().size());
191        assertEquals("Nb outbounds from c.C.c", c_C_c.getOutboundDependencies().size(), ((Node) engine.getLayer(2).iterator().next()).getOutboundDependencies().size());
192        
193        assertEquals("packages in scope: ", 3, engine.getFactory().getPackages().values().size());
194        assertEquals("classes in scope" ,   3, engine.getFactory().getClasses().values().size());
195        assertEquals("features in scope",   3, engine.getFactory().getFeatures().values().size());
196 
197        assertEquals("package a in scope",     a,     engine.getFactory().getPackages().get("a"));
198        assertEquals("class a.A in scope",     a_A,   engine.getFactory().getClasses().get("a.A"));
199        assertEquals("feature a.A.a in scope", a_A_a, engine.getFactory().getFeatures().get("a.A.a"));
200        assertEquals("package b in scope",     b,     engine.getFactory().getPackages().get("b"));
201        assertEquals("class b.B in scope",     b_B,   engine.getFactory().getClasses().get("b.B"));
202        assertEquals("feature b.B.b in scope", b_B_b, engine.getFactory().getFeatures().get("b.B.b"));
203        assertEquals("package c in scope",     c,     engine.getFactory().getPackages().get("c"));
204        assertEquals("class c.C in scope",     c_C,   engine.getFactory().getClasses().get("c.C"));
205        assertEquals("feature c.C.c in scope", c_C_c, engine.getFactory().getFeatures().get("c.C.c"));
206    }
207 
208    public void testFourOutboundLayers() {
209        startCriteria.setGlobalIncludes("/a.A.a/");
210 
211        TransitiveClosureEngine engine = new TransitiveClosureEngine(factory.getPackages().values(), startCriteria, stopCriteria, new ClosureOutboundSelector());
212        engine.computeNextLayer();
213        engine.computeNextLayer();
214        engine.computeNextLayer();
215        engine.computeNextLayer();
216 
217        assertEquals("Nb layers", 3, engine.getNbLayers());
218 
219        assertEquals("Nb outbounds from a.A.a", a_A_a.getOutboundDependencies().size(), ((Node) engine.getLayer(0).iterator().next()).getOutboundDependencies().size());
220        assertEquals("Nb outbounds from b.B.b", b_B_b.getOutboundDependencies().size(), ((Node) engine.getLayer(1).iterator().next()).getOutboundDependencies().size());
221        assertEquals("Nb outbounds from c.C.c", c_C_c.getOutboundDependencies().size(), ((Node) engine.getLayer(2).iterator().next()).getOutboundDependencies().size());
222        
223        assertEquals("packages in scope: ", 3, engine.getFactory().getPackages().values().size());
224        assertEquals("classes in scope" ,   3, engine.getFactory().getClasses().values().size());
225        assertEquals("features in scope",   3, engine.getFactory().getFeatures().values().size());
226 
227        assertEquals("package a in scope",     a,     engine.getFactory().getPackages().get("a"));
228        assertEquals("class a.A in scope",     a_A,   engine.getFactory().getClasses().get("a.A"));
229        assertEquals("feature a.A.a in scope", a_A_a, engine.getFactory().getFeatures().get("a.A.a"));
230        assertEquals("package b in scope",     b,     engine.getFactory().getPackages().get("b"));
231        assertEquals("class b.B in scope",     b_B,   engine.getFactory().getClasses().get("b.B"));
232        assertEquals("feature b.B.b in scope", b_B_b, engine.getFactory().getFeatures().get("b.B.b"));
233        assertEquals("package c in scope",     c,     engine.getFactory().getPackages().get("c"));
234        assertEquals("class c.C in scope",     c_C,   engine.getFactory().getClasses().get("c.C"));
235        assertEquals("feature c.C.c in scope", c_C_c, engine.getFactory().getFeatures().get("c.C.c"));
236    }
237 
238    public void testInboundStartingPoint() {
239        startCriteria.setGlobalIncludes("/c.C.c/");
240 
241        TransitiveClosureEngine engine = new TransitiveClosureEngine(factory.getPackages().values(), startCriteria, stopCriteria, new ClosureInboundSelector());
242 
243        assertEquals("Nb layers", 1, engine.getNbLayers());
244 
245        assertEquals("layer 0", 1, engine.getLayer(0).size());
246        assertEquals("c.C.c in layer 0", c_C_c, engine.getLayer(0).iterator().next());
247        assertNotSame("c.C.c in layer 0", c_C_c, engine.getLayer(0).iterator().next());
248 
249        assertEquals("Nb inbounds from c.C.c", 0, ((Node) engine.getLayer(0).iterator().next()).getInboundDependencies().size());
250        
251        assertEquals("packages in scope: ", 1, engine.getFactory().getPackages().values().size());
252        assertEquals("classes in scope" ,   1, engine.getFactory().getClasses().values().size());
253        assertEquals("features in scope",   1, engine.getFactory().getFeatures().values().size());
254 
255        assertEquals("package c in scope",     c,     engine.getFactory().getPackages().get("c"));
256        assertEquals("class c.C in scope",     c_C,   engine.getFactory().getClasses().get("c.C"));
257        assertEquals("feature c.C.c in scope", c_C_c, engine.getFactory().getFeatures().get("c.C.c"));
258    }
259 
260    public void testOneInboundLayer() {
261        startCriteria.setGlobalIncludes("/c.C.c/");
262 
263        TransitiveClosureEngine engine = new TransitiveClosureEngine(factory.getPackages().values(), startCriteria, stopCriteria, new ClosureInboundSelector());
264        engine.computeNextLayer();
265 
266        assertEquals("Nb layers", 2, engine.getNbLayers());
267 
268        assertEquals("layer 1", 1, engine.getLayer(1).size());
269        assertEquals("b.B.b in layer 1", b_B_b, engine.getLayer(1).iterator().next());
270        assertNotSame("b.B.b in layer 1", b_B_b, engine.getLayer(1).iterator().next());
271 
272        assertEquals("Nb inbounds from c.C.c", c_C_c.getInboundDependencies().size(), ((Node) engine.getLayer(0).iterator().next()).getInboundDependencies().size());
273        assertEquals("Nb inbounds from b.B.b", 0,                      ((Node) engine.getLayer(1).iterator().next()).getInboundDependencies().size());
274        
275        assertEquals("packages in scope: ", 2, engine.getFactory().getPackages().values().size());
276        assertEquals("classes in scope" ,   2, engine.getFactory().getClasses().values().size());
277        assertEquals("features in scope",   2, engine.getFactory().getFeatures().values().size());
278 
279        assertEquals("package b in scope",     b,     engine.getFactory().getPackages().get("b"));
280        assertEquals("class b.B in scope",     b_B,   engine.getFactory().getClasses().get("b.B"));
281        assertEquals("feature b.B.b in scope", b_B_b, engine.getFactory().getFeatures().get("b.B.b"));
282        assertEquals("package c in scope",     c,     engine.getFactory().getPackages().get("c"));
283        assertEquals("class c.C in scope",     c_C,   engine.getFactory().getClasses().get("c.C"));
284        assertEquals("feature c.C.c in scope", c_C_c, engine.getFactory().getFeatures().get("c.C.c"));
285    }
286 
287    public void testTwoInboundLayers() {
288        startCriteria.setGlobalIncludes("/c.C.c/");
289 
290        TransitiveClosureEngine engine = new TransitiveClosureEngine(factory.getPackages().values(), startCriteria, stopCriteria, new ClosureInboundSelector());
291        engine.computeNextLayer();
292        engine.computeNextLayer();
293 
294        assertEquals("Nb layers", 3, engine.getNbLayers());
295 
296        assertEquals("layer 2", 1, engine.getLayer(1).size());
297        assertEquals("a.A.a in layer 2", a_A_a, engine.getLayer(2).iterator().next());
298        assertNotSame("a.A.a in layer 2", a_A_a, engine.getLayer(2).iterator().next());
299 
300        assertEquals("Nb inbounds from c.C.c", c_C_c.getInboundDependencies().size(), ((Node) engine.getLayer(0).iterator().next()).getInboundDependencies().size());
301        assertEquals("Nb inbounds from b.B.b", b_B_b.getInboundDependencies().size(), ((Node) engine.getLayer(1).iterator().next()).getInboundDependencies().size());
302        assertEquals("Nb inbounds from a.A.a", 0,                      ((Node) engine.getLayer(2).iterator().next()).getInboundDependencies().size());
303        
304        assertEquals("packages in scope: ", 3, engine.getFactory().getPackages().values().size());
305        assertEquals("classes in scope" ,   3, engine.getFactory().getClasses().values().size());
306        assertEquals("features in scope",   3, engine.getFactory().getFeatures().values().size());
307 
308        assertEquals("package a in scope",     a,     engine.getFactory().getPackages().get("a"));
309        assertEquals("class a.A in scope",     a_A,   engine.getFactory().getClasses().get("a.A"));
310        assertEquals("feature a.A.a in scope", a_A_a, engine.getFactory().getFeatures().get("a.A.a"));
311        assertEquals("package b in scope",     b,     engine.getFactory().getPackages().get("b"));
312        assertEquals("class b.B in scope",     b_B,   engine.getFactory().getClasses().get("b.B"));
313        assertEquals("feature b.B.b in scope", b_B_b, engine.getFactory().getFeatures().get("b.B.b"));
314        assertEquals("package c in scope",     c,     engine.getFactory().getPackages().get("c"));
315        assertEquals("class c.C in scope",     c_C,   engine.getFactory().getClasses().get("c.C"));
316        assertEquals("feature c.C.c in scope", c_C_c, engine.getFactory().getFeatures().get("c.C.c"));
317    }
318 
319    public void testThreeInboundLayers() {
320        startCriteria.setGlobalIncludes("/c.C.c/");
321 
322        TransitiveClosureEngine engine = new TransitiveClosureEngine(factory.getPackages().values(), startCriteria, stopCriteria, new ClosureInboundSelector());
323        engine.computeNextLayer();
324        engine.computeNextLayer();
325        engine.computeNextLayer();
326 
327        assertEquals("Nb layers", 3, engine.getNbLayers());
328 
329        assertEquals("Nb inbounds from c.C.c", c_C_c.getInboundDependencies().size(), ((Node) engine.getLayer(0).iterator().next()).getInboundDependencies().size());
330        assertEquals("Nb inbounds from b.B.b", b_B_b.getInboundDependencies().size(), ((Node) engine.getLayer(1).iterator().next()).getInboundDependencies().size());
331        assertEquals("Nb inbounds from a.A.a", a_A_a.getInboundDependencies().size(), ((Node) engine.getLayer(2).iterator().next()).getInboundDependencies().size());
332        
333        assertEquals("packages in scope: ", 3, engine.getFactory().getPackages().values().size());
334        assertEquals("classes in scope" ,   3, engine.getFactory().getClasses().values().size());
335        assertEquals("features in scope",   3, engine.getFactory().getFeatures().values().size());
336 
337        assertEquals("package a in scope",     a,     engine.getFactory().getPackages().get("a"));
338        assertEquals("class a.A in scope",     a_A,   engine.getFactory().getClasses().get("a.A"));
339        assertEquals("feature a.A.a in scope", a_A_a, engine.getFactory().getFeatures().get("a.A.a"));
340        assertEquals("package b in scope",     b,     engine.getFactory().getPackages().get("b"));
341        assertEquals("class b.B in scope",     b_B,   engine.getFactory().getClasses().get("b.B"));
342        assertEquals("feature b.B.b in scope", b_B_b, engine.getFactory().getFeatures().get("b.B.b"));
343        assertEquals("package c in scope",     c,     engine.getFactory().getPackages().get("c"));
344        assertEquals("class c.C in scope",     c_C,   engine.getFactory().getClasses().get("c.C"));
345        assertEquals("feature c.C.c in scope", c_C_c, engine.getFactory().getFeatures().get("c.C.c"));
346    }
347 
348    public void testFourInboundLayers() {
349        startCriteria.setGlobalIncludes("/c.C.c/");
350 
351        TransitiveClosureEngine engine = new TransitiveClosureEngine(factory.getPackages().values(), startCriteria, stopCriteria, new ClosureInboundSelector());
352        engine.computeNextLayer();
353        engine.computeNextLayer();
354        engine.computeNextLayer();
355        engine.computeNextLayer();
356 
357        assertEquals("Nb layers", 3, engine.getNbLayers());
358 
359        assertEquals("Nb inbounds from c.C.c", c_C_c.getInboundDependencies().size(), ((Node) engine.getLayer(0).iterator().next()).getInboundDependencies().size());
360        assertEquals("Nb inbounds from b.B.b", b_B_b.getInboundDependencies().size(), ((Node) engine.getLayer(1).iterator().next()).getInboundDependencies().size());
361        assertEquals("Nb inbounds from a.A.a", a_A_a.getInboundDependencies().size(), ((Node) engine.getLayer(2).iterator().next()).getInboundDependencies().size());
362        
363        assertEquals("packages in scope: ", 3, engine.getFactory().getPackages().values().size());
364        assertEquals("classes in scope" ,   3, engine.getFactory().getClasses().values().size());
365        assertEquals("features in scope",   3, engine.getFactory().getFeatures().values().size());
366 
367        assertEquals("package a in scope",     a,     engine.getFactory().getPackages().get("a"));
368        assertEquals("class a.A in scope",     a_A,   engine.getFactory().getClasses().get("a.A"));
369        assertEquals("feature a.A.a in scope", a_A_a, engine.getFactory().getFeatures().get("a.A.a"));
370        assertEquals("package b in scope",     b,     engine.getFactory().getPackages().get("b"));
371        assertEquals("class b.B in scope",     b_B,   engine.getFactory().getClasses().get("b.B"));
372        assertEquals("feature b.B.b in scope", b_B_b, engine.getFactory().getFeatures().get("b.B.b"));
373        assertEquals("package c in scope",     c,     engine.getFactory().getPackages().get("c"));
374        assertEquals("class c.C in scope",     c_C,   engine.getFactory().getClasses().get("c.C"));
375        assertEquals("feature c.C.c in scope", c_C_c, engine.getFactory().getFeatures().get("c.C.c"));
376    }
377 
378    public void testStopCriteria() {
379        startCriteria.setGlobalIncludes("/c.C.c/");
380        stopCriteria.setGlobalIncludes("/b.B.b/");
381 
382        TransitiveClosureEngine engine = new TransitiveClosureEngine(factory.getPackages().values(), startCriteria, stopCriteria, new ClosureInboundSelector());
383        engine.computeNextLayer();
384        engine.computeNextLayer();
385        engine.computeNextLayer();
386        engine.computeNextLayer();
387 
388        assertEquals("Nb layers", 2, engine.getNbLayers());
389 
390        assertEquals("Nb inbounds from c.C.c", c_C_c.getInboundDependencies().size(), ((Node) engine.getLayer(0).iterator().next()).getInboundDependencies().size());
391        assertEquals("Nb inbounds from b.B.b", 0,                      ((Node) engine.getLayer(1).iterator().next()).getInboundDependencies().size());
392        
393        assertEquals("packages in scope: ", 2, engine.getFactory().getPackages().values().size());
394        assertEquals("classes in scope" ,   2, engine.getFactory().getClasses().values().size());
395        assertEquals("features in scope",   2, engine.getFactory().getFeatures().values().size());
396 
397        assertEquals("package b in scope",     b,     engine.getFactory().getPackages().get("b"));
398        assertEquals("class b.B in scope",     b_B,   engine.getFactory().getClasses().get("b.B"));
399        assertEquals("feature b.B.b in scope", b_B_b, engine.getFactory().getFeatures().get("b.B.b"));
400        assertEquals("package c in scope",     c,     engine.getFactory().getPackages().get("c"));
401        assertEquals("class c.C in scope",     c_C,   engine.getFactory().getClasses().get("c.C"));
402        assertEquals("feature c.C.c in scope", c_C_c, engine.getFactory().getFeatures().get("c.C.c"));
403    }
404 
405    public void testComputeAllLayers() {
406        startCriteria.setGlobalIncludes("/c.C.c/");
407 
408        TransitiveClosureEngine engine = new TransitiveClosureEngine(factory.getPackages().values(), startCriteria, stopCriteria, new ClosureInboundSelector());
409        engine.computeAllLayers();
410 
411        assertEquals("Nb layers", 3, engine.getNbLayers());
412 
413        assertEquals("Nb inbounds from c.C.c", c_C_c.getInboundDependencies().size(), ((Node) engine.getLayer(0).iterator().next()).getInboundDependencies().size());
414        assertEquals("Nb inbounds from b.B.b", b_B_b.getInboundDependencies().size(), ((Node) engine.getLayer(1).iterator().next()).getInboundDependencies().size());
415        assertEquals("Nb inbounds from a.A.a", a_A_a.getInboundDependencies().size(), ((Node) engine.getLayer(2).iterator().next()).getInboundDependencies().size());
416        
417        assertEquals("packages in scope: ", 3, engine.getFactory().getPackages().values().size());
418        assertEquals("classes in scope" ,   3, engine.getFactory().getClasses().values().size());
419        assertEquals("features in scope",   3, engine.getFactory().getFeatures().values().size());
420 
421        assertEquals("package a in scope",     a,     engine.getFactory().getPackages().get("a"));
422        assertEquals("class a.A in scope",     a_A,   engine.getFactory().getClasses().get("a.A"));
423        assertEquals("feature a.A.a in scope", a_A_a, engine.getFactory().getFeatures().get("a.A.a"));
424        assertEquals("package b in scope",     b,     engine.getFactory().getPackages().get("b"));
425        assertEquals("class b.B in scope",     b_B,   engine.getFactory().getClasses().get("b.B"));
426        assertEquals("feature b.B.b in scope", b_B_b, engine.getFactory().getFeatures().get("b.B.b"));
427        assertEquals("package c in scope",     c,     engine.getFactory().getPackages().get("c"));
428        assertEquals("class c.C in scope",     c_C,   engine.getFactory().getClasses().get("c.C"));
429        assertEquals("feature c.C.c in scope", c_C_c, engine.getFactory().getFeatures().get("c.C.c"));
430    }
431 
432    public void testComputeAllLayersWithStopCriteria() {
433        startCriteria.setGlobalIncludes("/c.C.c/");
434        stopCriteria.setGlobalIncludes("/b.B.b/");
435 
436        TransitiveClosureEngine engine = new TransitiveClosureEngine(factory.getPackages().values(), startCriteria, stopCriteria, new ClosureInboundSelector());
437        engine.computeAllLayers();
438 
439        assertEquals("Nb layers", 2, engine.getNbLayers());
440 
441        assertEquals("Nb inbounds from c.C.c", c_C_c.getInboundDependencies().size(), ((Node) engine.getLayer(0).iterator().next()).getInboundDependencies().size());
442        assertEquals("Nb inbounds from b.B.b", 0,                      ((Node) engine.getLayer(1).iterator().next()).getInboundDependencies().size());
443        
444        assertEquals("packages in scope: ", 2, engine.getFactory().getPackages().values().size());
445        assertEquals("classes in scope" ,   2, engine.getFactory().getClasses().values().size());
446        assertEquals("features in scope",   2, engine.getFactory().getFeatures().values().size());
447 
448        assertEquals("package b in scope",     b,     engine.getFactory().getPackages().get("b"));
449        assertEquals("class b.B in scope",     b_B,   engine.getFactory().getClasses().get("b.B"));
450        assertEquals("feature b.B.b in scope", b_B_b, engine.getFactory().getFeatures().get("b.B.b"));
451        assertEquals("package c in scope",     c,     engine.getFactory().getPackages().get("c"));
452        assertEquals("class c.C in scope",     c_C,   engine.getFactory().getClasses().get("c.C"));
453        assertEquals("feature c.C.c in scope", c_C_c, engine.getFactory().getFeatures().get("c.C.c"));
454    }
455 
456    public void testComputeAllLayersUntilStartCriteria() {
457        startCriteria.setGlobalIncludes("/c.C.c/");
458        stopCriteria.setGlobalIncludes("//");
459 
460        TransitiveClosureEngine engine = new TransitiveClosureEngine(factory.getPackages().values(), startCriteria, stopCriteria, new ClosureInboundSelector());
461        engine.computeAllLayers();
462 
463        assertEquals("Nb layers", 1, engine.getNbLayers());
464 
465        assertEquals("Nb inbounds from c.C.c", 0, ((Node) engine.getLayer(0).iterator().next()).getInboundDependencies().size());
466        
467        assertEquals("packages in scope: ", 1, engine.getFactory().getPackages().values().size());
468        assertEquals("classes in scope" ,   1, engine.getFactory().getClasses().values().size());
469        assertEquals("features in scope",   1, engine.getFactory().getFeatures().values().size());
470 
471        assertEquals("package c in scope",     c,     engine.getFactory().getPackages().get("c"));
472        assertEquals("class c.C in scope",     c_C,   engine.getFactory().getClasses().get("c.C"));
473        assertEquals("feature c.C.c in scope", c_C_c, engine.getFactory().getFeatures().get("c.C.c"));
474    }
475 
476    public void testCompute1LayerOnly() {
477        startCriteria.setGlobalIncludes("/c.C.c/");
478        stopCriteria.setGlobalIncludes("");
479 
480        TransitiveClosureEngine engine = new TransitiveClosureEngine(factory.getPackages().values(), startCriteria, stopCriteria, new ClosureInboundSelector());
481        engine.computeLayers(1);
482 
483        assertEquals("Nb layers", 2, engine.getNbLayers());
484 
485        assertEquals("Nb inbounds from c.C.c", c_C_c.getInboundDependencies().size(), ((Node) engine.getLayer(0).iterator().next()).getInboundDependencies().size());
486        assertEquals("Nb inbounds from b.B.b", 0,                      ((Node) engine.getLayer(1).iterator().next()).getInboundDependencies().size());
487        
488        assertEquals("packages in scope: ", 2, engine.getFactory().getPackages().values().size());
489        assertEquals("classes in scope" ,   2, engine.getFactory().getClasses().values().size());
490        assertEquals("features in scope",   2, engine.getFactory().getFeatures().values().size());
491 
492        assertEquals("package b in scope",     b,     engine.getFactory().getPackages().get("b"));
493        assertEquals("class b.B in scope",     b_B,   engine.getFactory().getClasses().get("b.B"));
494        assertEquals("feature b.B.b in scope", b_B_b, engine.getFactory().getFeatures().get("b.B.b"));
495        assertEquals("package c in scope",     c,     engine.getFactory().getPackages().get("c"));
496        assertEquals("class c.C in scope",     c_C,   engine.getFactory().getClasses().get("c.C"));
497        assertEquals("feature c.C.c in scope", c_C_c, engine.getFactory().getFeatures().get("c.C.c"));
498    }
499 
500    public void testCompute4LayersWithStopCriteria() {
501        startCriteria.setGlobalIncludes("/c.C.c/");
502        stopCriteria.setGlobalIncludes("/b.B.b/");
503 
504        TransitiveClosureEngine engine = new TransitiveClosureEngine(factory.getPackages().values(), startCriteria, stopCriteria, new ClosureInboundSelector());
505        engine.computeLayers(4);
506 
507        assertEquals("Nb layers", 2, engine.getNbLayers());
508 
509        assertEquals("Nb inbounds from c.C.c", c_C_c.getInboundDependencies().size(), ((Node) engine.getLayer(0).iterator().next()).getInboundDependencies().size());
510        assertEquals("Nb inbounds from b.B.b", 0,                      ((Node) engine.getLayer(1).iterator().next()).getInboundDependencies().size());
511        
512        assertEquals("packages in scope: ", 2, engine.getFactory().getPackages().values().size());
513        assertEquals("classes in scope" ,   2, engine.getFactory().getClasses().values().size());
514        assertEquals("features in scope",   2, engine.getFactory().getFeatures().values().size());
515 
516        assertEquals("package b in scope",     b,     engine.getFactory().getPackages().get("b"));
517        assertEquals("class b.B in scope",     b_B,   engine.getFactory().getClasses().get("b.B"));
518        assertEquals("feature b.B.b in scope", b_B_b, engine.getFactory().getFeatures().get("b.B.b"));
519        assertEquals("package c in scope",     c,     engine.getFactory().getPackages().get("c"));
520        assertEquals("class c.C in scope",     c_C,   engine.getFactory().getClasses().get("c.C"));
521        assertEquals("feature c.C.c in scope", c_C_c, engine.getFactory().getFeatures().get("c.C.c"));
522    }
523 
524    public void testComputeAllOutboundLayersP2P() {
525        startCriteria.setGlobalIncludes("/^a/");
526        stopCriteria.setGlobalIncludes("/^c/");
527 
528        TransitiveClosureEngine engine = new TransitiveClosureEngine(factory.getPackages().values(), startCriteria, stopCriteria, new ClosureOutboundSelector());
529        engine.computeAllLayers();
530 
531        assertEquals("Nb layers", 3, engine.getNbLayers());
532 
533        Node node = null;
534        Iterator i = engine.getLayer(0).iterator();
535        while (i.hasNext()) {
536            Node temp = (Node) i.next();
537            if (temp.equals(a_A_a)) {
538                node = temp;
539            }
540        }
541 
542        assertEquals("Layer 0 size", 3, engine.getLayer(0).size());
543        assertEquals("Layer 0 content", a_A_a.getName(), node.getName());
544        assertEquals("Nb outbounds from a.A.a", a_A_a.getOutboundDependencies().size(), node.getOutboundDependencies().size());
545        assertEquals("Layer 1 size", 1, engine.getLayer(1).size());
546        assertEquals("Layer 1 content", b_B_b.getName(), ((Node) engine.getLayer(1).iterator().next()).getName());
547        assertEquals("Nb outbounds from b.B.b", b_B_b.getOutboundDependencies().size(), ((Node) engine.getLayer(1).iterator().next()).getOutboundDependencies().size());
548        assertEquals("Layer 2 size", 1, engine.getLayer(2).size());
549        assertEquals("Layer 2 content", c_C_c.getName(), ((Node) engine.getLayer(2).iterator().next()).getName());
550        assertEquals("Nb outbounds from c.C.c", c_C_c.getOutboundDependencies().size(), ((Node) engine.getLayer(2).iterator().next()).getOutboundDependencies().size());
551        
552        assertEquals("packages in scope: ", 3, engine.getFactory().getPackages().values().size());
553        assertEquals("classes in scope" ,   3, engine.getFactory().getClasses().values().size());
554        assertEquals("features in scope",   3, engine.getFactory().getFeatures().values().size());
555 
556        assertEquals("package a in scope",     a,     engine.getFactory().getPackages().get("a"));
557        assertEquals("class a.A in scope",     a_A,   engine.getFactory().getClasses().get("a.A"));
558        assertEquals("feature a.A.a in scope", a_A_a, engine.getFactory().getFeatures().get("a.A.a"));
559        assertEquals("package b in scope",     b,     engine.getFactory().getPackages().get("b"));
560        assertEquals("class b.B in scope",     b_B,   engine.getFactory().getClasses().get("b.B"));
561        assertEquals("feature b.B.b in scope", b_B_b, engine.getFactory().getFeatures().get("b.B.b"));
562        assertEquals("package c in scope",     c,     engine.getFactory().getPackages().get("c"));
563        assertEquals("class c.C in scope",     c_C,   engine.getFactory().getClasses().get("c.C"));
564        assertEquals("feature c.C.c in scope", c_C_c, engine.getFactory().getFeatures().get("c.C.c"));
565    }
566 
567    public void testComputeAllInboundLayersP2P() {
568        startCriteria.setGlobalIncludes("/^c/");
569        stopCriteria.setGlobalIncludes("/^a/");
570 
571        TransitiveClosureEngine engine = new TransitiveClosureEngine(factory.getPackages().values(), startCriteria, stopCriteria, new ClosureInboundSelector());
572        engine.computeAllLayers();
573 
574        assertEquals("Nb layers", 3, engine.getNbLayers());
575 
576        Node node = null;
577        Iterator i = engine.getLayer(0).iterator();
578        while (i.hasNext()) {
579            Node temp = (Node) i.next();
580            if (temp.equals(c_C_c)) {
581                node = temp;
582            }
583        }
584 
585        assertEquals("Layer 0 size", 3, engine.getLayer(0).size());
586        assertEquals("Layer 0 content", c_C_c.getName(), node.getName());
587        assertEquals("Nb inbounds from c.C.c", c_C_c.getInboundDependencies().size(), node.getInboundDependencies().size());
588        assertEquals("Layer 1 size", 1, engine.getLayer(1).size());
589        assertEquals("Layer 1 content", b_B_b.getName(), ((Node) engine.getLayer(1).iterator().next()).getName());
590        assertEquals("Nb inbounds from b.B.b", b_B_b.getInboundDependencies().size(), ((Node) engine.getLayer(1).iterator().next()).getInboundDependencies().size());
591        assertEquals("Layer 2 size", 1, engine.getLayer(1).size());
592        assertEquals("Layer 2 content", a_A_a.getName(), ((Node) engine.getLayer(2).iterator().next()).getName());
593        assertEquals("Nb inbounds from a.A.a", a_A_a.getInboundDependencies().size(), ((Node) engine.getLayer(2).iterator().next()).getInboundDependencies().size());
594        
595        assertEquals("packages in scope: ", 3, engine.getFactory().getPackages().values().size());
596        assertEquals("classes in scope" ,   3, engine.getFactory().getClasses().values().size());
597        assertEquals("features in scope",   3, engine.getFactory().getFeatures().values().size());
598 
599        assertEquals("package a in scope",     a,     engine.getFactory().getPackages().get("a"));
600        assertEquals("class a.A in scope",     a_A,   engine.getFactory().getClasses().get("a.A"));
601        assertEquals("feature a.A.a in scope", a_A_a, engine.getFactory().getFeatures().get("a.A.a"));
602        assertEquals("package b in scope",     b,     engine.getFactory().getPackages().get("b"));
603        assertEquals("class b.B in scope",     b_B,   engine.getFactory().getClasses().get("b.B"));
604        assertEquals("feature b.B.b in scope", b_B_b, engine.getFactory().getFeatures().get("b.B.b"));
605        assertEquals("package c in scope",     c,     engine.getFactory().getPackages().get("c"));
606        assertEquals("class c.C in scope",     c_C,   engine.getFactory().getClasses().get("c.C"));
607        assertEquals("feature c.C.c in scope", c_C_c, engine.getFactory().getFeatures().get("c.C.c"));
608    }
609}

[all classes][com.jeantessier.dependency]
EMMA 2.0.5312 (C) Vladimir Roubtsov