gotdd/mocking.go

46 lines
702 B
Go
Raw Normal View History

2022-01-20 04:20:12 +00:00
package main
import (
"fmt"
"io"
"os"
"time"
)
const finalWord = "Go!"
const countdownStart = 3
type Sleeper interface {
Sleep()
}
type DefaultSleeper struct {
}
type ConfigurableSleeper struct {
duration time.Duration
sleep func(duration time.Duration)
}
func Countdown_main() {
sleeper := &ConfigurableSleeper{1 * time.Second, time.Sleep}
Countdown(os.Stdout, sleeper)
}
func (d *DefaultSleeper) Sleep() {
time.Sleep(1 * time.Second)
}
func Countdown(out io.Writer, sleeper Sleeper) {
for i := countdownStart; i > 0; i-- {
sleeper.Sleep()
fmt.Fprintln(out, i)
}
sleeper.Sleep()
fmt.Fprint(out, finalWord)
}
func (c *ConfigurableSleeper) Sleep() {
c.sleep(c.duration)
}