public void VisualizeNullObject()
        {
            var   visualizer = new ObjectGraphVisualizer();
            IData data;

            Assert.Throws <ArgumentNullException>(() => visualizer.Visualize(null, out data));
        }
        public void VisualizeGraphWithArray()
        {
            var   visualizer = new ObjectGraphVisualizer();
            IData data;

            var root = new ArrayObj();

            root.array = new LeafObj[] { new LeafObj(), new LeafObj() };

            var dot = visualizer.Visualize(root, out data);

            Assert.That(dot, Does.Contain(
                            "1 [ label=\"YetiCommon.Tests.Util.ArrayObj\" id=\"dark googlegreen\" ];"));
            Assert.That(dot, Does.Contain(
                            "2 [ label=\"YetiCommon.Tests.Util.LeafObj\" id=\"dark googlered\" ];"));
            Assert.That(dot, Does.Contain(
                            "3 [ label=\"YetiCommon.Tests.Util.LeafObj\" id=\"dark googlered\" ];"));

            Assert.That(dot, Does.Contain("1 -> 2 [ label=\"array[0]\" ];"));
            Assert.That(dot, Does.Contain("1 -> 3 [ label=\"array[1]\" ];"));

            Assert.That(data.RootObject, Is.EqualTo(root));
            Assert.That(data.InternalNodes, Is.EquivalentTo(new object[] { root }));
            Assert.That(data.TruncatedNodes, Is.Empty);
            Assert.That(data.LeafNodes,
                        Is.EquivalentTo(new object[] { root.array[0], root.array[1] }));
        }
        public void GraphSettings()
        {
            var   visualizer = new ObjectGraphVisualizer();
            IData data;

            var root = new RootObj();

            var dot = visualizer.Visualize(root, out data);


            Assert.That(dot, Does.Contain("graph [splines=ortho]"));
            Assert.That(dot, Does.Contain("node [shape=box style=rounded]"));
        }
        public void VisualizeSimpleObjectWithPrimitives()
        {
            var   visualizer = new ObjectGraphVisualizer();
            IData data;

            var root = new SimpleObj();

            var dot = visualizer.Visualize(root, out data);

            Assert.That(dot, Does.Contain(
                            "1 [ label=\"YetiCommon.Tests.Util.SimpleObj\" id=\"dark googlegreen\" ];"));

            Assert.That(data.RootObject, Is.EqualTo(root));
            Assert.That(data.InternalNodes, Is.Empty);
            Assert.That(data.TruncatedNodes, Is.Empty);
            Assert.That(data.LeafNodes, Is.EquivalentTo(new object[] { root }));
        }
        public void VisualizeGraphWithCycle()
        {
            var   visualizer = new ObjectGraphVisualizer();
            IData data;

            var root = new NodeObj();

            root.next      = new NodeObj();
            root.next.next = root;

            var dot = visualizer.Visualize(root, out data);

            Assert.That(dot, Does.Contain(
                            "1 [ label=\"YetiCommon.Tests.Util.NodeObj\" id=\"dark googlegreen\" ];"));
            Assert.That(dot, Does.Contain("2 [ label=\"YetiCommon.Tests.Util.NodeObj\" ];"));

            Assert.That(dot, Does.Contain("1 -> 2 [ label=\"next\" ];"));
            Assert.That(dot, Does.Contain("2 -> 1 [ label=\"next\" ];"));

            Assert.That(data.RootObject, Is.EqualTo(root));
            Assert.That(data.InternalNodes, Is.EquivalentTo(new object[] { root, root.next }));
            Assert.That(data.TruncatedNodes, Is.Empty);
            Assert.That(data.LeafNodes, Is.Empty);
        }
        public void InspectObjDelegate()
        {
            var visualizer = new ObjectGraphVisualizer(
                o => { return(o.Object.GetType().Equals(typeof(RootObj))); });
            IData data;

            var root = new RootObj();

            var dot = visualizer.Visualize(root, out data);

            Assert.That(dot, Does.Contain(
                            "1 [ label=\"YetiCommon.Tests.Util.RootObj\" id=\"dark googlegreen\" ];"));
            Assert.That(dot, Does.Contain(
                            "2 [ label=\"YetiCommon.Tests.Util.InteriorObj\" id=\"googlered\" ];"));
            Assert.That(dot, Does.Not.Contain("YetiCommon.Tests.Util.LeafObj"));

            Assert.That(dot, Does.Contain("1 -> 2 [ label=\"interiorObj\" ];"));
            Assert.That(dot, Does.Not.Contain("2 -> 3"));

            Assert.That(data.RootObject, Is.EqualTo(root));
            Assert.That(data.InternalNodes, Is.EquivalentTo(new object[] { root }));
            Assert.That(data.TruncatedNodes, Is.EquivalentTo(new object[] { root.interiorObj }));
            Assert.That(data.LeafNodes, Is.Empty);
        }
        public void VisualizeSimpleGraph()
        {
            var   visualizer = new ObjectGraphVisualizer();
            IData data;

            var root = new RootObj();

            var dot = visualizer.Visualize(root, out data);

            Assert.That(dot, Does.Contain(
                            "1 [ label=\"YetiCommon.Tests.Util.RootObj\" id=\"dark googlegreen\" ];"));
            Assert.That(dot, Does.Contain("2 [ label=\"YetiCommon.Tests.Util.InteriorObj\" ];"));
            Assert.That(dot, Does.Contain(
                            "3 [ label=\"YetiCommon.Tests.Util.LeafObj\" id=\"dark googlered\" ];"));

            Assert.That(dot, Does.Contain("1 -> 2 [ label=\"interiorObj\" ];"));
            Assert.That(dot, Does.Contain("2 -> 3 [ label=\"leafObj\" ];"));

            Assert.That(data.RootObject, Is.EqualTo(root));
            Assert.That(data.InternalNodes,
                        Is.EquivalentTo(new object[] { root, root.interiorObj }));
            Assert.That(data.TruncatedNodes, Is.Empty);
            Assert.That(data.LeafNodes, Is.EquivalentTo(new object[] { root.interiorObj.leafObj }));
        }