示例#1
0
        public void Generate_WithEscape()
        {
            const string vertex1   = "Vertex1&/<>@~|";
            const string vertex2   = "Vertex2æéèê룤¶ÀÁÂÃÄÅ";
            const string vertex3   = "\"Vertex3\"\nΣη← ♠\\[]()";
            const string vertex4   = "Vertex4∴∞⇐ℜΩ÷嗷娪";
            var          subGraph1 = new AdjacencyGraph <string, Edge <string> >();

            subGraph1.AddVerticesAndEdgeRange(new[]
            {
                new Edge <string>(vertex1, vertex2),
                new Edge <string>(vertex2, vertex2),
                new Edge <string>(vertex3, vertex1)
            });

            var subGraph2 = new AdjacencyGraph <string, Edge <string> >();

            subGraph2.AddVerticesAndEdgeRange(new[]
            {
                new Edge <string>(vertex1, vertex1),
                new Edge <string>(vertex1, vertex2),
                new Edge <string>(vertex2, vertex3),
                new Edge <string>(vertex2, vertex4),
                new Edge <string>(vertex3, vertex4)
            });

            var graph         = new AdjacencyGraph <AdjacencyGraph <string, Edge <string> >, CondensedEdge <string, Edge <string>, AdjacencyGraph <string, Edge <string> > > >();
            var condensedEdge = new CondensedEdge <string, Edge <string>, AdjacencyGraph <string, Edge <string> > >(subGraph1, subGraph2);

            condensedEdge.Edges.Add(new Edge <string>(vertex1, vertex2));
            condensedEdge.Edges.Add(new Edge <string>(vertex3, vertex1));
            graph.AddVerticesAndEdgeRange(new[] { condensedEdge });

            const string expectedVertex1 = @"Vertex1&/<>@~|";
            const string expectedVertex2 = @"Vertex2æéèê룤¶ÀÁÂÃÄÅ";
            const string expectedVertex3 = @"\""Vertex3\""\nΣη← ♠\\[]()";
            const string expectedVertex4 = @"Vertex4∴∞⇐ℜΩ÷嗷娪";
            string       expectedDot     =
                @"digraph G {" + Environment.NewLine +
                @"node [fontname=""Tahoma"", fontsize=8.25, shape=box, style=filled, fillcolor=""#FFFFE0FF""];" + Environment.NewLine +
                @"edge [fontname=""Tahoma"", fontsize=8.25];" + Environment.NewLine +
                @"0 [label=""3-3\n  " + expectedVertex1 + @"\n  " + expectedVertex2 + @"\n  " + expectedVertex3 + @"\n  " + expectedVertex1 + @" -> " + expectedVertex2 + @"\n  " + expectedVertex2 + @" -> " + expectedVertex2 + @"\n  " + expectedVertex3 + @" -> " + expectedVertex1 + @"\n""];" + Environment.NewLine +
                @"1 [label=""4-5\n  " + expectedVertex1 + @"\n  " + expectedVertex2 + @"\n  " + expectedVertex3 + @"\n  " + expectedVertex4 + @"\n  " + expectedVertex1 + @" -> " + expectedVertex1 + @"\n  " + expectedVertex1 + @" -> " + expectedVertex2 + @"\n  " + expectedVertex2 + @" -> " + expectedVertex3 + @"\n  " + expectedVertex2 + @" -> " + expectedVertex4 + @"\n  " + expectedVertex3 + @" -> " + expectedVertex4 + @"\n""];" + Environment.NewLine +
                @"0 -> 1 [label=""2\n  " + expectedVertex1 + @" -> " + expectedVertex2 + @"\n  " + expectedVertex3 + @" -> " + expectedVertex1 + @"\n""];" + Environment.NewLine +
                @"}";

            var dotEngine = new TestDotEngine
            {
                ExpectedDot = expectedDot
            };

            var algorithm = new CondensatedGraphRenderer <string, Edge <string>, AdjacencyGraph <string, Edge <string> > >(graph);

            algorithm.Generate(dotEngine, "NotSaved.dot");
        }
        public void GenerateSameDot()
        {
            var graph = new AdjacencyGraph <int, Edge <int> >();

            // Empty graph
            TestGenerate(graph);

            // Only vertices
            graph.AddVertexRange(new[] { 1, 2 });
            TestGenerate(graph);

            // With edges
            graph.AddVerticesAndEdgeRange(new[]
            {
                new Edge <int>(1, 2),
                new Edge <int>(2, 3),
                new Edge <int>(3, 1)
            });
            TestGenerate(graph);

            // With no cluster
            var clusteredGraph = new ClusteredAdjacencyGraph <int, Edge <int> >(graph);

            TestGenerate(clusteredGraph);

            // With clusters
            ClusteredAdjacencyGraph <int, Edge <int> > subGraph1 = clusteredGraph.AddCluster();

            subGraph1.AddVertexRange(new[] { 4, 5 });
            ClusteredAdjacencyGraph <int, Edge <int> > subGraph2 = clusteredGraph.AddCluster();

            subGraph2.AddVerticesAndEdge(new Edge <int>(1, 6));
            TestGenerate(clusteredGraph);

            #region Local function

            void TestGenerate <TVertex, TEdge>(IEdgeListGraph <TVertex, TEdge> g)
                where TEdge : IEdge <TVertex>
            {
                var    algorithm    = new GraphvizAlgorithm <TVertex, TEdge>(g);
                string generatedDot = algorithm.Generate();

                Assert.IsNotEmpty(generatedDot);

                var dotEngine = new TestDotEngine {
                    ExpectedDot = generatedDot
                };

                // ReSharper disable once ReturnValueOfPureMethodIsNotUsed
                algorithm.Generate(dotEngine, "NotSaved.dot");
            }

            #endregion
        }
示例#3
0
        public void Generate(
            [NotNull] AdjacencyGraph <int, MergedEdge <int, Edge <int> > > graph,
            [NotNull] string expectedDot)
        {
            var dotEngine = new TestDotEngine
            {
                ExpectedDot = expectedDot
            };

            var algorithm = new EdgeMergeCondensatedGraphRenderer <int, Edge <int> >(graph);

            algorithm.Generate(dotEngine, "NotSaved.dot");
        }
        public void Generate_Throws()
        {
            var dotEngine = new TestDotEngine();
            var graph     = new AdjacencyGraph <int, Edge <int> >();
            var algorithm = new GraphvizAlgorithm <int, Edge <int> >(graph);

            // ReSharper disable AssignNullToNotNullAttribute
            Assert.Throws <ArgumentNullException>(() => algorithm.Generate(null, "NotSaved.dot"));
            Assert.Throws <ArgumentException>(() => algorithm.Generate(dotEngine, null));
            Assert.Throws <ArgumentException>(() => algorithm.Generate(dotEngine, string.Empty));
            Assert.Throws <ArgumentNullException>(() => algorithm.Generate(null, null));
            Assert.Throws <ArgumentNullException>(() => algorithm.Generate(null, string.Empty));
            // ReSharper restore AssignNullToNotNullAttribute
        }
示例#5
0
        public void Generate_WithEscape()
        {
            const string vertex1 = "Vertex1&/<>@~|";
            const string vertex2 = "Vertex2æéèê룤¶ÀÁÂÃÄÅ";
            const string vertex3 = "\"Vertex3\"\nΣη← ♠\\[]()";
            const string vertex4 = "Vertex4∴∞⇐ℜΩ÷嗷娪";

            var graph = new AdjacencyGraph <string, MergedEdge <string, Edge <string> > >();

            graph.AddVertexRange(new[] { vertex3, vertex4 });

            var edge12 = new Edge <string>(vertex1, vertex2);
            var edge24 = new Edge <string>(vertex2, vertex4);
            var edge31 = new Edge <string>(vertex3, vertex1);
            var edge32 = new Edge <string>(vertex3, vertex2);
            var edge33 = new Edge <string>(vertex3, vertex3);
            var edge41 = new Edge <string>(vertex4, vertex1);

            var mergeEdge1 = new MergedEdge <string, Edge <string> >(vertex4, vertex4);

            mergeEdge1.Edges.Add(edge41);
            mergeEdge1.Edges.Add(edge12);
            mergeEdge1.Edges.Add(edge24);

            var mergeEdge2 = new MergedEdge <string, Edge <string> >(vertex3, vertex3);

            mergeEdge2.Edges.Add(edge33);

            var mergeEdge3 = new MergedEdge <string, Edge <string> >(vertex3, vertex4);

            mergeEdge3.Edges.Add(edge32);
            mergeEdge3.Edges.Add(edge24);

            var mergeEdge4 = new MergedEdge <string, Edge <string> >(vertex3, vertex4);

            mergeEdge4.Edges.Add(edge31);
            mergeEdge4.Edges.Add(edge12);
            mergeEdge4.Edges.Add(edge24);

            graph.AddEdgeRange(new[]
            {
                mergeEdge1, mergeEdge2, mergeEdge3, mergeEdge4
            });

            const string expectedVertex1 = @"Vertex1&/<>@~|";
            const string expectedVertex2 = @"Vertex2æéèê룤¶ÀÁÂÃÄÅ";
            const string expectedVertex3 = @"\""Vertex3\""\nΣη← ♠\\[]()";
            const string expectedVertex4 = @"Vertex4∴∞⇐ℜΩ÷嗷娪";
            string       expectedDot     =
                @"digraph G {" + Environment.NewLine +
                @"node [fontname=""Tahoma"", fontsize=8.25, shape=box, style=filled, fillcolor=""#FFFFE0FF""];" + Environment.NewLine +
                @"edge [fontname=""Tahoma"", fontsize=8.25];" + Environment.NewLine +
                @"0 [label=""" + expectedVertex3 + @"""];" + Environment.NewLine +
                @"1 [label=""" + expectedVertex4 + @"""];" + Environment.NewLine +
                @"0 -> 0 [label=""1\n  " + expectedVertex3 + @" -> " + expectedVertex3 + @"\n""];" + Environment.NewLine +
                @"0 -> 1 [label=""2\n  " + expectedVertex3 + @" -> " + expectedVertex2 + @"\n  " + expectedVertex2 + @" -> " + expectedVertex4 + @"\n""];" + Environment.NewLine +
                @"0 -> 1 [label=""3\n  " + expectedVertex3 + @" -> " + expectedVertex1 + @"\n  " + expectedVertex1 + @" -> " + expectedVertex2 + @"\n  " + expectedVertex2 + @" -> " + expectedVertex4 + @"\n""];" + Environment.NewLine +
                @"1 -> 1 [label=""3\n  " + expectedVertex4 + @" -> " + expectedVertex1 + @"\n  " + expectedVertex1 + @" -> " + expectedVertex2 + @"\n  " + expectedVertex2 + @" -> " + expectedVertex4 + @"\n""];" + Environment.NewLine +
                @"}";

            var dotEngine = new TestDotEngine
            {
                ExpectedDot = expectedDot
            };

            var algorithm = new EdgeMergeCondensatedGraphRenderer <string, Edge <string> >(graph);

            algorithm.Generate(dotEngine, "NotSaved.dot");
        }