github.com/golazy/golazy@v0.0.7-0.20221012133820-968fe65a0b65/lazydev/filewatcher/filewatcher_test.go (about) 1 package filewatcher 2 3 import ( 4 "fmt" 5 "os" 6 "path" 7 "strings" 8 "testing" 9 "time" 10 ) 11 12 func TestFindRootDirectory(t *testing.T) { 13 wd, _ := os.Getwd() 14 top, err := findRootDirectory(wd) 15 if err != nil { 16 t.Fatal(err) 17 } 18 if path.Base(top) != "golazy" { 19 t.Fatal(top) 20 } 21 } 22 23 func TestWatcher(t *testing.T) { 24 25 wd, err := os.Getwd() 26 if err != nil { 27 t.Fatal(err) 28 } 29 fw, err := New(wd) 30 if err != nil { 31 t.Fatal(err) 32 } 33 34 w, err := fw.Watch() 35 if err != nil { 36 t.Fatal(err) 37 } 38 39 os.Create("t") 40 time.Sleep(time.Millisecond) 41 os.Remove("t") 42 time.Sleep(time.Millisecond) 43 fw.Close() 44 45 changes := make([]string, 0) 46 calls := 0 47 for c := range w { 48 calls = calls + 1 49 for _, change := range c { 50 changes = append(changes, 51 fmt.Sprintf("%s(%s)", change.Op, path.Base(change.Path))) 52 53 } 54 } 55 changeList := strings.Join(changes, "\n") 56 57 if calls != 1 { 58 t.Fatal("expected 1 call. Got ", calls) 59 } 60 if changeList != "CREATE(t)\nREMOVE(t)" { 61 t.Fatal(changeList) 62 } 63 64 // Test delay is working 65 66 delay = 0 67 calls = 0 68 fw, err = New(wd) 69 if err != nil { 70 t.Fatal(err) 71 } 72 73 w, err = fw.Watch() 74 if err != nil { 75 t.Fatal(err) 76 } 77 78 os.Create("t") 79 time.Sleep(time.Millisecond) 80 os.Remove("t") 81 time.Sleep(time.Millisecond) 82 fw.Close() 83 84 for range w { 85 calls = calls + 1 86 } 87 if calls != 2 { 88 t.Fatal("expecting 2 calls. Got", calls) 89 } 90 91 // Test ignore file 92 IgnoredFiles = []string{"t"} 93 fw, err = New(wd) 94 if err != nil { 95 t.Fatal(err) 96 } 97 98 w, err = fw.Watch() 99 if err != nil { 100 t.Fatal(err) 101 } 102 103 os.Create("t") 104 time.Sleep(time.Millisecond) 105 os.Remove("t") 106 time.Sleep(time.Millisecond) 107 fw.Close() 108 109 calls = 0 110 for range w { 111 calls = calls + 1 112 } 113 if calls != 0 { 114 t.Fatal("t should have been ignored") 115 } 116 117 // Test ignore dir 118 IgnoredFiles = []string{} 119 IgnoredDirs = []string{"filewatcher"} 120 fw, err = New(wd) 121 if err != nil { 122 t.Fatal(err) 123 } 124 125 w, err = fw.Watch() 126 if err != nil { 127 t.Fatal(err) 128 } 129 130 os.Create("t") 131 time.Sleep(time.Millisecond) 132 os.Remove("t") 133 time.Sleep(time.Millisecond) 134 fw.Close() 135 136 calls = 0 137 for range w { 138 calls = calls + 1 139 } 140 if calls != 0 { 141 t.Fatal("filewatcher should have been ignored") 142 } 143 144 }