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