//go:build unit package coroutine import ( "context" "errors" "sync" "testing" "time" "git.sr.ht/~gabrielgio/img/pkg/testkit" ) var rError = errors.New("This is a error") func imediatReturn() (string, error) { return "A string", nil } func imediatErrorReturn() (string, error) { return "", rError } func haltedReturn() (string, error) { time.Sleep(time.Hour) return "", nil } func TestImediatReturn(t *testing.T) { ctx := context.Background() v, err := WrapProcess(ctx, imediatReturn) testkit.TestError(t, "WrapProcess", nil, err) testkit.TestValue(t, "WrapProcess", "A string", v) } func TestImediatErrorReturn(t *testing.T) { ctx := context.Background() v, err := WrapProcess(ctx, imediatErrorReturn) testkit.TestError(t, "WrapProcess", rError, err) testkit.TestValue(t, "WrapProcess", "", v) } func TestHaltedReturn(t *testing.T) { ctx := context.Background() ctx, cancel := context.WithCancel(ctx) var ( err error wg sync.WaitGroup ) wg.Add(1) go func(err *error) { defer wg.Done() _, *err = WrapProcess(ctx, haltedReturn) }(&err) cancel() wg.Wait() testkit.TestError(t, "WrapProcess", context.Canceled, err) }