1 package objx_test
2
3 import (
4 "strings"
5 "testing"
6
7 "github.com/stretchr/objx"
8 "github.com/stretchr/testify/assert"
9 "github.com/stretchr/testify/require"
10 )
11
12 func TestExclude(t *testing.T) {
13 m := objx.Map{
14 "name": "Mat",
15 "age": 29,
16 "secret": "ABC",
17 }
18
19 excluded := m.Exclude([]string{"secret"})
20
21 assert.Equal(t, m["name"], excluded["name"])
22 assert.Equal(t, m["age"], excluded["age"])
23 assert.False(t, excluded.Has("secret"), "secret should be excluded")
24 }
25
26 func TestCopy(t *testing.T) {
27 m1 := objx.Map{
28 "name": "Tyler",
29 "location": "UT",
30 }
31
32 m2 := m1.Copy()
33 require.NotNil(t, m2)
34 m2["name"] = "Mat"
35
36 assert.Equal(t, m1.Get("name").Str(), "Tyler")
37 assert.Equal(t, m2.Get("name").Str(), "Mat")
38
39 }
40
41 func TestMerge(t *testing.T) {
42 m1 := objx.Map{
43 "name": "Mat",
44 }
45 m2 := objx.Map{
46 "name": "Tyler",
47 "location": "UT",
48 }
49
50 merged := m1.Merge(m2)
51
52 assert.Equal(t, merged.Get("name").Str(), m2.Get("name").Str())
53 assert.Equal(t, merged.Get("location").Str(), m2.Get("location").Str())
54 assert.Empty(t, m1.Get("location").Str())
55 }
56
57 func TestMergeHere(t *testing.T) {
58 m1 := objx.Map{
59 "name": "Mat",
60 }
61 m2 := objx.Map{
62 "name": "Tyler",
63 "location": "UT",
64 }
65
66 merged := m1.MergeHere(m2)
67
68 assert.Equal(t, m1, merged, "With MergeHere, it should return the first modified map")
69 assert.Equal(t, merged.Get("name").Str(), m2.Get("name").Str())
70 assert.Equal(t, merged.Get("location").Str(), m2.Get("location").Str())
71 assert.Equal(t, merged.Get("location").Str(), m1.Get("location").Str())
72 }
73
74 func TestTransform(t *testing.T) {
75 m := objx.Map{
76 "name": "Mat",
77 "location": "UK",
78 }
79 r := m.Transform(keyToUpper)
80 assert.Equal(t, objx.Map{
81 "NAME": "Mat",
82 "LOCATION": "UK",
83 }, r)
84 }
85
86 func TestTransformKeys(t *testing.T) {
87 m := objx.Map{
88 "a": "1",
89 "b": "2",
90 "c": "3",
91 }
92 mapping := map[string]string{
93 "a": "d",
94 "b": "e",
95 }
96 r := m.TransformKeys(mapping)
97 assert.Equal(t, objx.Map{
98 "c": "3",
99 "d": "1",
100 "e": "2",
101 }, r)
102 }
103
104 func keyToUpper(s string, v interface{}) (string, interface{}) {
105 return strings.ToUpper(s), v
106 }
107
View as plain text