1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.cli2.jdepend;
18
19 import java.io.IOException;
20 import java.util.ArrayList;
21 import java.util.Collection;
22 import java.util.Iterator;
23
24 import jdepend.framework.JDepend;
25 import jdepend.framework.JavaPackage;
26 import junit.framework.TestCase;
27
28
29
30
31 public class JDependTest extends TestCase {
32
33 private JDepend dependancies = null;
34
35 public void setUp() throws IOException {
36 dependancies = new JDepend();
37 dependancies.addDirectory("target/classes");
38 dependancies.analyze();
39 }
40
41 public void testJUnitNotPresent() {
42
43
44 assertNull(
45 "JUnit dependancy found",
46 dependancies.getPackage("junit.framework"));
47
48
49 assertNull(
50 "JDepend dependancy found",
51 dependancies.getPackage("jdepend.framework"));
52 }
53
54 public void testAcceptableDistance() {
55 Collection packages = dependancies.getPackages();
56
57 packages = cli2Packages(packages);
58
59 packages =
60 namedPackages(packages, "org.apache.commons.cli2.resource", false);
61
62 for (final Iterator i = packages.iterator(); i.hasNext();) {
63 final JavaPackage pkg = (JavaPackage)i.next();
64 final float distance = pkg.distance();
65 final String message = pkg.getName() + " too far from line: " + distance;
66 assertTrue(
67 message,
68 distance < 0.21d);
69 }
70 }
71
72 public void testNoCyclesPresent() {
73 assertEquals("Cycles exist", false, dependancies.containsCycles());
74 }
75
76 public void testApiIndependance() {
77 dependancies.analyze();
78
79 final JavaPackage apiPackage =
80 dependancies.getPackage("org.apache.commons.cli2");
81 final Collection dependsUpon = cli2Packages(apiPackage.getEfferents());
82
83 assertEquals("Api should depend on one package", 1, dependsUpon.size());
84
85 JavaPackage pkg = (JavaPackage) dependsUpon.iterator().next();
86 assertEquals(
87 "Wrong package name",
88 "org.apache.commons.cli2.resource",
89 pkg.getName());
90 }
91
92 private Collection cli2Packages(final Collection incoming) {
93 return namedPackages(incoming, "org.apache.commons.cli2", true);
94 }
95
96 private Collection namedPackages(
97 final Collection incoming,
98 final String name,
99 final boolean include) {
100 final Collection outgoing = new ArrayList();
101 for (final Iterator i = incoming.iterator(); i.hasNext();) {
102 final JavaPackage pkg = (JavaPackage)i.next();
103 if (include ^ !pkg.getName().startsWith(name)) {
104 outgoing.add(pkg);
105 }
106 }
107 return outgoing;
108 }
109 }