1 /**
2  * PackageDependenciesTest.java
3  */
4 package com.eteks.sweethome3d.junit;
5 
6 import java.io.IOException;
7 
8 import jdepend.framework.DependencyConstraint;
9 import jdepend.framework.JDepend;
10 import jdepend.framework.JavaPackage;
11 import jdepend.framework.PackageFilter;
12 import junit.framework.TestCase;
13 
14 /**
15  * Tests if dependencies between Sweet Home 3D packages are met.
16  * @author Emmanuel Puybaret
17  */
18 public class PackageDependenciesTest extends TestCase {
19   /**
20    * Tests that the package dependencies constraint is met for the analyzed packages.
21    */
testPackageDependencies()22   public void testPackageDependencies() throws IOException {
23     PackageFilter packageFilter = new PackageFilter();
24     // Ignore Java packages
25     packageFilter.addPackage("java.*");
26     // Ignore JUnit tests
27     packageFilter.addPackage("com.eteks.sweethome3d.junit");
28 
29     JDepend jdepend = new JDepend(packageFilter);
30     jdepend.addDirectory("classes");
31 
32     DependencyConstraint constraint = new DependencyConstraint();
33     // Sweet Home 3D packages
34     JavaPackage sweetHome3DModel = constraint.addPackage("com.eteks.sweethome3d.model");
35     JavaPackage sweetHome3DTools = constraint.addPackage("com.eteks.sweethome3d.tools");
36     JavaPackage sweetHome3DPlugin = constraint.addPackage("com.eteks.sweethome3d.plugin");
37     JavaPackage sweetHome3DViewController = constraint.addPackage("com.eteks.sweethome3d.viewcontroller");
38     JavaPackage sweetHome3DSwing = constraint.addPackage("com.eteks.sweethome3d.swing");
39     JavaPackage sweetHome3DJava3D = constraint.addPackage("com.eteks.sweethome3d.j3d");
40     JavaPackage sweetHome3DIO = constraint.addPackage("com.eteks.sweethome3d.io");
41     JavaPackage sweetHome3DApplication = constraint.addPackage("com.eteks.sweethome3d");
42     JavaPackage sweetHome3DApplet = constraint.addPackage("com.eteks.sweethome3d.applet");
43     // Swing components packages
44     JavaPackage swing = constraint.addPackage("javax.swing");
45     JavaPackage swingEvent = constraint.addPackage("javax.swing.event");
46     JavaPackage swingUndo = constraint.addPackage("javax.swing.undo");
47     JavaPackage swingText = constraint.addPackage("javax.swing.text");
48     JavaPackage swingTextHtml = constraint.addPackage("javax.swing.text.html");
49     JavaPackage swingTable = constraint.addPackage("javax.swing.table");
50     JavaPackage swingTree = constraint.addPackage("javax.swing.tree");
51     JavaPackage swingBorder = constraint.addPackage("javax.swing.border");
52     JavaPackage swingColorchooser = constraint.addPackage("javax.swing.colorchooser");
53     JavaPackage swingFilechooser = constraint.addPackage("javax.swing.filechooser");
54     JavaPackage swingPlaf = constraint.addPackage("javax.swing.plaf");
55     JavaPackage swingPlafSynth = constraint.addPackage("javax.swing.plaf.synth");
56     JavaPackage imageio = constraint.addPackage("javax.imageio");
57     JavaPackage imageioStream = constraint.addPackage("javax.imageio.stream");
58     // Java 3D
59     JavaPackage java3d = constraint.addPackage("javax.media.j3d");
60     JavaPackage vecmath = constraint.addPackage("javax.vecmath");
61     JavaPackage sun3dLoaders = constraint.addPackage("com.sun.j3d.loaders");
62     JavaPackage sun3dLoadersLw3d = constraint.addPackage("com.sun.j3d.loaders.lw3d");
63     JavaPackage sun3dUtilsGeometry = constraint.addPackage("com.sun.j3d.utils.geometry");
64     JavaPackage sun3dUtilsPicking = constraint.addPackage("com.sun.j3d.utils.picking");
65     JavaPackage sun3dUtilsImage = constraint.addPackage("com.sun.j3d.utils.image");
66     JavaPackage sun3dUtilsUniverse = constraint.addPackage("com.sun.j3d.utils.universe");
67     JavaPackage sun3dExpSwing = constraint.addPackage("com.sun.j3d.exp.swing");
68     // XML
69     JavaPackage xmlParsers = constraint.addPackage("javax.xml.parsers");
70     JavaPackage xmlSax = constraint.addPackage("org.xml.sax");
71     JavaPackage xmlSaxHelpers = constraint.addPackage("org.xml.sax.helpers");
72     // JMF
73     JavaPackage jmf = constraint.addPackage("javax.media");
74     JavaPackage jmfControl = constraint.addPackage("javax.media.control");
75     JavaPackage jmfDataSink = constraint.addPackage("javax.media.datasink");
76     JavaPackage jmfFormat = constraint.addPackage("javax.media.format");
77     JavaPackage jmfProtocol = constraint.addPackage("javax.media.protocol");
78     // SunFlow
79     JavaPackage sunflow = constraint.addPackage("org.sunflow");
80     JavaPackage sunflowCore = constraint.addPackage("org.sunflow.core");
81     JavaPackage sunflowCoreLight = constraint.addPackage("org.sunflow.core.light");
82     JavaPackage sunflowCorePrimitive = constraint.addPackage("org.sunflow.core.primitive");
83     JavaPackage sunflowImage = constraint.addPackage("org.sunflow.image");
84     JavaPackage sunflowMath = constraint.addPackage("org.sunflow.math");
85     JavaPackage sunflowSystem = constraint.addPackage("org.sunflow.system");
86     JavaPackage sunflowSystemUI = constraint.addPackage("org.sunflow.system.ui");
87     // iText for PDF
88     JavaPackage iText = constraint.addPackage("com.lowagie.text");
89     JavaPackage iTextPdf = constraint.addPackage("com.lowagie.text.pdf");
90     // FreeHEP Vector Graphics for SVG
91     JavaPackage vectorGraphicsUtil = constraint.addPackage("org.freehep.util");
92     JavaPackage vectorGraphics = constraint.addPackage("org.freehep.graphicsio");
93     JavaPackage vectorGraphicsSvg = constraint.addPackage("org.freehep.graphicsio.svg");
94     // Batik for SVG path parsing
95     JavaPackage orgApacheBatikParser = constraint.addPackage("org.apache.batik.parser");
96     // eTeks Parser
97     JavaPackage eTeksParser = constraint.addPackage("com.eteks.parser");
98     // Java JNLP
99     JavaPackage jnlp = constraint.addPackage("javax.jnlp");
100     // Mac OS X specific interfaces
101     JavaPackage eawt = constraint.addPackage("com.apple.eawt");
102     JavaPackage eio = constraint.addPackage("com.apple.eio");
103 
104     // Describe dependencies : com.eteks.sweethome3d.model don't have any dependency on
105     // other packages, IO and View/Controller packages ignore each other
106     // and Swing components and Java 3D use are isolated in sweetHome3DSwing
107     sweetHome3DTools.dependsUpon(sweetHome3DModel);
108     sweetHome3DTools.dependsUpon(eio);
109 
110     sweetHome3DViewController.dependsUpon(sweetHome3DModel);
111     sweetHome3DViewController.dependsUpon(sweetHome3DTools);
112     sweetHome3DViewController.dependsUpon(swingEvent);
113     sweetHome3DViewController.dependsUpon(swingUndo);
114     sweetHome3DViewController.dependsUpon(swingText);
115     sweetHome3DViewController.dependsUpon(swingTextHtml);
116 
117     sweetHome3DPlugin.dependsUpon(sweetHome3DModel);
118     sweetHome3DPlugin.dependsUpon(sweetHome3DTools);
119     sweetHome3DPlugin.dependsUpon(sweetHome3DViewController);
120     sweetHome3DPlugin.dependsUpon(swingUndo);
121 
122     sweetHome3DJava3D.dependsUpon(sweetHome3DModel);
123     sweetHome3DJava3D.dependsUpon(sweetHome3DTools);
124     sweetHome3DJava3D.dependsUpon(sweetHome3DViewController);
125     sweetHome3DJava3D.dependsUpon(java3d);
126     sweetHome3DJava3D.dependsUpon(vecmath);
127     sweetHome3DJava3D.dependsUpon(sun3dLoaders);
128     sweetHome3DJava3D.dependsUpon(sun3dLoadersLw3d);
129     sweetHome3DJava3D.dependsUpon(sun3dUtilsGeometry);
130     sweetHome3DJava3D.dependsUpon(sun3dUtilsImage);
131     sweetHome3DJava3D.dependsUpon(sun3dUtilsUniverse);
132     sweetHome3DJava3D.dependsUpon(imageio);
133     sweetHome3DJava3D.dependsUpon(swing);
134     sweetHome3DJava3D.dependsUpon(sunflow);
135     sweetHome3DJava3D.dependsUpon(sunflowCore);
136     sweetHome3DJava3D.dependsUpon(sunflowCoreLight);
137     sweetHome3DJava3D.dependsUpon(sunflowCorePrimitive);
138     sweetHome3DJava3D.dependsUpon(sunflowImage);
139     sweetHome3DJava3D.dependsUpon(sunflowMath);
140     sweetHome3DJava3D.dependsUpon(sunflowSystem);
141     sweetHome3DJava3D.dependsUpon(sunflowSystemUI);
142     sweetHome3DJava3D.dependsUpon(xmlParsers);
143     sweetHome3DJava3D.dependsUpon(xmlSax);
144     sweetHome3DJava3D.dependsUpon(xmlSaxHelpers);
145     sweetHome3DJava3D.dependsUpon(orgApacheBatikParser);
146 
147     sweetHome3DSwing.dependsUpon(sweetHome3DModel);
148     sweetHome3DSwing.dependsUpon(sweetHome3DTools);
149     sweetHome3DSwing.dependsUpon(sweetHome3DPlugin);
150     sweetHome3DSwing.dependsUpon(sweetHome3DViewController);
151     sweetHome3DSwing.dependsUpon(sweetHome3DJava3D);
152     sweetHome3DSwing.dependsUpon(eTeksParser);
153     sweetHome3DSwing.dependsUpon(swing);
154     sweetHome3DSwing.dependsUpon(swingEvent);
155     sweetHome3DSwing.dependsUpon(swingText);
156     sweetHome3DSwing.dependsUpon(swingTextHtml);
157     sweetHome3DSwing.dependsUpon(swingTable);
158     sweetHome3DSwing.dependsUpon(swingTree);
159     sweetHome3DSwing.dependsUpon(swingBorder);
160     sweetHome3DSwing.dependsUpon(swingColorchooser);
161     sweetHome3DSwing.dependsUpon(swingFilechooser);
162     sweetHome3DSwing.dependsUpon(swingPlaf);
163     sweetHome3DSwing.dependsUpon(swingPlafSynth);
164     sweetHome3DSwing.dependsUpon(imageio);
165     sweetHome3DSwing.dependsUpon(imageioStream);
166     sweetHome3DSwing.dependsUpon(java3d);
167     sweetHome3DSwing.dependsUpon(vecmath);
168     sweetHome3DSwing.dependsUpon(sun3dUtilsGeometry);
169     sweetHome3DSwing.dependsUpon(sun3dUtilsPicking);
170     sweetHome3DSwing.dependsUpon(sun3dUtilsUniverse);
171     sweetHome3DSwing.dependsUpon(sun3dExpSwing);
172     sweetHome3DSwing.dependsUpon(jmf);
173     sweetHome3DSwing.dependsUpon(jmfControl);
174     sweetHome3DSwing.dependsUpon(jmfDataSink);
175     sweetHome3DSwing.dependsUpon(jmfFormat);
176     sweetHome3DSwing.dependsUpon(jmfProtocol);
177     sweetHome3DSwing.dependsUpon(iText);
178     sweetHome3DSwing.dependsUpon(iTextPdf);
179     sweetHome3DSwing.dependsUpon(vectorGraphicsUtil);
180     sweetHome3DSwing.dependsUpon(vectorGraphics);
181     sweetHome3DSwing.dependsUpon(vectorGraphicsSvg);
182     sweetHome3DSwing.dependsUpon(jnlp);
183 
184     sweetHome3DIO.dependsUpon(sweetHome3DModel);
185     sweetHome3DIO.dependsUpon(sweetHome3DTools);
186     sweetHome3DIO.dependsUpon(xmlParsers);
187     sweetHome3DIO.dependsUpon(xmlSax);
188     sweetHome3DIO.dependsUpon(xmlSaxHelpers);
189 
190     // Describe application and applet assembly packages
191     sweetHome3DApplication.dependsUpon(sweetHome3DModel);
192     sweetHome3DApplication.dependsUpon(sweetHome3DTools);
193     sweetHome3DApplication.dependsUpon(sweetHome3DPlugin);
194     sweetHome3DApplication.dependsUpon(sweetHome3DViewController);
195     sweetHome3DApplication.dependsUpon(sweetHome3DJava3D);
196     sweetHome3DApplication.dependsUpon(sweetHome3DSwing);
197     sweetHome3DApplication.dependsUpon(sweetHome3DIO);
198     sweetHome3DApplication.dependsUpon(swing);
199     sweetHome3DApplication.dependsUpon(swingEvent);
200     sweetHome3DApplication.dependsUpon(swingBorder);
201     sweetHome3DApplication.dependsUpon(imageio);
202     sweetHome3DApplication.dependsUpon(java3d);
203     sweetHome3DApplication.dependsUpon(sun3dExpSwing);
204     sweetHome3DApplication.dependsUpon(eawt);
205     sweetHome3DApplication.dependsUpon(xmlParsers);
206     sweetHome3DApplication.dependsUpon(xmlSax);
207     sweetHome3DApplication.dependsUpon(xmlSaxHelpers);
208     sweetHome3DApplication.dependsUpon(jnlp);
209 
210     sweetHome3DApplet.dependsUpon(sweetHome3DModel);
211     sweetHome3DApplet.dependsUpon(sweetHome3DTools);
212     sweetHome3DApplet.dependsUpon(sweetHome3DPlugin);
213     sweetHome3DApplet.dependsUpon(sweetHome3DViewController);
214     sweetHome3DApplet.dependsUpon(sweetHome3DJava3D);
215     sweetHome3DApplet.dependsUpon(sweetHome3DSwing);
216     sweetHome3DApplet.dependsUpon(sweetHome3DIO);
217     sweetHome3DApplet.dependsUpon(swing);
218     sweetHome3DApplet.dependsUpon(swingEvent);
219     sweetHome3DApplet.dependsUpon(swingTable);
220     sweetHome3DApplet.dependsUpon(java3d);
221     sweetHome3DApplet.dependsUpon(jnlp);
222 
223     jdepend.analyze();
224 
225     assertTrue("Dependency mismatch", jdepend.dependencyMatch(constraint));
226   }
227 }
228