graph/encoding/dot: store graph DOT ID if present (#237)

Add round trip test case for graph DOT ID.
This commit is contained in:
Robin Eklind
2017-09-28 10:02:53 +02:00
committed by GitHub
parent d822215c3b
commit f786e6cd3c
2 changed files with 55 additions and 2 deletions

View File

@@ -26,6 +26,14 @@ func TestRoundTrip(t *testing.T) {
want: undirected,
directed: false,
},
{
want: directedID,
directed: true,
},
{
want: undirectedID,
directed: false,
},
}
for i, g := range golden {
var dst encoding.Builder
@@ -94,6 +102,24 @@ const undirected = `graph {
A -- B [label="baz 2"];
}`
const directedID = `digraph G {
// Node definitions.
A;
B;
// Edge definitions.
A -> B;
}`
const undirectedID = `graph H {
// Node definitions.
A;
B;
// Edge definitions.
A -- B;
}`
// Below follows a minimal implementation of a graph capable of validating the
// round-trip encoding and decoding of DOT graphs with nodes and edges
// containing DOT attributes.
@@ -101,9 +127,11 @@ const undirected = `graph {
// dotDirectedGraph extends simple.DirectedGraph to add NewNode and NewEdge
// methods for creating user-defined nodes and edges.
//
// dotDirectedGraph implements the dot.Builder interface.
// dotDirectedGraph implements the encoding.Builder and the dot.Graph
// interfaces.
type dotDirectedGraph struct {
*simple.DirectedGraph
id string
graph, node, edge attributes
}
@@ -133,12 +161,24 @@ func (g *dotDirectedGraph) DOTAttributeSetters() (graph, node, edge encoding.Att
return &g.graph, &g.node, &g.edge
}
// SetDOTID sets the DOT ID of the graph.
func (g *dotDirectedGraph) SetDOTID(id string) {
g.id = id
}
// DOTID returns the DOT ID of the graph.
func (g *dotDirectedGraph) DOTID() string {
return g.id
}
// dotUndirectedGraph extends simple.UndirectedGraph to add NewNode and NewEdge
// methods for creating user-defined nodes and edges.
//
// dotUndirectedGraph implements the dot.Builder interface.
// dotUndirectedGraph implements the encoding.Builder and the dot.Graph
// interfaces.
type dotUndirectedGraph struct {
*simple.UndirectedGraph
id string
graph, node, edge attributes
}
@@ -168,6 +208,16 @@ func (g *dotUndirectedGraph) DOTAttributeSetters() (graph, node, edge encoding.A
return &g.graph, &g.node, &g.edge
}
// SetDOTID sets the DOT ID of the graph.
func (g *dotUndirectedGraph) SetDOTID(id string) {
g.id = id
}
// DOTID returns the DOT ID of the graph.
func (g *dotUndirectedGraph) DOTID() string {
return g.id
}
// dotNode extends simple.Node with a label field to test round-trip encoding
// and decoding of node DOT label attributes.
type dotNode struct {