2014-05-24 21:47:04 +02:00
|
|
|
package digraph
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"strings"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
2014-07-14 18:00:01 +02:00
|
|
|
func TestWriteDot(t *testing.T) {
|
2014-05-24 21:47:04 +02:00
|
|
|
nodes := ParseBasic(`a -> b ; foo
|
|
|
|
a -> c
|
|
|
|
b -> d
|
|
|
|
b -> e
|
|
|
|
`)
|
|
|
|
var nlist []Node
|
|
|
|
for _, n := range nodes {
|
|
|
|
nlist = append(nlist, n)
|
|
|
|
}
|
|
|
|
|
|
|
|
buf := bytes.NewBuffer(nil)
|
2014-07-14 18:00:01 +02:00
|
|
|
if err := WriteDot(buf, nlist); err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
2014-05-24 21:47:04 +02:00
|
|
|
}
|
2014-07-14 18:00:01 +02:00
|
|
|
|
|
|
|
actual := strings.TrimSpace(string(buf.Bytes()))
|
|
|
|
expected := strings.TrimSpace(writeDotStr)
|
2014-07-29 19:26:50 +02:00
|
|
|
|
|
|
|
actualLines := strings.Split(actual, "\n")
|
|
|
|
expectedLines := strings.Split(expected, "\n")
|
|
|
|
|
|
|
|
if actualLines[0] != expectedLines[0] ||
|
|
|
|
actualLines[len(actualLines)-1] != expectedLines[len(expectedLines)-1] ||
|
|
|
|
len(actualLines) != len(expectedLines) {
|
|
|
|
t.Fatalf("bad: %s", actual)
|
|
|
|
}
|
|
|
|
|
|
|
|
count := 0
|
|
|
|
for _, el := range expectedLines[1 : len(expectedLines)-1] {
|
|
|
|
for _, al := range actualLines[1 : len(actualLines)-1] {
|
|
|
|
if el == al {
|
|
|
|
count++
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if count != len(expectedLines)-2 {
|
2014-07-14 18:00:01 +02:00
|
|
|
t.Fatalf("bad: %s", actual)
|
2014-05-24 21:47:04 +02:00
|
|
|
}
|
|
|
|
}
|
2014-07-14 18:00:01 +02:00
|
|
|
|
|
|
|
const writeDotStr = `
|
|
|
|
digraph {
|
|
|
|
"a";
|
|
|
|
"a" -> "b" [label="foo"];
|
|
|
|
"a" -> "c" [label="Edge"];
|
|
|
|
"b";
|
|
|
|
"b" -> "d" [label="Edge"];
|
|
|
|
"b" -> "e" [label="Edge"];
|
|
|
|
"c";
|
|
|
|
"d";
|
|
|
|
"e";
|
|
|
|
}
|
|
|
|
`
|