github.com/xyproto/u-root@v6.0.1-0.20200302025726-5528e0c77a3c+incompatible/cmds/core/elvish/glob/glob_test.go (about) 1 package glob 2 3 import ( 4 "os" 5 "reflect" 6 "runtime" 7 "sort" 8 "testing" 9 10 "github.com/u-root/u-root/cmds/core/elvish/util" 11 ) 12 13 var ( 14 mkdirs = []string{"a", "b", "c", "d1", "d1/e", "d1/e/f", "d1/e/f/g", 15 "d2", "d2/e", "d2/e/f", "d2/e/f/g"} 16 mkdirDots = []string{".el"} 17 creates = []string{"a/X", "a/Y", "b/X", "c/Y", 18 "dX", "dXY", 19 "lorem", "ipsum", 20 "d1/e/f/g/X", "d2/e/f/g/X"} 21 createDots = []string{".x", ".el/x"} 22 ) 23 24 type globCase struct { 25 pattern string 26 want []string 27 } 28 29 var globCases = []globCase{ 30 {"*", []string{"a", "b", "c", "d1", "d2", "dX", "dXY", "lorem", "ipsum"}}, 31 {".", []string{"."}}, 32 {"./*", []string{"./a", "./b", "./c", "./d1", "./d2", "./dX", "./dXY", "./lorem", "./ipsum"}}, 33 {"..", []string{".."}}, 34 {"a/..", []string{"a/.."}}, 35 {"a/../*", []string{"a/../a", "a/../b", "a/../c", "a/../d1", "a/../d2", "a/../dX", "a/../dXY", "a/../lorem", "a/../ipsum"}}, 36 {"*/", []string{"a/", "b/", "c/", "d1/", "d2/"}}, 37 {"**", append(mkdirs, creates...)}, 38 {"*/X", []string{"a/X", "b/X"}}, 39 {"**X", []string{"a/X", "b/X", "dX", "d1/e/f/g/X", "d2/e/f/g/X"}}, 40 {"*/*/*", []string{"d1/e/f", "d2/e/f"}}, 41 {"l*m", []string{"lorem"}}, 42 {"d*", []string{"d1", "d2", "dX", "dXY"}}, 43 {"d*/", []string{"d1/", "d2/"}}, 44 {"d**", []string{"d1", "d1/e", "d1/e/f", "d1/e/f/g", "d1/e/f/g/X", 45 "d2", "d2/e", "d2/e/f", "d2/e/f/g", "d2/e/f/g/X", "dX", "dXY"}}, 46 {"?", []string{"a", "b", "c"}}, 47 {"??", []string{"d1", "d2", "dX"}}, 48 49 // Nonexistent paths. 50 {"xxxx", []string{}}, 51 {"xxxx/*", []string{}}, 52 {"a/*/", []string{}}, 53 54 // TODO Test cases against dotfiles. 55 } 56 57 func init() { 58 // Add tests for absolute paths. This is platform-dependent and may break if 59 // the directories used change during testing. 60 var dirs []string 61 if runtime.GOOS == "windows" { 62 dirs = []string{`C:/`, `C:/Windows/`} 63 } else { 64 dirs = []string{"/", "/usr/"} 65 } 66 for _, dir := range dirs { 67 globCases = append(globCases, globCase{dir + "*", util.FullNames(dir)}) 68 } 69 } 70 71 func TestGlob(t *testing.T) { 72 util.InTempDir(func(string) { 73 for _, dir := range append(mkdirs, mkdirDots...) { 74 err := os.Mkdir(dir, 0755) 75 if err != nil { 76 panic(err) 77 } 78 } 79 for _, file := range append(creates, createDots...) { 80 f, err := os.Create(file) 81 if err != nil { 82 panic(err) 83 } 84 f.Close() 85 } 86 for _, tc := range globCases { 87 names := []string{} 88 Glob(tc.pattern, func(name string) bool { 89 names = append(names, name) 90 return true 91 }) 92 sort.Strings(names) 93 sort.Strings(tc.want) 94 if !reflect.DeepEqual(names, tc.want) { 95 t.Errorf(`Glob(%q, "") => %v, want %v`, tc.pattern, names, tc.want) 96 } 97 } 98 }) 99 }