MCPcopy
hub / github.com/spf13/viper / TestNestedOverrides

Function TestNestedOverrides

overrides_test.go:18–75  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

16)
17
18func TestNestedOverrides(t *testing.T) {
19 assert := assert.New(t)
20 var v *Viper
21
22 // Case 0: value overridden by a value
23 overrideDefault(assert, "tom", 10, "tom", 20) // "tom" is first given 10 as default value, then overridden by 20
24 override(assert, "tom", 10, "tom", 20) // "tom" is first given value 10, then overridden by 20
25 overrideDefault(assert, "tom.age", 10, "tom.age", 20)
26 override(assert, "tom.age", 10, "tom.age", 20)
27 overrideDefault(assert, "sawyer.tom.age", 10, "sawyer.tom.age", 20)
28 override(assert, "sawyer.tom.age", 10, "sawyer.tom.age", 20)
29
30 // Case 1: key:value overridden by a value
31 v = overrideDefault(assert, "tom.age", 10, "tom", "boy") // "tom.age" is first given 10 as default value, then "tom" is overridden by "boy"
32 assert.Nil(v.Get("tom.age")) // "tom.age" should not exist anymore
33 v = override(assert, "tom.age", 10, "tom", "boy")
34 assert.Nil(v.Get("tom.age"))
35
36 // Case 2: value overridden by a key:value
37 overrideDefault(assert, "tom", "boy", "tom.age", 10) // "tom" is first given "boy" as default value, then "tom" is overridden by map{"age":10}
38 override(assert, "tom.age", 10, "tom", "boy")
39
40 // Case 3: key:value overridden by a key:value
41 v = overrideDefault(assert, "tom.size", 4, "tom.age", 10)
42 assert.Equal(4, v.Get("tom.size")) // value should still be reachable
43 v = override(assert, "tom.size", 4, "tom.age", 10)
44 assert.Equal(4, v.Get("tom.size"))
45 deepCheckValue(assert, v, overrideLayer, []string{"tom", "size"}, 4)
46
47 // Case 4: key:value overridden by a map
48 v = overrideDefault(assert, "tom.size", 4, "tom", map[string]any{"age": 10}) // "tom.size" is first given "4" as default value, then "tom" is overridden by map{"age":10}
49 assert.Equal(4, v.Get("tom.size")) // "tom.size" should still be reachable
50 assert.Equal(10, v.Get("tom.age")) // new value should be there
51 deepCheckValue(assert, v, overrideLayer, []string{"tom", "age"}, 10) // new value should be there
52 v = override(assert, "tom.size", 4, "tom", map[string]any{"age": 10})
53 assert.Nil(v.Get("tom.size"))
54 assert.Equal(10, v.Get("tom.age"))
55 deepCheckValue(assert, v, overrideLayer, []string{"tom", "age"}, 10)
56
57 // Case 5: array overridden by a value
58 overrideDefault(assert, "tom", []int{10, 20}, "tom", 30)
59 override(assert, "tom", []int{10, 20}, "tom", 30)
60 overrideDefault(assert, "tom.age", []int{10, 20}, "tom.age", 30)
61 override(assert, "tom.age", []int{10, 20}, "tom.age", 30)
62
63 // Case 6: array overridden by an array
64 overrideDefault(assert, "tom", []int{10, 20}, "tom", []int{30, 40})
65 override(assert, "tom", []int{10, 20}, "tom", []int{30, 40})
66 overrideDefault(assert, "tom.age", []int{10, 20}, "tom.age", []int{30, 40})
67 v = override(assert, "tom.age", []int{10, 20}, "tom.age", []int{30, 40})
68 // explicit array merge:
69 s, ok := v.Get("tom.age").([]int)
70 if assert.True(ok, "tom[\"age\"] is not a slice") {
71 v.Set("tom.age", append(s, []int{50, 60}...))
72 assert.Equal([]int{30, 40, 50, 60}, v.Get("tom.age"))
73 deepCheckValue(assert, v, overrideLayer, []string{"tom", "age"}, []int{30, 40, 50, 60})
74 }
75}

Callers

nothing calls this directly

Calls 5

GetMethod · 0.95
SetMethod · 0.95
overrideDefaultFunction · 0.85
overrideFunction · 0.85
deepCheckValueFunction · 0.85

Tested by

no test coverage detected