1
16
17 package fieldpath
18
19 import (
20 "testing"
21
22 "gopkg.in/yaml.v2"
23 "sigs.k8s.io/structured-merge-diff/v4/value"
24 )
25
26 func TestFromValue(t *testing.T) {
27 table := []struct {
28 objYAML string
29 set *Set
30 }{
31 {`a: a`, NewSet(MakePathOrDie("a"))},
32 {`{"a": [{"a": null}]}`, NewSet(
33 MakePathOrDie("a", 0, "a"),
34 )}, {`{"a": [{"id": a}]}`, NewSet(
35 MakePathOrDie("a", KeyByFields("id", "a"), "id"),
36 )}, {`{"a": [{"name": a}]}`, NewSet(
37 MakePathOrDie("a", KeyByFields("name", "a"), "name"),
38 )}, {`{"a": [{"key": a}]}`, NewSet(
39 MakePathOrDie("a", KeyByFields("key", "a"), "key"),
40 )}, {`{"a": [{"name": "a", "key": "b"}]}`, NewSet(
41 MakePathOrDie("a", KeyByFields(
42 "key", "b",
43 "name", "a",
44 ), "key"),
45 MakePathOrDie("a", KeyByFields(
46 "key", "b",
47 "name", "a",
48 ), "name"),
49 )}, {`{"a": [5]}`, NewSet(
50 MakePathOrDie("a", 0),
51 )}, {`{"a": [5,4,3]}`, NewSet(
52 MakePathOrDie("a", 0),
53 MakePathOrDie("a", 1),
54 MakePathOrDie("a", 2),
55 )}, {`{"a": [[5]]}`, NewSet(
56 MakePathOrDie("a", 0, 0),
57 )}, {`{"a": 1, "b": true, "c": 1.5, "d": null}`, NewSet(
58 MakePathOrDie("a"),
59 MakePathOrDie("b"),
60 MakePathOrDie("c"),
61 MakePathOrDie("d"),
62 )},
63 }
64
65 for _, tt := range table {
66 tt := tt
67 t.Run(tt.objYAML, func(t *testing.T) {
68 t.Parallel()
69 var v interface{}
70 err := yaml.Unmarshal([]byte(tt.objYAML), &v)
71 if err != nil {
72 t.Fatalf("couldn't parse: %v", err)
73 }
74 got := SetFromValue(value.NewValueInterface(v))
75 if !got.Equals(tt.set) {
76 t.Errorf("wanted\n%s\nbut got\n%s\n", tt.set, got)
77 }
78 })
79 }
80 }
81
View as plain text