-
Notifications
You must be signed in to change notification settings - Fork 326
/
Copy pathfake.go
64 lines (54 loc) · 1.32 KB
/
fake.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package analytics
import (
"sync"
"testing"
"time"
"github.com/tilt-dev/wmclient/pkg/analytics"
)
type FakeOpter struct {
initialOpt analytics.Opt
calls []analytics.Opt
mu sync.Mutex
}
func NewFakeOpter(initialOpt analytics.Opt) *FakeOpter {
return &FakeOpter{initialOpt: initialOpt}
}
func DefaultFakeOpter() *FakeOpter {
return NewFakeOpter(analytics.OptDefault)
}
func (to *FakeOpter) ReadUserOpt() (analytics.Opt, error) {
to.mu.Lock()
defer to.mu.Unlock()
if len(to.calls) == 0 {
return to.initialOpt, nil
}
return to.calls[len(to.calls)-1], nil
}
func (to *FakeOpter) SetUserOpt(opt analytics.Opt) error {
to.mu.Lock()
defer to.mu.Unlock()
to.calls = append(to.calls, opt)
return nil
}
func (to *FakeOpter) Calls() []analytics.Opt {
to.mu.Lock()
defer to.mu.Unlock()
return append([]analytics.Opt{}, to.calls...)
}
func (to *FakeOpter) WaitUntilCount(t *testing.T, expectedCount int) {
timeout := time.After(time.Second)
for {
select {
case <-time.After(5 * time.Millisecond):
actualCount := len(to.Calls())
if actualCount == expectedCount {
return
}
case <-timeout:
actualCount := len(to.Calls())
t.Errorf("waiting for opt setting count to be %d. opt setting count is currently %d", expectedCount, actualCount)
t.FailNow()
}
}
}
var _ AnalyticsOpter = &FakeOpter{}