@@ -32,6 +32,9 @@ type event interface {
32
32
}
33
33
34
34
func (m * Mock ) TickerFunc (ctx context.Context , d time.Duration , f func () error , tags ... string ) Waiter {
35
+ if d <= 0 {
36
+ panic ("TickerFunc called with negative or zero duration" )
37
+ }
35
38
m .mu .Lock ()
36
39
defer m .mu .Unlock ()
37
40
c := newCall (clockFunctionTickerFunc , tags , withDuration (d ))
@@ -51,6 +54,28 @@ func (m *Mock) TickerFunc(ctx context.Context, d time.Duration, f func() error,
51
54
return t
52
55
}
53
56
57
+ func (m * Mock ) NewTicker (d time.Duration , tags ... string ) * Ticker {
58
+ if d <= 0 {
59
+ panic ("NewTicker called with negative or zero duration" )
60
+ }
61
+ m .mu .Lock ()
62
+ defer m .mu .Unlock ()
63
+ c := newCall (clockFunctionNewTicker , tags , withDuration (d ))
64
+ m .matchCallLocked (c )
65
+ defer close (c .complete )
66
+ // 1 element buffer follows standard library implementation
67
+ ticks := make (chan time.Time , 1 )
68
+ t := & Ticker {
69
+ C : ticks ,
70
+ c : ticks ,
71
+ d : d ,
72
+ nxt : m .cur .Add (d ),
73
+ mock : m ,
74
+ }
75
+ m .addEventLocked (t )
76
+ return t
77
+ }
78
+
54
79
func (m * Mock ) NewTimer (d time.Duration , tags ... string ) * Timer {
55
80
m .mu .Lock ()
56
81
defer m .mu .Unlock ()
@@ -70,7 +95,7 @@ func (m *Mock) NewTimer(d time.Duration, tags ...string) *Timer {
70
95
go t .fire (t .mock .cur )
71
96
return t
72
97
}
73
- m .addTimerLocked (t )
98
+ m .addEventLocked (t )
74
99
return t
75
100
}
76
101
@@ -91,7 +116,7 @@ func (m *Mock) AfterFunc(d time.Duration, f func(), tags ...string) *Timer {
91
116
go t .fire (t .mock .cur )
92
117
return t
93
118
}
94
- m .addTimerLocked (t )
119
+ m .addEventLocked (t )
95
120
return t
96
121
}
97
122
@@ -122,8 +147,8 @@ func (m *Mock) Until(t time.Time, tags ...string) time.Duration {
122
147
return t .Sub (m .cur )
123
148
}
124
149
125
- func (m * Mock ) addTimerLocked ( t * Timer ) {
126
- m .all = append (m .all , t )
150
+ func (m * Mock ) addEventLocked ( e event ) {
151
+ m .all = append (m .all , e )
127
152
m .recomputeNextLocked ()
128
153
}
129
154
@@ -152,20 +177,12 @@ func (m *Mock) removeTimer(t *Timer) {
152
177
}
153
178
154
179
func (m * Mock ) removeTimerLocked (t * Timer ) {
155
- defer m .recomputeNextLocked ()
156
180
t .stopped = true
157
- var e event = t
158
- for i := range m .all {
159
- if m .all [i ] == e {
160
- m .all = append (m .all [:i ], m .all [i + 1 :]... )
161
- return
162
- }
163
- }
181
+ m .removeEventLocked (t )
164
182
}
165
183
166
- func (m * Mock ) removeTickerFuncLocked ( ct * mockTickerFunc ) {
184
+ func (m * Mock ) removeEventLocked ( e event ) {
167
185
defer m .recomputeNextLocked ()
168
- var e event = ct
169
186
for i := range m .all {
170
187
if m .all [i ] == e {
171
188
m .all = append (m .all [:i ], m .all [i + 1 :]... )
@@ -371,6 +388,18 @@ func (t Trapper) TickerFuncWait(tags ...string) *Trap {
371
388
return t .mock .newTrap (clockFunctionTickerFuncWait , tags )
372
389
}
373
390
391
+ func (t Trapper ) NewTicker (tags ... string ) * Trap {
392
+ return t .mock .newTrap (clockFunctionNewTicker , tags )
393
+ }
394
+
395
+ func (t Trapper ) TickerStop (tags ... string ) * Trap {
396
+ return t .mock .newTrap (clockFunctionTickerStop , tags )
397
+ }
398
+
399
+ func (t Trapper ) TickerReset (tags ... string ) * Trap {
400
+ return t .mock .newTrap (clockFunctionTickerReset , tags )
401
+ }
402
+
374
403
func (t Trapper ) Now (tags ... string ) * Trap {
375
404
return t .mock .newTrap (clockFunctionNow , tags )
376
405
}
@@ -459,7 +488,7 @@ func (m *mockTickerFunc) exitLocked(err error) {
459
488
}
460
489
m .done = true
461
490
m .err = err
462
- m .mock .removeTickerFuncLocked (m )
491
+ m .mock .removeEventLocked (m )
463
492
m .cond .Broadcast ()
464
493
}
465
494
@@ -493,6 +522,9 @@ const (
493
522
clockFunctionTimerReset
494
523
clockFunctionTickerFunc
495
524
clockFunctionTickerFuncWait
525
+ clockFunctionNewTicker
526
+ clockFunctionTickerReset
527
+ clockFunctionTickerStop
496
528
clockFunctionNow
497
529
clockFunctionSince
498
530
clockFunctionUntil
0 commit comments