package util
import (
"os"
"path"
"testing"
)
// build creates a directory tree structure.
func build(root string, paths []string) {
for _, p := range paths {
if p[len(p)-1] == '/' {
os.MkdirAll(path.Join(root, p), 0755)
} else {
os.Create(path.Join(root, p))
}
}
}
func TestFindRoot(t *testing.T) {
tmp_dir := t.TempDir()
test := func(cwd, expected_root string) {
os.Chdir(path.Join(tmp_dir, cwd))
root, err := FindRoot()
if err == nil {
root = root[len(tmp_dir)+1:]
}
if expected_root == "" && err == nil {
t.Errorf("FindRoot(%s) returned %s; want error", cwd, root)
} else if expected_root != "" && err != nil {
t.Errorf("FindRoot(%s) returned error %v; want %s", cwd, err, expected_root)
} else if root != expected_root {
t.Errorf("FindRoot(%s) returned %s; want %s", cwd, root, expected_root)
}
}
build(tmp_dir, []string{
"foo/.git/",
"foo/bar/.git/",
"baz/",
"qux/.git",
})
test("foo", "foo") // foo is a Git repo
test("foo/bar", "foo/bar") // foo/bar is a Git repo inside a Git repo
test("baz", "") // baz is just an emtpy directory
test("qux", "") // qux is not a Git repo because .git is not a directory
}