github.com/ladydascalie/elvish@v0.0.0-20170703214355-2964dd3ece7f/glob/glob_test.go (about) 1 package glob 2 3 import ( 4 "os" 5 "reflect" 6 "sort" 7 "testing" 8 9 "github.com/elves/elvish/util" 10 ) 11 12 var ( 13 mkdirs = []string{"a", "b", "c", "d1", "d1/e", "d1/e/f", "d1/e/f/g", 14 "d2", "d2/e", "d2/e/f", "d2/e/f/g"} 15 mkdirDots = []string{".el"} 16 creates = []string{"a/X", "a/Y", "b/X", "c/Y", 17 "dX", "dXY", 18 "lorem", "ipsum", 19 "d1/e/f/g/X", "d2/e/f/g/X"} 20 createDots = []string{".x", ".el/x"} 21 ) 22 23 var globCases = []struct { 24 pattern string 25 want []string 26 }{ 27 {"*", []string{"a", "b", "c", "d1", "d2", "dX", "dXY", "lorem", "ipsum"}}, 28 {".", []string{"."}}, 29 {"./*", []string{"./a", "./b", "./c", "./d1", "./d2", "./dX", "./dXY", "./lorem", "./ipsum"}}, 30 {"..", []string{".."}}, 31 {"a/..", []string{"a/.."}}, 32 {"a/../*", []string{"a/../a", "a/../b", "a/../c", "a/../d1", "a/../d2", "a/../dX", "a/../dXY", "a/../lorem", "a/../ipsum"}}, 33 {"*/", []string{"a/", "b/", "c/", "d1/", "d2/"}}, 34 {"**", append(mkdirs, creates...)}, 35 {"*/X", []string{"a/X", "b/X"}}, 36 {"**X", []string{"a/X", "b/X", "dX", "d1/e/f/g/X", "d2/e/f/g/X"}}, 37 {"*/*/*", []string{"d1/e/f", "d2/e/f"}}, 38 {"l*m", []string{"lorem"}}, 39 {"d*", []string{"d1", "d2", "dX", "dXY"}}, 40 {"d*/", []string{"d1/", "d2/"}}, 41 {"d**", []string{"d1", "d1/e", "d1/e/f", "d1/e/f/g", "d1/e/f/g/X", 42 "d2", "d2/e", "d2/e/f", "d2/e/f/g", "d2/e/f/g/X", "dX", "dXY"}}, 43 {"?", []string{"a", "b", "c"}}, 44 {"??", []string{"d1", "d2", "dX"}}, 45 46 // Nonexistent paths. 47 {"xxxx", []string{}}, 48 {"xxxx/*", []string{}}, 49 {"a/*/", []string{}}, 50 51 // Absolute paths. 52 // NOTE: If / or /usr changes during testing, this case will fail. 53 {"/*", util.FullNames("/")}, 54 {"/usr/*", util.FullNames("/usr/")}, 55 56 // TODO Test cases against dotfiles. 57 } 58 59 func TestGlob(t *testing.T) { 60 util.InTempDir(func(string) { 61 for _, dir := range append(mkdirs, mkdirDots...) { 62 err := os.Mkdir(dir, 0755) 63 if err != nil { 64 panic(err) 65 } 66 } 67 for _, file := range append(creates, createDots...) { 68 f, err := os.Create(file) 69 if err != nil { 70 panic(err) 71 } 72 f.Close() 73 } 74 for _, tc := range globCases { 75 names := []string{} 76 Glob(tc.pattern, func(name string) bool { 77 names = append(names, name) 78 return true 79 }) 80 sort.Strings(names) 81 sort.Strings(tc.want) 82 if !reflect.DeepEqual(names, tc.want) { 83 t.Errorf(`Glob(%q, "") => %v, want %v`, tc.pattern, names, tc.want) 84 } 85 } 86 }) 87 }