-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwith_value_test.go
75 lines (52 loc) · 1.36 KB
/
with_value_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package byo_context
import (
"testing"
"github.com/stretchr/testify/require"
)
func Test_WithValue(t *testing.T) {
/*
ctx tree structure:
root
|
ctx1([k1, v1]) - ctx3- [k1,v1, k3, v3] - ctx4 ([k1,vv1], [k3, v3])
|
ctx2([k1, v1], [k2, v2]) - ctx5 ([k1,v1],[k2, v2], [k5, v5])
|
ctx6([k1, v1], [k2, vv2])
*/
k1 := "key1"
v1 := "value1"
root := Background()
ctx1 := WithValue(root, k1, v1)
k2 := "key2"
v2 := "value2"
ctx2 := WithValue(ctx1, k2, v2)
k3 := "key3"
v3 := "value3"
ctx3 := WithValue(ctx1, k3, v3)
vv1 := "value1-2"
ctx4 := WithValue(ctx3, k1, vv1)
k5 := "key5"
v5 := "value5"
ctx5 := WithValue(ctx2, k5, v5)
vv2 := "value2-2"
ctx6 := WithValue(ctx2, k2, vv2)
require.Equal(t, v1, ctx1.Value(k1))
require.Nil(t, ctx1.Value(k2))
require.Equal(t, v1, ctx2.Value(k1))
require.Equal(t, v2, ctx2.Value(k2))
require.Equal(t, v1, ctx3.Value(k1))
require.Nil(t, ctx3.Value(k2))
require.Equal(t, v3, ctx3.Value(k3))
require.Equal(t, vv1, ctx4.Value(k1))
require.Nil(t, ctx4.Value(k2))
require.Equal(t, v3, ctx4.Value(k3))
require.Equal(t, vv1, ctx4.Value(k1))
require.Equal(t, v1, ctx5.Value(k1))
require.Equal(t, v2, ctx5.Value(k2))
require.Nil(t, ctx5.Value(k3))
require.Equal(t, v5, ctx5.Value(k5))
require.Equal(t, v1, ctx6.Value(k1))
require.Equal(t, vv2, ctx6.Value(k2))
require.Nil(t, ctx6.Value(k3))
}