github.com/windmilleng/wat@v0.0.2-0.20180626175338-9349b638e250/cli/wat/recent_test.go (about) 1 package wat 2 3 import ( 4 "testing" 5 6 "time" 7 8 "sort" 9 10 "reflect" 11 12 "fmt" 13 "regexp" 14 ) 15 16 func TestWalk(t *testing.T) { 17 f := newWatFixture(t) 18 defer f.tearDown() 19 20 fileset := map[string]bool{ 21 "foo": true, 22 "bar": true, 23 "baz": true, 24 "beep/boop": true, 25 "beep/bop": true, 26 } 27 for file := range fileset { 28 f.writeFile(file) 29 } 30 31 files, err := walkDir(f.root.Path()) 32 if err != nil { 33 f.t.Fatalf("Error testing walk: %v", err) 34 } 35 36 f.assertExpectedFiles(fileset, files) 37 } 38 39 func TestSort(t *testing.T) { 40 now := fileInfo{name: "now", modTime: time.Now()} 41 yesterday := fileInfo{name: "yesterday", modTime: time.Now().Add(-24 * time.Hour)} 42 tomorrow := fileInfo{name: "tomorrow", modTime: time.Now().Add(24 * time.Hour)} 43 files := []fileInfo{now, yesterday, tomorrow} 44 45 sort.Sort(fileInfos(files)) 46 47 expected := []fileInfo{yesterday, now, tomorrow} 48 49 if !reflect.DeepEqual(expected, files) { 50 t.Fatalf("Expected %v, got %v", expected, files) 51 } 52 } 53 54 func TestIgnore(t *testing.T) { 55 f := newWatFixture(t) 56 defer f.tearDown() 57 58 filesToExpected := map[string]bool{ 59 "foo/a": false, // ignore "a" 60 "foo/b": true, 61 "foo/c": true, 62 "bar/a": false, // ignore "a" 63 "bar/b": true, 64 "thingA.yes": true, 65 "thingB.no": false, // ignore "*.no" 66 "stuff/thingC.no": false, // ignore "*.no" 67 "hello": true, 68 "world": true, 69 "beep/boop/bzz": false, // ignore "beep" 70 "beep/boop/bees": false, // ignore "beep" 71 "blah/beep/bork": false, // ignore "beep" 72 "blah/blorp": true, 73 } 74 for file := range filesToExpected { 75 f.writeFile(file) 76 } 77 78 f.write(fnameWatIgnore, fmt.Sprintf(`*.no 79 a 80 beep 81 %s`, fnameWatIgnore)) 82 83 files, err := walkDir(f.root.Path()) 84 if err != nil { 85 f.t.Fatalf("Error testing walk: %v", err) 86 } 87 88 f.assertExpectedFiles(filesToExpected, files) 89 } 90 91 // Make sure that WalkDir (public func.) looks in the right place for 92 // .watignore (should be at wat root) 93 func TestWalkDirFindsIgnore(t *testing.T) { 94 f := newWatFixture(t) 95 defer f.tearDown() 96 ws := f.watInit() 97 98 filesToExpected := map[string]bool{ 99 "foo": false, // ignore "foo" 100 "bar": true, 101 } 102 for file := range filesToExpected { 103 f.writeFile(file) 104 } 105 106 f.write(fnameWatIgnore, fmt.Sprintf("foo\n%s", fnameWatIgnore)) 107 108 files, err := ws.WalkRoot() 109 if err != nil { 110 f.t.Fatalf("Error testing walk: %v", err) 111 } 112 113 f.assertExpectedFiles(filesToExpected, files) 114 } 115 116 func TestFilterFilesMatchAny(t *testing.T) { 117 f := newWatFixture(t) 118 defer f.tearDown() 119 120 filesToExpected := map[string]bool{ 121 "a.foo": true, 122 "b.foo": true, 123 "a.bar": true, 124 "b.bar": false, // does not match 'a.*' or '*.foo' 125 } 126 allFiles := []fileInfo{} 127 for file := range filesToExpected { 128 allFiles = append(allFiles, fileInfo{name: file}) 129 } 130 131 regexps := []*regexp.Regexp{ 132 regexp.MustCompile("a\\..*"), 133 regexp.MustCompile(".*\\.foo"), 134 } 135 136 filtered := filterFilesMatchAny(allFiles, regexps) 137 138 f.assertExpectedFiles(filesToExpected, filtered) 139 }