package contextutil import ( "context" "testing" "time" "github.com/stretchr/testify/assert" ) func TestMerge(t *testing.T) { type key string t.Run("value", func(t *testing.T) { type contextKey string k1 := contextKey("key1") k2 := contextKey("key2") ctx1 := context.WithValue(context.Background(), k1, "value1") ctx2 := context.WithValue(context.Background(), k2, "value2") ctx3, _ := Merge(ctx1, ctx2) assert.Equal(t, "value1", ctx3.Value(k1)) assert.Equal(t, "value2", ctx3.Value(k2)) }) t.Run("cancel", func(t *testing.T) { ctx1, cancel1 := context.WithCancel(context.Background()) defer cancel1() ctx2, cancel2 := context.WithCancel(context.Background()) ctx3, _ := Merge(ctx1, ctx2) cancel2() assert.Eventually(t, func() bool { select { case <-ctx3.Done(): return true default: return false } }, time.Second, time.Millisecond*100) }) }