Files
path/merge_test.go
Ian Gulliver f50e6e228c Module split
2023-04-20 18:01:36 +00:00

138 lines
1.9 KiB
Go

package path_test
import (
"encoding/json"
"testing"
"github.com/gopatchy/path"
"github.com/stretchr/testify/require"
)
type mergeTestType struct {
A string
B int
C []string
D nestedType
E *nestedType
H int
}
type nestedType struct {
F []int
G string
}
func TestMergeString(t *testing.T) {
t.Parallel()
to := &mergeTestType{
A: "foo",
B: 42,
}
path.Merge(to, &mergeTestType{
A: "bar",
})
require.Equal(t, "bar", to.A)
require.Equal(t, 42, to.B)
}
func TestMergeSlice(t *testing.T) {
t.Parallel()
to := &mergeTestType{
B: 42,
C: []string{"foo", "bar"},
}
path.Merge(to, &mergeTestType{
C: []string{"zig", "zag"},
})
require.Equal(t, 42, to.B)
require.Equal(t, []string{"zig", "zag"}, to.C)
}
func TestMergeNested(t *testing.T) {
t.Parallel()
to := &mergeTestType{
B: 42,
D: nestedType{
F: []int{42, 43},
G: "bar",
},
}
path.Merge(to, &mergeTestType{
D: nestedType{
F: []int{44, 45},
},
})
require.Equal(t, 42, to.B)
require.Equal(t, []int{44, 45}, to.D.F)
require.Equal(t, "bar", to.D.G)
}
func TestMergeNestedPointer(t *testing.T) {
t.Parallel()
to := &mergeTestType{
B: 42,
E: &nestedType{
F: []int{42, 43},
G: "bar",
},
}
path.Merge(to, &mergeTestType{
E: &nestedType{
F: []int{49, 50},
},
})
require.Equal(t, 42, to.B)
require.Equal(t, []int{49, 50}, to.E.F)
require.Equal(t, "bar", to.E.G)
}
func TestMergeMap(t *testing.T) {
t.Parallel()
to := &mergeTestType{
A: "foo",
B: 42,
D: nestedType{
F: []int{42, 43},
G: "bar",
},
H: 5,
}
from := map[string]any{}
err := json.Unmarshal(
[]byte(`
{
"B": 45,
"D": {
"F": [46, 47]
},
"H": 0
}`),
&from,
)
require.NoError(t, err)
err = path.MergeMap(to, from)
require.NoError(t, err)
require.Equal(t, "foo", to.A)
require.Equal(t, 45, to.B)
require.Equal(t, []int{46, 47}, to.D.F)
require.Equal(t, "bar", to.D.G)
require.Equal(t, 0, to.H)
}