mirror of https://github.com/maxcnunes/gaper.git
Improve test coverage for watcher
This commit is contained in:
parent
be4160275a
commit
a81558c850
|
@ -0,0 +1 @@
|
||||||
|
package ignoretestname
|
10
watcher.go
10
watcher.go
|
@ -5,6 +5,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -158,6 +159,7 @@ func (w *watcher) ignoreFile(path string, info os.FileInfo) bool {
|
||||||
if _, ignored := w.ignoreItems[path]; ignored {
|
if _, ignored := w.ignoreItems[path]; ignored {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,7 +182,7 @@ func resolvePaths(paths []string, extensions map[string]bool) (map[string]bool,
|
||||||
// don't care for extension filter right now for non glob paths
|
// don't care for extension filter right now for non glob paths
|
||||||
// since they could be a directory
|
// since they could be a directory
|
||||||
if isGlob {
|
if isGlob {
|
||||||
if _, ok := extensions[filepath.Ext(path)]; !ok {
|
if _, ok := extensions[filepath.Ext(match)]; !ok {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -198,13 +200,19 @@ func resolvePaths(paths []string, extensions map[string]bool) (map[string]bool,
|
||||||
|
|
||||||
// remove overlapped paths so it makes the scan for changes later faster and simpler
|
// remove overlapped paths so it makes the scan for changes later faster and simpler
|
||||||
func removeOverlappedPaths(mapPaths map[string]bool) {
|
func removeOverlappedPaths(mapPaths map[string]bool) {
|
||||||
|
startDot := regexp.MustCompile(`^\./`)
|
||||||
|
|
||||||
for p1 := range mapPaths {
|
for p1 := range mapPaths {
|
||||||
|
p1 = startDot.ReplaceAllString(p1, "")
|
||||||
|
|
||||||
// skip to next item if this path has already been checked
|
// skip to next item if this path has already been checked
|
||||||
if v, ok := mapPaths[p1]; ok && !v {
|
if v, ok := mapPaths[p1]; ok && !v {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
for p2 := range mapPaths {
|
for p2 := range mapPaths {
|
||||||
|
p2 = startDot.ReplaceAllString(p2, "")
|
||||||
|
|
||||||
if p1 == p2 {
|
if p1 == p2 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
132
watcher_test.go
132
watcher_test.go
|
@ -1,6 +1,7 @@
|
||||||
package gaper
|
package gaper
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
@ -60,7 +61,7 @@ func TestWatcherGlobPath(t *testing.T) {
|
||||||
func TestWatcherRemoveOverlapdPaths(t *testing.T) {
|
func TestWatcherRemoveOverlapdPaths(t *testing.T) {
|
||||||
pollInterval := 0
|
pollInterval := 0
|
||||||
watchItems := []string{filepath.Join("testdata", "server")}
|
watchItems := []string{filepath.Join("testdata", "server")}
|
||||||
ignoreItems := []string{"./testdata/**/*", "./testdata/server"}
|
ignoreItems := []string{"./testdata/server/**/*", "./testdata/server"}
|
||||||
var extensions []string
|
var extensions []string
|
||||||
|
|
||||||
wCfg := WatcherConfig{
|
wCfg := WatcherConfig{
|
||||||
|
@ -120,3 +121,132 @@ func TestWatcherWatchChange(t *testing.T) {
|
||||||
assert.Nil(t, err, "wacher event error")
|
assert.Nil(t, err, "wacher event error")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestWatcherIgnoreFile(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
name, file, ignoreFile string
|
||||||
|
defaultIgnore, expectIgnore bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "with default ignore enabled it ignores vendor folder",
|
||||||
|
file: "vendor",
|
||||||
|
defaultIgnore: true,
|
||||||
|
expectIgnore: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "without default ignore enabled it does not ignore vendor folder",
|
||||||
|
file: "vendor",
|
||||||
|
defaultIgnore: false,
|
||||||
|
expectIgnore: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "with default ignore enabled it ignores test file",
|
||||||
|
file: filepath.Join("testdata", "server", "main_test.go"),
|
||||||
|
defaultIgnore: true,
|
||||||
|
expectIgnore: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "with default ignore enabled it does no ignore non test files which have test in the name",
|
||||||
|
file: filepath.Join("testdata", "ignore-test-name.txt"),
|
||||||
|
defaultIgnore: true,
|
||||||
|
expectIgnore: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "without default ignore enabled it does not ignore test file",
|
||||||
|
file: filepath.Join("testdata", "server", "main_test.go"),
|
||||||
|
defaultIgnore: false,
|
||||||
|
expectIgnore: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "with default ignore enabled it ignores ignored items",
|
||||||
|
file: filepath.Join("testdata", "server", "main.go"),
|
||||||
|
ignoreFile: filepath.Join("testdata", "server", "main.go"),
|
||||||
|
defaultIgnore: true,
|
||||||
|
expectIgnore: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "without default ignore enabled it ignores ignored items",
|
||||||
|
file: filepath.Join("testdata", "server", "main.go"),
|
||||||
|
ignoreFile: filepath.Join("testdata", "server", "main.go"),
|
||||||
|
defaultIgnore: false,
|
||||||
|
expectIgnore: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
srvdir := "."
|
||||||
|
|
||||||
|
watchItems := []string{srvdir}
|
||||||
|
ignoreItems := []string{}
|
||||||
|
if len(tc.ignoreFile) > 0 {
|
||||||
|
ignoreItems = append(ignoreItems, tc.ignoreFile)
|
||||||
|
}
|
||||||
|
extensions := []string{"go"}
|
||||||
|
|
||||||
|
wCfg := WatcherConfig{
|
||||||
|
DefaultIgnore: tc.defaultIgnore,
|
||||||
|
WatchItems: watchItems,
|
||||||
|
IgnoreItems: ignoreItems,
|
||||||
|
Extensions: extensions,
|
||||||
|
}
|
||||||
|
w, err := NewWatcher(wCfg)
|
||||||
|
assert.Nil(t, err, "wacher error")
|
||||||
|
|
||||||
|
wt := w.(*watcher)
|
||||||
|
|
||||||
|
filePath := tc.file
|
||||||
|
file, err := os.Open(filePath)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fileInfo, err := file.Stat()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.Equal(t, tc.expectIgnore, wt.ignoreFile(filePath, fileInfo))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestWatcherResolvePaths(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
name string
|
||||||
|
paths []string
|
||||||
|
extensions, expectPaths map[string]bool
|
||||||
|
err error
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "remove duplicated paths",
|
||||||
|
paths: []string{"testdata/test-duplicated-paths", "testdata/test-duplicated-paths"},
|
||||||
|
extensions: map[string]bool{".txt": true},
|
||||||
|
expectPaths: map[string]bool{"testdata/test-duplicated-paths": true},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "remove duplicated paths from glob",
|
||||||
|
paths: []string{"testdata/test-duplicated-paths", "testdata/test-duplicated-paths/**/*"},
|
||||||
|
extensions: map[string]bool{".txt": true},
|
||||||
|
expectPaths: map[string]bool{"testdata/test-duplicated-paths": true},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "remove duplicated paths from glob with inverse order",
|
||||||
|
paths: []string{"testdata/test-duplicated-paths/**/*", "testdata/test-duplicated-paths"},
|
||||||
|
extensions: map[string]bool{".txt": true},
|
||||||
|
expectPaths: map[string]bool{"testdata/test-duplicated-paths": true},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
paths, err := resolvePaths(tc.paths, tc.extensions)
|
||||||
|
if tc.err == nil {
|
||||||
|
assert.Nil(t, err, "resolve path error")
|
||||||
|
assert.Equal(t, tc.expectPaths, paths)
|
||||||
|
} else {
|
||||||
|
assert.Equal(t, tc.err, err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue