github.com/hoop33/elvish@v0.0.0-20160801152013-6d25485beab4/glob/glob_test.go (about) 1 package glob 2 3 import ( 4 "io/ioutil" 5 "os" 6 "reflect" 7 "sort" 8 "testing" 9 10 "github.com/elves/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 var globCases = []struct { 25 pattern string 26 want []string 27 }{ 28 {"*", []string{"a", "b", "c", "d1", "d2", "dX", "dXY", "lorem", "ipsum"}}, 29 {".", []string{"."}}, 30 {"./*", []string{"./a", "./b", "./c", "./d1", "./d2", "./dX", "./dXY", "./lorem", "./ipsum"}}, 31 {"..", []string{".."}}, 32 {"a/..", []string{"a/.."}}, 33 {"a/../*", []string{"a/../a", "a/../b", "a/../c", "a/../d1", "a/../d2", "a/../dX", "a/../dXY", "a/../lorem", "a/../ipsum"}}, 34 {"*/", []string{"a/", "b/", "c/", "d1/", "d2/"}}, 35 {"**", append(mkdirs, creates...)}, 36 {"*/X", []string{"a/X", "b/X"}}, 37 {"**X", []string{"a/X", "b/X", "dX", "d1/e/f/g/X", "d2/e/f/g/X"}}, 38 {"*/*/*", []string{"d1/e/f", "d2/e/f"}}, 39 {"l*m", []string{"lorem"}}, 40 {"d*", []string{"d1", "d2", "dX", "dXY"}}, 41 {"d*/", []string{"d1/", "d2/"}}, 42 {"d**", []string{"d1", "d1/e", "d1/e/f", "d1/e/f/g", "d1/e/f/g/X", 43 "d2", "d2/e", "d2/e/f", "d2/e/f/g", "d2/e/f/g/X", "dX", "dXY"}}, 44 {"?", []string{"a", "b", "c"}}, 45 {"??", []string{"d1", "d2", "dX"}}, 46 // NOTE: If / changes during testing, this case will fail. 47 {"/*", util.RootStar()}, 48 49 // TODO Test cases against dotfiles. 50 } 51 52 func TestGlob(t *testing.T) { 53 tmpdir, err := ioutil.TempDir("", "glob-test") 54 if err != nil { 55 panic(err) 56 } 57 defer os.RemoveAll(tmpdir) 58 os.Chdir(tmpdir) 59 60 for _, dir := range append(mkdirs, mkdirDots...) { 61 err := os.Mkdir(dir, 0755) 62 if err != nil { 63 panic(err) 64 } 65 } 66 for _, file := range append(creates, createDots...) { 67 f, err := os.Create(file) 68 if err != nil { 69 panic(err) 70 } 71 f.Close() 72 } 73 for _, tc := range globCases { 74 names := []string{} 75 Glob(tc.pattern, func(name string) bool { 76 names = append(names, name) 77 return true 78 }) 79 sort.Strings(names) 80 sort.Strings(tc.want) 81 if !reflect.DeepEqual(names, tc.want) { 82 t.Errorf(`Glob(%q, "") => %v, want %v`, tc.pattern, names, tc.want) 83 } 84 } 85 }