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