Пример #1
0
        public void LoadOneNode(string dot)
        {
            DotGraph g = DotLoader.Load(dot);

            Assert.Contains("Welcome", g.Nodes);
            Assert.Equal(1, g.Nodes.Count);
        }
Пример #2
0
        public void DotToBifrostGraph()
        {
            DotGraph g     = DotLoader.Load(@"digraph {
            graph [bb=""0, 0, 54, 108""];
            node[label = ""\N""];
            a[height = 0.5,
                    pos = ""27,90"",
                    width = 0.75];
            b[height = 0.5,
                    pos = ""27,18"",
                    width = 0.75];
            a->b[pos = ""e,27,36.104 27,71.697 27,63.983 27,54.712 27,46.112""];
        }");
            Graph    graph = DotGraphConverter.ToGraph(g);

            Assert.Equal(2, graph.Nodes.Count);
            var nodes = graph.Nodes.ToList();

            var nodeA = nodes[0];

            Assert.Equal("a", nodeA.NodeName);
            Assert.Equal(new Point(27, 18), nodeA.Position);

            var nodeB = nodes[1];

            Assert.Equal("b", nodeB.NodeName);
            Assert.Equal(new Point(27, 90), nodeB.Position);

            List <Edge> edges = graph.Edges.ToList();

            Assert.Equal(nodeA, graph.FindNode(edges[0].StartId));
            Assert.Equal(nodeB, graph.FindNode(edges[0].EndId));
        }
Пример #3
0
        public void LoadEmptyGraph(string dot)
        {
            DotGraph g = DotLoader.Load(dot);

            Assert.Empty(g.Nodes);
            Assert.False(g.IsDirected);
            Assert.False(g.IsStrict);
        }
Пример #4
0
        public void LoadDotString(string dotContent)
        {
            DotGraph dg = DotLoader.Load(dotContent);

            if (!dg.GraphAttributes.ContainsKey("bb"))
            {
                dg = GraphVizWrapper.LayoutNodes(dg);
            }
            Graph gr = DotGraphConverter.ToGraph(dg);

            adjustNodesToCenterOfViewport(gr, GraphAreaZoom.Viewport);
            LoadGraph(gr);
        }
Пример #5
0
        public void DotToBifrostGraphSingleNode()
        {
            DotGraph g     = DotLoader.Load(@"graph {a}");
            Graph    graph = DotGraphConverter.ToGraph(g);

            Assert.Equal(1, graph.Nodes.Count);
            var nodes = graph.Nodes.ToList();

            var nodeA = nodes[0];

            Assert.Equal("a", nodeA.Id);
            Assert.Equal("a", nodeA.NodeName);
            Assert.Equal(new Point(0, 0), nodeA.Position);
        }
Пример #6
0
        public void LoadMultipleNodes(string dot, string[] keys)
        {
            DotGraph g = DotLoader.Load(dot);

            foreach (var key in keys)
            {
                Assert.Contains(key, g.Nodes);
            }
            foreach (var key in g.Nodes.Keys)
            {
                Assert.Contains(key, keys);
            }
            Assert.Equal(keys.Length, g.Nodes.Count);
        }
Пример #7
0
        public void DotToBifrostGraphUseLabelForName()
        {
            DotGraph g     = DotLoader.Load(@"digraph {
            a[label=""good name""];
        }");
            Graph    graph = DotGraphConverter.ToGraph(g);

            Assert.Equal(1, graph.Nodes.Count);
            var nodes = graph.Nodes.ToList();

            var nodeA = nodes[0];

            Assert.Equal("a", nodeA.Id);
            Assert.Equal("good name", nodeA.NodeName);
        }
Пример #8
0
        public void LoadGraphEdges(string dot, string[] edgeNodes)
        {
            DotGraph g = DotLoader.Load(dot);

            var edgePairs = toTupleList(edgeNodes);

            foreach (var edge in edgePairs)
            {
                Assert.Contains(edge, g.Edges);
            }
            foreach (var key in g.Edges.Keys)
            {
                Assert.Contains(key, edgePairs);
            }
            Assert.Equal(edgePairs.Count, g.Edges.Count);
        }
Пример #9
0
        public static DotGraph LayoutNodes(DotGraph dg)
        {
            // call graphviz dot to layout the nodes
            string dotFile     = DotFileGenerator.Serialize(dg);
            string resultDot   = "";
            string errorOutput = "";

            using (Process proc = new Process())
            {
                // TODO: We will need to give a full path to the dot.exe, for now it should be in the path
                proc.StartInfo.FileName               = "dot.exe";
                proc.StartInfo.UseShellExecute        = false;
                proc.StartInfo.RedirectStandardInput  = true;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.RedirectStandardError  = true;

                proc.OutputDataReceived += new DataReceivedEventHandler((sender, e) =>
                {
                    resultDot += e.Data;
                });
                proc.ErrorDataReceived += new DataReceivedEventHandler((sender, e) =>
                {
                    errorOutput += e.Data;
                });

                proc.Start();

                proc.BeginOutputReadLine();
                proc.BeginErrorReadLine();

                proc.StandardInput.Write(dotFile + "\n");

                while (!resultDot.TrimEnd().EndsWith("}"))
                {
                    System.Threading.Thread.Sleep(10);
                }
                proc.Kill();
            }
            if (errorOutput != "")
            {
                Debug.WriteLine(errorOutput);
            }
            return(DotLoader.Load(resultDot));
        }
Пример #10
0
        public void LoadStrictGraph(string dot)
        {
            DotGraph g = DotLoader.Load(dot);

            Assert.True(g.IsStrict);
        }
Пример #11
0
        public void LoadEmptyDirectedGraph(string dot)
        {
            DotGraph g = DotLoader.Load(dot);

            Assert.True(g.IsDirected);
        }
Пример #12
0
        public void LoadGraphMultiEdges()
        {
            DotGraph g = DotLoader.Load(@"graph test {a -- b[color=red]; a--b}");

            Assert.Equal(2, g.Edges[("a", "b")].Count);