// Ensure that the clock's time matches the standary library. func TestClock_Now(t *testing.T) { a := time.Now().Round(time.Second) b := clock.New().Now().Round(time.Second) if !a.Equal(b) { t.Errorf("not equal: %s != %s", a, b) } }
// Ensure that the clock's timer can be stopped. func TestClock_Timer_Stop(t *testing.T) { var ok bool go func() { time.Sleep(10 * time.Millisecond) ok = true }() timer := clock.New().Timer(20 * time.Millisecond) timer.Stop() select { case <-timer.C: t.Fatal("unexpected send") case <-time.After(30 * time.Millisecond): } }
// Ensure that the clock sleeps for the appropriate amount of time. func TestClock_Sleep(t *testing.T) { var ok bool go func() { time.Sleep(10 * time.Millisecond) ok = true }() go func() { time.Sleep(30 * time.Millisecond) t.Fatal("too late") }() gosched() clock.New().Sleep(20 * time.Millisecond) if !ok { t.Fatal("too early") } }
// Ensure that the clock ticks correctly. func TestClock_Tick(t *testing.T) { var ok bool go func() { time.Sleep(10 * time.Millisecond) ok = true }() go func() { time.Sleep(50 * time.Millisecond) t.Fatal("too late") }() gosched() c := clock.New().Tick(20 * time.Millisecond) <-c <-c if !ok { t.Fatal("too early") } }
// Ensure that the clock's ticker ticks correctly. func TestClock_Ticker(t *testing.T) { var ok bool go func() { time.Sleep(100 * time.Millisecond) ok = true }() go func() { time.Sleep(200 * time.Millisecond) t.Fatal("too late") }() gosched() ticker := clock.New().Ticker(50 * time.Millisecond) <-ticker.C <-ticker.C if !ok { t.Fatal("too early") } }
// Ensure that the clock's AfterFunc executes at the correct time. func TestClock_AfterFunc(t *testing.T) { var ok bool go func() { time.Sleep(10 * time.Millisecond) ok = true }() go func() { time.Sleep(30 * time.Millisecond) t.Fatal("too late") }() gosched() var wg sync.WaitGroup wg.Add(1) clock.New().AfterFunc(20*time.Millisecond, func() { wg.Done() }) wg.Wait() if !ok { t.Fatal("too early") } }