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  }