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 }
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 }
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"); }