clock.go 833 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package fs
  2. import (
  3. "time"
  4. )
  5. var now time.Time
  6. func init() {
  7. now = time.Now()
  8. }
  9. type ticker interface {
  10. getC() <-chan time.Time
  11. }
  12. type clock interface {
  13. Now() time.Time
  14. Ticker() ticker
  15. }
  16. type realTicker time.Ticker
  17. func (rt realTicker) getC() <-chan time.Time {
  18. return rt.C
  19. }
  20. type realClock struct{}
  21. func (rc realClock) Now() time.Time {
  22. return time.Now()
  23. }
  24. func (rc realClock) Ticker() ticker {
  25. ticker := time.NewTicker(time.Second)
  26. return realTicker(*ticker)
  27. }
  28. type mockClock struct{}
  29. func (mc mockClock) Now() time.Time {
  30. return now
  31. }
  32. func (mc mockClock) Ticker() ticker {
  33. return newMockTicker()
  34. }
  35. type mockTicker struct {
  36. c <-chan time.Time
  37. }
  38. func (mc mockTicker) getC() <-chan time.Time {
  39. return mc.c
  40. }
  41. func newMockTicker() mockTicker {
  42. c := make(<-chan time.Time)
  43. return mockTicker{
  44. c: c,
  45. }
  46. }