91 lines
2.4 KiB
Go
91 lines
2.4 KiB
Go
package tree
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestAddPath_single(t *testing.T) {
|
|
root := &Node{IsDir: true, Children: make(map[string]*Node)}
|
|
addPath(root, "README.md", false)
|
|
node, ok := root.Children["README.md"]
|
|
if !ok {
|
|
t.Fatal("missing README.md child")
|
|
}
|
|
if node.IsDir {
|
|
t.Error("README.md should not be a directory")
|
|
}
|
|
}
|
|
|
|
func TestAddPath_nested(t *testing.T) {
|
|
root := &Node{IsDir: true, Children: make(map[string]*Node)}
|
|
addPath(root, "cmd/main.go", false)
|
|
cmdNode, ok := root.Children["cmd"]
|
|
if !ok {
|
|
t.Fatal("missing cmd child")
|
|
}
|
|
if !cmdNode.IsDir {
|
|
t.Error("cmd should be a directory")
|
|
}
|
|
if _, ok := cmdNode.Children["main.go"]; !ok {
|
|
t.Fatal("missing main.go child under cmd")
|
|
}
|
|
}
|
|
|
|
func TestAddPath_overwrite_annotation(t *testing.T) {
|
|
root := &Node{IsDir: true, Children: make(map[string]*Node)}
|
|
node := addPath(root, "cmd", true)
|
|
node.Annotation = "ignored (default)"
|
|
|
|
node2 := addPath(root, "cmd", true)
|
|
if node2 != node {
|
|
t.Error("addPath should return the same node for repeated path")
|
|
}
|
|
if node2.Annotation != "ignored (default)" {
|
|
t.Errorf("annotation lost: %q", node2.Annotation)
|
|
}
|
|
}
|
|
|
|
func TestSplitPath(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
input string
|
|
expect []string
|
|
}{
|
|
{"root_file", "README.md", []string{"README.md"}},
|
|
{"two_parts", "cmd/main.go", []string{"cmd", "main.go"}},
|
|
{"three_parts", "internal/tree/node.go", []string{"internal", "tree", "node.go"}},
|
|
{"empty", "", nil},
|
|
{"only_slashes", "///", nil},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := splitPath(tt.input)
|
|
if len(got) != len(tt.expect) {
|
|
t.Errorf("splitPath(%q) = %v; want %v", tt.input, got, tt.expect)
|
|
return
|
|
}
|
|
for i := range got {
|
|
if got[i] != tt.expect[i] {
|
|
t.Errorf("splitPath(%q)[%d] = %q; want %q", tt.input, i, got[i], tt.expect[i])
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestRenderBreadcrumb_root(t *testing.T) {
|
|
breadcrumb := RenderBreadcrumb("/home/user/project", "README.md")
|
|
expected := "project/README.md"
|
|
if breadcrumb != expected {
|
|
t.Errorf("RenderBreadcrumb(...) = %q; want %q", breadcrumb, expected)
|
|
}
|
|
}
|
|
|
|
func TestRenderBreadcrumb_nested(t *testing.T) {
|
|
breadcrumb := RenderBreadcrumb("/home/user/project", "internal/tree/tree.go")
|
|
expected := "project / internal / tree / tree.go"
|
|
if breadcrumb != expected {
|
|
t.Errorf("RenderBreadcrumb(...) = %q; want %q", breadcrumb, expected)
|
|
}
|
|
}
|