This repository has been archived by the owner on Jan 20, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathutils_test.go
84 lines (77 loc) · 1.8 KB
/
utils_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
76
77
78
79
80
81
82
83
84
// +build !appengine
package structor_test
import (
"testing"
"github.com/nikolay-turpitko/structor"
"github.com/stretchr/testify/assert"
)
func TestAddressableCopy(t *testing.T) {
type Inner struct {
a string `eval:"aaa"`
}
type T struct {
b string `eval:"bbb"`
c Inner
}
ev := structor.NewDefaultEvaluator(nil)
v1 := T{
c: Inner{},
}
c1 := structor.AddressableCopy(v1)
err := ev.Eval(c1, nil)
assert.NoError(t, err)
assert.NotEqual(t, "aaa", v1.c.a)
assert.NotEqual(t, "bbb", v1.b)
cv1 := c1.(*T)
assert.Equal(t, "aaa", cv1.c.a)
assert.Equal(t, "bbb", cv1.b)
v2 := &T{c: Inner{}}
c2 := structor.AddressableCopy(v2)
err = ev.Eval(c2, nil)
assert.NoError(t, err)
assert.NotEqual(t, "aaa", v2.c.a)
assert.NotEqual(t, "bbb", v2.b)
cv2 := c2.(*T)
assert.Equal(t, "aaa", cv2.c.a)
assert.Equal(t, "bbb", cv2.b)
}
func TestDeepCopy(t *testing.T) {
type Inner struct {
A string `eval:"aaa"`
}
type T struct {
B string `eval:"bbb"`
C Inner
D []Inner
E map[int]*Inner
}
ev := structor.NewDefaultEvaluator(nil)
v1 := T{
C: Inner{},
D: []Inner{{}, {}},
E: map[int]*Inner{42: &Inner{}},
}
c1 := structor.DeepCopy(v1)
err := ev.Eval(c1, nil)
assert.NoError(t, err)
assert.NotEqual(t, "aaa", v1.C.A)
assert.NotEqual(t, "bbb", v1.B)
assert.NotEqual(t, "aaa", v1.D[0].A)
assert.NotEqual(t, "aaa", v1.D[1].A)
assert.NotEqual(t, "aaa", v1.E[42].A)
cv1 := c1.(*T)
assert.Equal(t, "aaa", cv1.C.A)
assert.Equal(t, "bbb", cv1.B)
assert.Equal(t, "aaa", cv1.D[0].A)
assert.Equal(t, "aaa", cv1.D[1].A)
assert.Equal(t, "aaa", cv1.E[42].A)
v2 := &T{C: Inner{}}
c2 := structor.DeepCopy(v2)
err = ev.Eval(c2, nil)
assert.NoError(t, err)
assert.NotEqual(t, "aaa", v2.C.A)
assert.NotEqual(t, "bbb", v2.B)
cv2 := c2.(*T)
assert.Equal(t, "aaa", cv2.C.A)
assert.Equal(t, "bbb", cv2.B)
}