lens @ 91d413b3a15a15fd8b710d8f5a1532d2e3de6f05

 1//go:build unit
 2
 3package coroutine
 4
 5import (
 6	"context"
 7	"errors"
 8	"sync"
 9	"testing"
10	"time"
11
12	"git.sr.ht/~gabrielgio/img/pkg/testkit"
13)
14
15var rError = errors.New("This is a error")
16
17func imediatReturn() (string, error) {
18	return "A string", nil
19}
20
21func imediatErrorReturn() (string, error) {
22	return "", rError
23}
24
25func haltedReturn() (string, error) {
26	time.Sleep(time.Hour)
27	return "", nil
28}
29
30func TestImediatReturn(t *testing.T) {
31	ctx := context.Background()
32	v, err := WrapProcess(ctx, imediatReturn)
33	testkit.TestError(t, "WrapProcess", nil, err)
34	testkit.TestValue(t, "WrapProcess", "A string", v)
35}
36
37func TestImediatErrorReturn(t *testing.T) {
38	ctx := context.Background()
39	v, err := WrapProcess(ctx, imediatErrorReturn)
40	testkit.TestError(t, "WrapProcess", rError, err)
41	testkit.TestValue(t, "WrapProcess", "", v)
42}
43
44func TestHaltedReturn(t *testing.T) {
45	ctx := context.Background()
46	ctx, cancel := context.WithCancel(ctx)
47
48	var (
49		err error
50		wg  sync.WaitGroup
51	)
52
53	wg.Add(1)
54	go func(err *error) {
55		defer wg.Done()
56		_, *err = WrapProcess(ctx, haltedReturn)
57	}(&err)
58
59	cancel()
60	wg.Wait()
61
62	testkit.TestError(t, "WrapProcess", context.Canceled, err)
63}