| //go:build freebsd || openbsd || netbsd || dragonfly || darwin |
| |
| package fsnotify |
| |
| import ( |
| "fmt" |
| "strings" |
| "testing" |
| ) |
| |
| func TestRemoveState(t *testing.T) { |
| var ( |
| tmp = t.TempDir() |
| dir = join(tmp, "dir") |
| file = join(dir, "file") |
| ) |
| mkdir(t, dir) |
| touch(t, file) |
| |
| w := newWatcher(t, tmp) |
| kq := w.b.(*kqueue) |
| addWatch(t, w, tmp) |
| addWatch(t, w, file) |
| |
| check := func(wantUser, wantTotal int) { |
| t.Helper() |
| |
| if len(kq.watches.path) != wantTotal { |
| var d []string |
| for k, v := range kq.watches.path { |
| d = append(d, fmt.Sprintf("%#v = %#v", k, v)) |
| } |
| t.Errorf("unexpected number of entries in w.watches.path (have %d, want %d):\n%v", |
| len(kq.watches.path), wantTotal, strings.Join(d, "\n")) |
| } |
| if len(kq.watches.wd) != wantTotal { |
| var d []string |
| for k, v := range kq.watches.wd { |
| d = append(d, fmt.Sprintf("%#v = %#v", k, v)) |
| } |
| t.Errorf("unexpected number of entries in w.watches.wd (have %d, want %d):\n%v", |
| len(kq.watches.wd), wantTotal, strings.Join(d, "\n")) |
| } |
| if len(kq.watches.byUser) != wantUser { |
| var d []string |
| for k, v := range kq.watches.byUser { |
| d = append(d, fmt.Sprintf("%#v = %#v", k, v)) |
| } |
| t.Errorf("unexpected number of entries in w.watches.byUser (have %d, want %d):\n%v", |
| len(kq.watches.byUser), wantUser, strings.Join(d, "\n")) |
| } |
| } |
| |
| check(2, 3) |
| |
| if err := w.Remove(file); err != nil { |
| t.Fatal(err) |
| } |
| check(1, 2) |
| |
| if err := w.Remove(tmp); err != nil { |
| t.Fatal(err) |
| } |
| check(0, 0) |
| |
| // Don't check these after ever remove since they don't map easily to number |
| // of files watches. Just make sure they're 0 after everything is removed. |
| { |
| want := 0 |
| if len(kq.watches.byDir) != want { |
| var d []string |
| for k, v := range kq.watches.byDir { |
| d = append(d, fmt.Sprintf("%#v = %#v", k, v)) |
| } |
| t.Errorf("unexpected number of entries in w.watches.byDir (have %d, want %d):\n%v", |
| len(kq.watches.byDir), want, strings.Join(d, "\n")) |
| } |
| |
| if len(kq.watches.seen) != want { |
| var d []string |
| for k, v := range kq.watches.seen { |
| d = append(d, fmt.Sprintf("%#v = %#v", k, v)) |
| } |
| t.Errorf("unexpected number of entries in w.watches.seen (have %d, want %d):\n%v", |
| len(kq.watches.seen), want, strings.Join(d, "\n")) |
| return |
| } |
| } |
| } |