github.com/milanaleksic/devd@v1.0.4/watch_test.go (about) 1 package devd 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 "sync" 8 "testing" 9 "time" 10 11 "github.com/cortesi/moddwatch" 12 "github.com/cortesi/termlog" 13 ) 14 15 func addTempFile(t *testing.T, tmpFolder string, fname string, content string) { 16 if err := ioutil.WriteFile(tmpFolder+"/"+fname, []byte(content), 0644); err != nil { 17 t.Error(err) 18 } 19 } 20 21 func TestRouteWatch(t *testing.T) { 22 logger := termlog.NewLog() 23 logger.Quiet() 24 25 tmpFolder, err := ioutil.TempDir("", "") 26 if err != nil { 27 t.Error(err) 28 } 29 defer os.RemoveAll(tmpFolder) 30 31 // Ensure that using . for the path works: 32 os.Chdir(tmpFolder) 33 routes := make(RouteCollection) 34 routes.Add(".", nil) 35 36 changedFiles := make(map[string]int) 37 ch := make(chan []string, 1024) 38 39 var exited sync.WaitGroup 40 exited.Add(1) 41 var lck sync.Mutex 42 go func() { 43 for { 44 data, more := <-ch 45 if more { 46 for i := range data { 47 lck.Lock() 48 fmt.Println(data) 49 if _, ok := changedFiles[data[i]]; !ok { 50 changedFiles[data[i]] = 1 51 } 52 lck.Unlock() 53 } 54 } else { 55 exited.Done() 56 return 57 } 58 } 59 }() 60 watchers := make([]*moddwatch.Watcher, len(routes)) 61 i := 0 62 for r := range routes { 63 watcher, err := routes[r].Watch(ch, nil, logger) 64 watchers[i] = watcher 65 if err != nil { 66 t.Error(err) 67 } 68 i++ 69 } 70 71 addTempFile(t, tmpFolder, "a.txt", "foo\n") 72 addTempFile(t, tmpFolder, "c.txt", "bar\n") 73 addTempFile(t, tmpFolder, "another.file.txt", "bar\n") 74 75 for i := 0; i < 100; i++ { 76 lck.Lock() 77 if len(changedFiles) >= 3 { 78 lck.Unlock() 79 break 80 } 81 lck.Unlock() 82 time.Sleep(50 * time.Millisecond) 83 } 84 85 for _, v := range watchers { 86 v.Stop() 87 } 88 close(ch) 89 90 exited.Wait() 91 92 if len(changedFiles) != 3 { 93 t.Errorf("wanted 3 changed files, got %d", len(changedFiles)) 94 } 95 }