1 // Copyright 2020 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
13 func TestDebouncer(t *testing.T) {
28 {key: "a", order: 1, wantFired: false},
29 {key: "a", order: 2, wantFired: true},
33 label: "distinct labels",
35 {key: "a", order: 1, wantFired: true},
36 {key: "b", order: 2, wantFired: true},
40 label: "reverse order",
42 {key: "a", order: 2, wantFired: true},
43 {key: "a", order: 1, wantFired: false},
47 label: "multiple overrides",
49 {key: "a", order: 1, wantFired: false},
50 {key: "a", order: 2, wantFired: false},
51 {key: "a", order: 3, wantFired: false},
52 {key: "a", order: 4, wantFired: false},
53 {key: "a", order: 5, wantFired: true},
57 for _, test := range tests {
59 t.Run(test.label, func(t *testing.T) {
63 for i, e := range test.events {
66 d.debounce(e.key, e.order, 500*time.Millisecond, func() {
71 // For a bit more fidelity, sleep to try to make things actually
72 // execute in order. This doesn't have to be perfect, but could be done
73 // properly using fake timers.
74 if i < len(test.events)-1 {
75 time.Sleep(10 * time.Millisecond)
79 for _, event := range test.events {
80 if event.fired != event.wantFired {
81 t.Errorf("(key: %q, order: %d): fired = %t, want %t",
82 event.key, event.order, event.fired, event.wantFired)