Chromium Code Reviews| Index: go/src/infra/libs/clock/testclock/testtimer.go |
| diff --git a/go/src/infra/libs/clock/testclock/testtimer.go b/go/src/infra/libs/clock/testclock/testtimer.go |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..e3cefdc0677a6093c776379a227a29dfc15be6e8 |
| --- /dev/null |
| +++ b/go/src/infra/libs/clock/testclock/testtimer.go |
| @@ -0,0 +1,61 @@ |
| +// Copyright (c) 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +package testclock |
| + |
| +import ( |
| + "time" |
| + |
| + "infra/libs/clock" |
| +) |
| + |
| +// TimerFactory is a function that generates a new Timer instance. |
| +type TimerFactory func() clock.Timer |
| + |
| +// TestTimer is a Timer implementation that can be used for testing. The timer can be |
| +// signalled via its Signal method. |
| +type TestTimer interface { |
| + clock.Timer |
| + Signal(time.Time) // Signal the test timer. |
| +} |
| + |
| +// timer is an implementation of clock.TestTimer that uses a channel |
| +// to signal the timer to fire. |
| +// |
| +// The channel is buffered so it can be used without requiring a separate signalling |
| +// goroutine. |
| +type timer struct { |
| + signalC chan time.Time // Underlying signal channel. |
| + active bool // If true, the timer is active. |
| +} |
| + |
| +var _ TestTimer = (*timer)(nil) |
| + |
| +// NewTimer returns a new, instantiated timer. |
| +func NewTimer() TestTimer { |
| + return &timer{ |
| + signalC: make(chan time.Time, 1), |
| + } |
| +} |
| + |
| +// Signals the timer. |
| +func (t *timer) Signal(tm time.Time) { |
| + t.signalC <- tm |
| +} |
| + |
| +// Implements Timer. |
|
iannucci
2015/06/02 22:19:03
don't need these comments
dnj
2015/06/03 00:25:28
Done.
|
| +func (t *timer) GetC() (c <-chan time.Time) { |
| + return t.signalC |
| +} |
| + |
| +// Implements Timer. |
| +func (t *timer) Reset(d time.Duration) bool { |
| + return t.active |
| +} |
| + |
| +// Implements Timer. |
| +func (t *timer) Stop() (active bool) { |
| + active, t.active = t.active, false |
| + return |
| +} |