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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
package helper
import (
"testing"
"time"
"github.com/stretchr/testify/require"
)
func TestTimerTicker(t *testing.T) {
const interval = 10 * time.Millisecond
const wait = 2 * interval
ticker := NewTimerTicker(interval)
select {
case <-ticker.C():
t.Fatalf("ticker should be inactive before first reset call")
case <-time.After(wait):
}
ticker.Reset()
select {
case <-ticker.C():
case <-time.After(wait):
t.Fatalf("timed out waiting for a tick")
}
ticker.Reset()
ticker.Stop()
select {
case <-ticker.C():
t.Fatalf("should not receive a tick if the ticker was stopped")
case <-time.After(wait):
}
}
func TestManualTicker(t *testing.T) {
ticker := NewManualTicker()
require.NotPanics(t, ticker.Reset)
require.NotPanics(t, ticker.Stop)
reset := false
ticker.ResetFunc = func() { reset = true }
ticker.Reset()
require.True(t, reset)
stopped := false
ticker.StopFunc = func() { stopped = true }
ticker.Stop()
require.True(t, stopped)
select {
case <-ticker.C():
t.Fatalf("ManualTicker ticked before calling Tick")
default:
}
ticker.Tick()
select {
case <-ticker.C():
default:
t.Fatalf("did not receive expected tick")
}
}
func TestCountTicker(t *testing.T) {
callbackCalled := make(chan struct{}, 1)
callback := func() { callbackCalled <- struct{}{} }
numCalls := 2
ticker := NewCountTicker(numCalls, callback)
for i := 0; i < numCalls; i++ {
ticker.Reset()
select {
case <-ticker.C():
case <-callbackCalled:
t.Fatalf("Callback should not be called before the number of is reached")
default:
t.Fatalf("did not receive expected tick")
}
}
for i := 0; i < numCalls; i++ {
ticker.Reset()
select {
case <-ticker.C():
t.Fatalf("Should not tick after the maximum number of reset calls is reached")
case <-callbackCalled:
default:
t.Fatalf("callback was not called as expected")
}
}
}
|