Moved jdvue utility from ONOS-tools repo into onos repo.

Change-Id: I0bc1cef80541075c800c5309cb642a244a79fa0b
diff --git a/utils/jdvue/src/test/java/org/onlab/jdvue/CatalogTest.java b/utils/jdvue/src/test/java/org/onlab/jdvue/CatalogTest.java
new file mode 100644
index 0000000..99d2208
--- /dev/null
+++ b/utils/jdvue/src/test/java/org/onlab/jdvue/CatalogTest.java
@@ -0,0 +1,43 @@
+package org.onlab.jdvue;
+
+import org.junit.Test;
+import org.onlab.jdvue.Catalog;
+import org.onlab.jdvue.JavaPackage;
+import org.onlab.jdvue.JavaSource;
+
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+/**
+ * Unit test for the source catalog.
+ *
+ * @author Thomas Vachuska
+ */
+public class CatalogTest {
+
+    @Test
+    public void basics() throws IOException {
+        Catalog cat = new Catalog();
+        cat.load("src/test/resources/catalog.db");
+        cat.analyze();
+
+        assertEquals("incorrect package count", 12, cat.getPackages().size());
+        assertEquals("incorrect source count", 14, cat.getSources().size());
+
+        JavaPackage pkg = cat.getPackage("k");
+        assertNotNull("package should be found", pkg);
+
+        JavaSource src = cat.getSource("k.K");
+        assertNotNull("source should be found", src);
+
+        assertEquals("incorrect package source count", 1, pkg.getSources().size());
+        assertEquals("incorrect package dependency count", 1, pkg.getDependencies().size());
+        assertEquals("incorrect package cycle count", 3, cat.getPackageCycles(pkg).size());
+
+        assertEquals("incorrect segment count", 11, cat.getCycleSegments().size());
+        assertEquals("incorrect cycle count", 5, cat.getCycles().size());
+    }
+
+}
diff --git a/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyCycleTest.java b/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyCycleTest.java
new file mode 100644
index 0000000..a0a7c7c
--- /dev/null
+++ b/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyCycleTest.java
@@ -0,0 +1,47 @@
+package org.onlab.jdvue;
+
+import org.junit.Test;
+import org.onlab.jdvue.DependencyCycle;
+import org.onlab.jdvue.JavaPackage;
+
+import java.util.Arrays;
+
+import static org.junit.Assert.*;
+
+/**
+ * Unit test for the dependency cycle entity.
+ *
+ * @author Thomas Vachuska
+ */
+public class DependencyCycleTest {
+
+    @Test
+    public void normalize() {
+        JavaPackage x = new JavaPackage("x");
+        JavaPackage y = new JavaPackage("y");
+        JavaPackage z = new JavaPackage("z");
+
+        DependencyCycle a = new DependencyCycle(Arrays.asList(new JavaPackage[] {x, y, z}), x);
+        DependencyCycle b = new DependencyCycle(Arrays.asList(new JavaPackage[] {y, z, x}), y);
+        DependencyCycle c = new DependencyCycle(Arrays.asList(new JavaPackage[] {z, x, y}), z);
+
+        assertEquals("incorrect normalization", a, b);
+        assertEquals("incorrect normalization", a, c);
+    }
+
+    @Test
+    public void testToString() {
+        JavaPackage x = new JavaPackage("x");
+        JavaPackage y = new JavaPackage("y");
+        JavaPackage z = new JavaPackage("z");
+
+        DependencyCycle a = new DependencyCycle(Arrays.asList(new JavaPackage[] {x, y, z}), x);
+        assertEquals("incorrect toString", "[x, y, z]", a.toShortString());
+        assertEquals("incorrect toString",
+                     "DependencyCycle{cycle=[" +
+                             "JavaPackage{name=x, sources=0, dependencies=0}, " +
+                             "JavaPackage{name=y, sources=0, dependencies=0}, " +
+                             "JavaPackage{name=z, sources=0, dependencies=0}]}",
+                     a.toString());
+    }
+}
diff --git a/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyTest.java b/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyTest.java
new file mode 100644
index 0000000..4dfe961
--- /dev/null
+++ b/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyTest.java
@@ -0,0 +1,29 @@
+package org.onlab.jdvue;
+
+import com.google.common.testing.EqualsTester;
+import org.junit.Test;
+import org.onlab.jdvue.Dependency;
+import org.onlab.jdvue.JavaPackage;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+
+/**
+ * Unit test for the dependency entity.
+ *
+ * @author Thomas Vachuska
+ */
+public class DependencyTest {
+
+    @Test
+    public void basics() {
+        JavaPackage x = new JavaPackage("x");
+        JavaPackage y = new JavaPackage("y");
+
+        new EqualsTester()
+                .addEqualityGroup(new Dependency(x, y), new Dependency(x, y))
+                .addEqualityGroup(new Dependency(y, x), new Dependency(y, x))
+                .testEquals();
+    }
+
+}
diff --git a/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyViewerTest.java b/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyViewerTest.java
new file mode 100644
index 0000000..cdac0c2
--- /dev/null
+++ b/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyViewerTest.java
@@ -0,0 +1,31 @@
+package org.onlab.jdvue;
+
+import org.junit.Test;
+import org.onlab.jdvue.DependencyViewer;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.onlab.jdvue.DependencyViewer.slurp;
+
+/**
+ * Unit test for the dependency viewer.
+ *
+ * @author Thomas Vachuska
+ */
+public class DependencyViewerTest {
+
+    @Test
+    public void basics() throws IOException {
+        DependencyViewer.main(new String[]{"src/test/resources/catalog"});
+
+        String expected = slurp(new FileInputStream("src/test/resources/expected.html"));
+        String actual = slurp(new FileInputStream("src/test/resources/catalog.html"));
+
+        // FIXME: add more manageable assertions here
+//        assertEquals("incorrect html", expected, actual);
+    }
+
+}