58 lines
1.2 KiB
Go
58 lines
1.2 KiB
Go
|
package run_test
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/oklog/run"
|
||
|
)
|
||
|
|
||
|
func TestZero(t *testing.T) {
|
||
|
var g run.Group
|
||
|
res := make(chan error)
|
||
|
go func() { res <- g.Run() }()
|
||
|
select {
|
||
|
case err := <-res:
|
||
|
if err != nil {
|
||
|
t.Errorf("%v", err)
|
||
|
}
|
||
|
case <-time.After(100 * time.Millisecond):
|
||
|
t.Error("timeout")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestOne(t *testing.T) {
|
||
|
myError := errors.New("foobar")
|
||
|
var g run.Group
|
||
|
g.Add(func() error { return myError }, func(error) {})
|
||
|
res := make(chan error)
|
||
|
go func() { res <- g.Run() }()
|
||
|
select {
|
||
|
case err := <-res:
|
||
|
if want, have := myError, err; want != have {
|
||
|
t.Errorf("want %v, have %v", want, have)
|
||
|
}
|
||
|
case <-time.After(100 * time.Millisecond):
|
||
|
t.Error("timeout")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestMany(t *testing.T) {
|
||
|
interrupt := errors.New("interrupt")
|
||
|
var g run.Group
|
||
|
g.Add(func() error { return interrupt }, func(error) {})
|
||
|
cancel := make(chan struct{})
|
||
|
g.Add(func() error { <-cancel; return nil }, func(error) { close(cancel) })
|
||
|
res := make(chan error)
|
||
|
go func() { res <- g.Run() }()
|
||
|
select {
|
||
|
case err := <-res:
|
||
|
if want, have := interrupt, err; want != have {
|
||
|
t.Errorf("want %v, have %v", want, have)
|
||
|
}
|
||
|
case <-time.After(100 * time.Millisecond):
|
||
|
t.Errorf("timeout")
|
||
|
}
|
||
|
}
|