mirror of
https://github.com/hanzoai/oxy.git
synced 2026-09-30 23:42:31 +00:00
145 lines
2.6 KiB
Go
145 lines
2.6 KiB
Go
package clock
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestSleep(t *testing.T) {
|
|
start := Now()
|
|
|
|
// When
|
|
Sleep(100 * time.Millisecond)
|
|
|
|
// Then
|
|
if Now().Sub(start) < 100*time.Millisecond {
|
|
assert.Fail(t, "Sleep did not last long enough")
|
|
}
|
|
}
|
|
|
|
func TestAfter(t *testing.T) {
|
|
start := Now()
|
|
|
|
// When
|
|
end := <-After(100 * time.Millisecond)
|
|
|
|
// Then
|
|
if end.Sub(start) < 100*time.Millisecond {
|
|
assert.Fail(t, "Sleep did not last long enough")
|
|
}
|
|
}
|
|
|
|
func TestAfterFunc(t *testing.T) {
|
|
start := Now()
|
|
endCh := make(chan time.Time, 1)
|
|
|
|
// When
|
|
AfterFunc(100*time.Millisecond, func() { endCh <- time.Now() })
|
|
|
|
// Then
|
|
end := <-endCh
|
|
if end.Sub(start) < 100*time.Millisecond {
|
|
assert.Fail(t, "Sleep did not last long enough")
|
|
}
|
|
}
|
|
|
|
func TestNewTimer(t *testing.T) {
|
|
start := Now()
|
|
|
|
// When
|
|
timer := NewTimer(100 * time.Millisecond)
|
|
|
|
// Then
|
|
end := <-timer.C()
|
|
if end.Sub(start) < 100*time.Millisecond {
|
|
assert.Fail(t, "Sleep did not last long enough")
|
|
}
|
|
}
|
|
|
|
func TestTimerStop(t *testing.T) {
|
|
timer := NewTimer(50 * time.Millisecond)
|
|
|
|
// When
|
|
active := timer.Stop()
|
|
|
|
// Then
|
|
assert.Equal(t, true, active)
|
|
time.Sleep(100)
|
|
select {
|
|
case <-timer.C():
|
|
assert.Fail(t, "Timer should not have fired")
|
|
default:
|
|
}
|
|
}
|
|
|
|
func TestTimerReset(t *testing.T) {
|
|
t.Skip("fail on the CI for darwin")
|
|
start := time.Now()
|
|
timer := NewTimer(300 * time.Millisecond)
|
|
|
|
// When
|
|
timer.Reset(100 * time.Millisecond)
|
|
|
|
// Then
|
|
end := <-timer.C()
|
|
if end.Sub(start) >= 150*time.Millisecond {
|
|
assert.Fail(t, "Waited too long", end.Sub(start).String())
|
|
}
|
|
}
|
|
|
|
func TestNewTicker(t *testing.T) {
|
|
start := Now()
|
|
|
|
// When
|
|
timer := NewTicker(100 * time.Millisecond)
|
|
|
|
// Then
|
|
end := <-timer.C()
|
|
if end.Sub(start) < 100*time.Millisecond {
|
|
assert.Fail(t, "Sleep did not last long enough")
|
|
}
|
|
end = <-timer.C()
|
|
if end.Sub(start) < 200*time.Millisecond {
|
|
assert.Fail(t, "Sleep did not last long enough")
|
|
}
|
|
|
|
timer.Stop()
|
|
time.Sleep(150)
|
|
select {
|
|
case <-timer.C():
|
|
assert.Fail(t, "Ticker should not have fired")
|
|
default:
|
|
}
|
|
}
|
|
|
|
func TestTick(t *testing.T) {
|
|
start := Now()
|
|
|
|
// When
|
|
ch := Tick(100 * time.Millisecond)
|
|
|
|
// Then
|
|
end := <-ch
|
|
if end.Sub(start) < 100*time.Millisecond {
|
|
assert.Fail(t, "Sleep did not last long enough")
|
|
}
|
|
end = <-ch
|
|
if end.Sub(start) < 200*time.Millisecond {
|
|
assert.Fail(t, "Sleep did not last long enough")
|
|
}
|
|
}
|
|
|
|
func TestNewStoppedTimer(t *testing.T) {
|
|
timer := NewStoppedTimer()
|
|
|
|
// When/Then
|
|
select {
|
|
case <-timer.C():
|
|
assert.Fail(t, "Timer should not have fired")
|
|
default:
|
|
}
|
|
assert.Equal(t, false, timer.Stop())
|
|
}
|