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

COVERAGE SUMMARY FOR SOURCE FILE [CycleDetectorFixture.java]

nameclass, %method, %block, %line, %
CycleDetectorFixture.java100% (2/2)100% (11/11)100% (195/195)100% (47/47)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class CycleDetectorFixture100% (1/1)100% (10/10)100% (189/189)100% (44/44)
CycleDetectorFixture (): void 100% (1/1)100% (3/3)100% (2/2)
detectClassToClassCyclesScopeIncludes (String): void 100% (1/1)100% (12/12)100% (3/3)
detectCycles (): void 100% (1/1)100% (6/6)100% (2/2)
detectCyclesScopeIncludes (String): void 100% (1/1)100% (10/10)100% (2/2)
detectCyclesScopeIncludesList (String): void 100% (1/1)100% (23/23)100% (5/5)
doDetectCycles (Visitor): void 100% (1/1)100% (11/11)100% (3/3)
doReduceGraphToClasses (): void 100% (1/1)100% (46/46)100% (12/12)
getCycle (int): Cycle 100% (1/1)100% (15/15)100% (3/3)
pathForCycle (int): Fixture 100% (1/1)100% (8/8)100% (1/1)
textForCycle (int): Fixture 100% (1/1)100% (55/55)100% (11/11)
     
class CycleDetectorFixture$Line100% (1/1)100% (1/1)100% (6/6)100% (3/3)
CycleDetectorFixture$Line (String): void 100% (1/1)100% (6/6)100% (3/3)

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.*;
36import java.io.*;
37 
38import fitlibrary.*;
39import fit.*;
40 
41public class CycleDetectorFixture extends NodeFactoryFixture {
42    public void detectCycles() {
43        doDetectCycles(new CycleDetector());
44    }
45 
46    public void detectCyclesScopeIncludes(String scopeIncludes) {
47        doDetectCycles(new CycleDetector(new RegularExpressionSelectionCriteria(scopeIncludes)));
48    }
49 
50    public void detectCyclesScopeIncludesList(String scopeIncludesList) {
51        Collection<String> includes = new ArrayList<String>();
52        includes.add(scopeIncludesList);
53        Collection<String> excludes = new ArrayList<String>();
54 
55        doDetectCycles(new CycleDetector(new CollectionSelectionCriteria(includes, excludes)));
56    }
57 
58    public void detectClassToClassCyclesScopeIncludes(String scopeIncludes) {
59        doReduceGraphToClasses();
60        doDetectCycles(new CycleDetector(new RegularExpressionSelectionCriteria(scopeIncludes)));
61    }
62 
63    private void doDetectCycles(Visitor visitor) {
64        visitor.traverseNodes(((NodeFactory) getSystemUnderTest()).getPackages().values());
65        setSystemUnderTest(visitor);
66    }
67 
68    private void doReduceGraphToClasses() {
69        RegularExpressionSelectionCriteria scopeCriteria = new RegularExpressionSelectionCriteria("//");
70        scopeCriteria.setMatchingPackages(false);
71        scopeCriteria.setMatchingClasses(true);
72        scopeCriteria.setMatchingFeatures(false);
73        RegularExpressionSelectionCriteria filterCriteria = new RegularExpressionSelectionCriteria("//");
74        filterCriteria.setMatchingPackages(false);
75        filterCriteria.setMatchingClasses(true);
76        filterCriteria.setMatchingFeatures(false);
77        GraphSummarizer summarizer = new GraphSummarizer(scopeCriteria, filterCriteria);
78        summarizer.traverseNodes(((NodeFactory) getSystemUnderTest()).getPackages().values());
79        setSystemUnderTest(summarizer.getScopeFactory());
80    }
81 
82    public Fixture pathForCycle(int pos) {
83        return new ArrayFixture(getCycle(pos).getPath());
84    }
85 
86    public Fixture textForCycle(int pos) throws IOException {
87        StringWriter buffer = new StringWriter();
88        PrintWriter out = new PrintWriter(buffer);
89        CyclePrinter printer = new TextCyclePrinter(out);
90        printer.visitCycle(getCycle(pos));
91        out.close();
92 
93        List<Line> lines = new ArrayList<Line>();
94 
95        BufferedReader in = new BufferedReader(new StringReader(buffer.toString()));
96        String line;
97        while ((line = in.readLine()) != null) {
98            lines.add(new Line(line.trim()));
99        }
100        in.close();
101 
102        return new ArrayFixture(lines);
103    }
104 
105    private Cycle getCycle(int pos) {
106        CycleDetector detector = (CycleDetector) getSystemUnderTest();
107        ArrayList<Cycle> cycles = new ArrayList<Cycle>(detector.getCycles());
108        return cycles.get(pos);
109    }
110 
111    public static class Line {
112        public String line;
113        public Line(String line) {
114            this.line = line;
115        }
116    }
117}

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