1 // Copyright (c) 2014-2015 The Notify Authors. All rights reserved.
2 // Use of this source code is governed by the MIT license that can be
3 // found in the LICENSE file.
13 func call(wp watchpoint, fn interface{}, args []interface{}) eventDiff {
14 vals := []reflect.Value{reflect.ValueOf(wp)}
15 for _, arg := range args {
16 vals = append(vals, reflect.ValueOf(arg))
18 res := reflect.ValueOf(fn).Call(vals)
19 if n := len(res); n != 1 {
20 panic(fmt.Sprintf("unexpected len(res)=%d", n))
22 diff, ok := res[0].Interface().(eventDiff)
24 panic(fmt.Sprintf("want typeof(diff)=EventDiff; got %T", res[0].Interface()))
29 func TestWatchpoint(t *testing.T) {
31 all := All | recursive
32 cases := [...]struct {
41 []interface{}{ch[0], Remove},
48 []interface{}{ch[1], Create | Remove | recursive},
49 eventDiff{Remove, Remove | Create},
50 Create | Remove | recursive,
55 []interface{}{ch[2], Create | Rename},
56 eventDiff{Create | Remove, Create | Remove | Rename},
57 Create | Remove | Rename | recursive,
62 []interface{}{ch[0], Write | recursive},
63 eventDiff{Create | Remove | Rename, Create | Remove | Rename | Write},
64 Create | Remove | Rename | Write | recursive,
69 []interface{}{ch[2], Remove | recursive},
71 Create | Remove | Rename | Write | recursive,
76 []interface{}{ch[0], all},
77 eventDiff{Create | Remove | Rename | Write, Create | Remove | Rename},
78 Create | Remove | Rename | recursive,
83 []interface{}{ch[2], all},
84 eventDiff{Create | Remove | Rename, Create | Remove},
85 Create | Remove | recursive,
90 []interface{}{ch[3], Create | Remove},
92 Create | Remove | recursive,
97 []interface{}{ch[1], all},
104 []interface{}{ch[3], recursive | Write},
105 eventDiff{Create | Remove, Create | Remove | Write},
106 Create | Remove | Write | recursive,
111 []interface{}{ch[3], Create},
112 eventDiff{Create | Remove | Write, Remove | Write},
113 Remove | Write | recursive,
118 []interface{}{ch[3], Create | Rename},
119 eventDiff{Remove | Write, Create | Remove | Rename | Write},
120 Create | Remove | Rename | Write | recursive,
125 []interface{}{ch[2], Remove | Write},
127 Create | Remove | Rename | Write | recursive,
132 []interface{}{ch[3], Create | Remove | Write},
133 eventDiff{Create | Remove | Rename | Write, Remove | Rename | Write},
134 Remove | Rename | Write | recursive,
139 []interface{}{ch[2], Remove},
140 eventDiff{Remove | Rename | Write, Rename | Write},
141 Rename | Write | recursive,
146 []interface{}{ch[3], Rename | recursive},
147 eventDiff{Rename | Write, Write},
152 for i, cas := range cases {
153 if diff := call(wp, cas.fn, cas.args); diff != cas.diff {
154 t.Errorf("want diff=%v; got %v (i=%d)", cas.diff, diff, i)
157 if total := wp[nil]; total != cas.total {
158 t.Errorf("want total=%v; got %v (i=%d)", cas.total, total, i)