package digraph import ( "bytes" "strings" "testing" ) func TestWriteDot(t *testing.T) { 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) if err := WriteDot(buf, nlist); err != nil { t.Fatalf("err: %s", err) } actual := strings.TrimSpace(string(buf.Bytes())) expected := strings.TrimSpace(writeDotStr) 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 { t.Fatalf("bad: %s", actual) } } const writeDotStr = ` digraph { "a"; "a" -> "b" [label="foo"]; "a" -> "c" [label="Edge"]; "b"; "b" -> "d" [label="Edge"]; "b" -> "e" [label="Edge"]; "c"; "d"; "e"; } `