package main import ( "os" "path" "testing" ) func TestConfigTargets(t *testing.T) { touch := func(t *testing.T, p string) { if err := os.WriteFile(p, nil, os.ModePerm); err != nil { t.Fatal(err) } } cases := map[string]struct { setup func(*testing.T, string) given string want []string }{ "does not exist": { given: "x", want: []string{"x"}, }, "one file": { setup: func(t *testing.T, d string) { touch(t, path.Join(d, "x")) }, given: "x", want: []string{"x"}, }, "two files": { setup: func(t *testing.T, d string) { touch(t, path.Join(d, "a")) touch(t, path.Join(d, "root.yaml")) touch(t, path.Join(d, "z")) }, given: "", want: []string{"root.yaml", "a", "z"}, }, "empty dir": { setup: func(t *testing.T, d string) { os.Mkdir(path.Join(d, "x"), os.ModePerm) }, given: "x", want: []string{"root.yaml"}, }, "dir": { setup: func(t *testing.T, d string) { os.Mkdir(path.Join(d, "x"), os.ModePerm) touch(t, path.Join(d, "x", "a")) touch(t, path.Join(d, "x", "a.todo.xyz")) touch(t, path.Join(d, "x", "b")) }, given: "x", want: []string{"a", "a.todo.xyz", "b"}, }, } for name, d := range cases { c := d t.Run(name, func(t *testing.T) { d := t.TempDir() if c.setup != nil { c.setup(t, d) } config := config{target: path.Join(d, c.given)} got := config.Targets() for i := range got { got[i] = path.Base(got[i]) } for i := range c.want { c.want[i] = path.Base(c.want[i]) } t.Logf("want\n\t%+v, got \n\t%+v", c.want, got) if len(got) != len(c.want) { t.Error(c.want, got) } for i := range got { if got[i] != c.want[i] { t.Errorf("[%d] wanted %s, got %s", i, c.want[i], got[i]) } } }) } }