001: package jdepend.framework;
002:
003: import java.util.ArrayList;
004: import java.util.List;
005:
006: /**
007: * @author <b>Mike Clark</b>
008: * @author Clarkware Consulting, Inc.
009: */
010:
011: public class CollectAllCyclesTest extends JDependTestCase {
012:
013: public CollectAllCyclesTest(String name) {
014: super (name);
015: }
016:
017: public void testNoCycles() {
018:
019: JavaPackage a = new JavaPackage("A");
020: JavaPackage b = new JavaPackage("B");
021:
022: a.dependsUpon(b);
023:
024: List aCycles = new ArrayList();
025: assertEquals(false, a.containsCycle());
026: assertEquals(false, a.collectAllCycles(aCycles));
027: assertListEquals(aCycles, new String[] {});
028:
029: List bCycles = new ArrayList();
030: assertEquals(false, b.containsCycle());
031: assertEquals(false, b.collectAllCycles(bCycles));
032: assertListEquals(bCycles, new String[] {});
033: }
034:
035: public void test2Node1BranchCycle() {
036:
037: JavaPackage a = new JavaPackage("A");
038: JavaPackage b = new JavaPackage("B");
039:
040: a.dependsUpon(b);
041: b.dependsUpon(a);
042:
043: List aCycles = new ArrayList();
044: assertEquals(true, a.containsCycle());
045: assertEquals(true, a.collectAllCycles(aCycles));
046: assertListEquals(aCycles, new String[] { "A", "B", "A" });
047:
048: List bCycles = new ArrayList();
049: assertEquals(true, b.containsCycle());
050: assertEquals(true, b.collectAllCycles(bCycles));
051: assertListEquals(bCycles, new String[] { "B", "A", "B" });
052: }
053:
054: public void test3Node1BranchCycle() {
055:
056: JavaPackage a = new JavaPackage("A");
057: JavaPackage b = new JavaPackage("B");
058: JavaPackage c = new JavaPackage("C");
059:
060: a.dependsUpon(b);
061: b.dependsUpon(c);
062: c.dependsUpon(a);
063:
064: List aCycles = new ArrayList();
065: assertEquals(true, a.containsCycle());
066: assertEquals(true, a.collectAllCycles(aCycles));
067: assertListEquals(aCycles, new String[] { "A", "B", "C", "A" });
068:
069: List bCycles = new ArrayList();
070: assertEquals(true, b.containsCycle());
071: assertEquals(true, b.collectAllCycles(bCycles));
072: assertListEquals(bCycles, new String[] { "B", "C", "A", "B" });
073:
074: List cCycles = new ArrayList();
075: assertEquals(true, c.containsCycle());
076: assertEquals(true, c.collectAllCycles(cCycles));
077: assertListEquals(cCycles, new String[] { "C", "A", "B", "C" });
078: }
079:
080: public void test3Node1BranchSubCycle() {
081:
082: JavaPackage a = new JavaPackage("A");
083: JavaPackage b = new JavaPackage("B");
084: JavaPackage c = new JavaPackage("C");
085:
086: a.dependsUpon(b);
087: b.dependsUpon(c);
088: c.dependsUpon(b);
089:
090: List aCycles = new ArrayList();
091: assertEquals(true, a.containsCycle());
092: assertEquals(true, a.collectAllCycles(aCycles));
093: assertListEquals(aCycles, new String[] { "A", "B", "C", "B" });
094:
095: List bCycles = new ArrayList();
096: assertEquals(true, b.containsCycle());
097: assertEquals(true, b.collectAllCycles(bCycles));
098: assertListEquals(bCycles, new String[] { "B", "C", "B" });
099:
100: List cCycles = new ArrayList();
101: assertEquals(true, c.containsCycle());
102: assertEquals(true, c.collectAllCycles(cCycles));
103: assertListEquals(cCycles, new String[] { "C", "B", "C" });
104: }
105:
106: public void test3Node2BranchCycle() {
107:
108: JavaPackage a = new JavaPackage("A");
109: JavaPackage b = new JavaPackage("B");
110: JavaPackage c = new JavaPackage("C");
111:
112: a.dependsUpon(b);
113: b.dependsUpon(a);
114:
115: a.dependsUpon(c);
116: c.dependsUpon(a);
117:
118: List aCycles = new ArrayList();
119: assertEquals(true, a.containsCycle());
120: assertEquals(true, a.collectAllCycles(aCycles));
121: assertListEquals(aCycles, new String[] { "A", "B", "A", "C",
122: "A" });
123:
124: List bCycles = new ArrayList();
125: assertEquals(true, b.containsCycle());
126: assertEquals(true, b.collectAllCycles(bCycles));
127: assertListEquals(bCycles, new String[] { "B", "A", "B", "C",
128: "A" });
129:
130: List cCycles = new ArrayList();
131: assertEquals(true, c.containsCycle());
132: assertEquals(true, c.collectAllCycles(cCycles));
133: assertListEquals(cCycles, new String[] { "C", "A", "B", "A",
134: "C" });
135: }
136:
137: public void test5Node2BranchCycle() {
138:
139: JavaPackage a = new JavaPackage("A");
140: JavaPackage b = new JavaPackage("B");
141: JavaPackage c = new JavaPackage("C");
142: JavaPackage d = new JavaPackage("D");
143: JavaPackage e = new JavaPackage("E");
144:
145: a.dependsUpon(b);
146: b.dependsUpon(c);
147: c.dependsUpon(a);
148:
149: a.dependsUpon(d);
150: d.dependsUpon(e);
151: e.dependsUpon(a);
152:
153: List aCycles = new ArrayList();
154: assertEquals(true, a.containsCycle());
155: assertEquals(true, a.collectAllCycles(aCycles));
156: assertListEquals(aCycles, new String[] { "A", "B", "C", "A",
157: "D", "E", "A" });
158:
159: List bCycles = new ArrayList();
160: assertEquals(true, b.containsCycle());
161: assertEquals(true, b.collectAllCycles(bCycles));
162: assertListEquals(bCycles, new String[] { "B", "C", "A", "B",
163: "D", "E", "A" });
164:
165: List cCycles = new ArrayList();
166: assertEquals(true, c.containsCycle());
167: assertEquals(true, c.collectAllCycles(cCycles));
168: assertListEquals(cCycles, new String[] { "C", "A", "B", "C",
169: "D", "E", "A" });
170:
171: List dCycles = new ArrayList();
172: assertEquals(true, d.containsCycle());
173: assertEquals(true, d.collectAllCycles(dCycles));
174: assertListEquals(dCycles, new String[] { "D", "E", "A", "B",
175: "C", "A", "D" });
176:
177: List eCycles = new ArrayList();
178: assertEquals(true, e.containsCycle());
179: assertEquals(true, e.collectAllCycles(eCycles));
180: assertListEquals(eCycles, new String[] { "E", "A", "B", "C",
181: "A", "D", "E" });
182: }
183:
184: protected void assertListEquals(List list, String names[]) {
185:
186: assertEquals(names.length, list.size());
187:
188: for (int i = 0; i < names.length; i++) {
189: assertEquals(names[i], ((JavaPackage) list.get(i))
190: .getName());
191: }
192: }
193: }
|