Also consider explicitly set empty dicts as leaf nodes

This commit is contained in:
Albert Vaca Cintora 2022-04-20 12:38:53 +02:00
parent 42406af567
commit dd14d2c73f
2 changed files with 7 additions and 0 deletions

View file

@ -1789,6 +1789,10 @@ func (v *Viper) flattenAndMergeMap(shadow map[string]bool, m map[string]interfac
shadow[strings.ToLower(fullKey)] = true shadow[strings.ToLower(fullKey)] = true
continue continue
} }
if len(m2) == 0 {
// empty dict explicitly present in the map
shadow[strings.ToLower(fullKey)] = true
}
// recursively merge to shadow map // recursively merge to shadow map
shadow = v.flattenAndMergeMap(shadow, m2, fullKey) shadow = v.flattenAndMergeMap(shadow, m2, fullKey)
} }

View file

@ -1825,6 +1825,7 @@ func TestEmptySection(t *testing.T) {
key: key:
subkey: subkey:
another_key: another_key:
empty_dict: {}
` `
v := New() v := New()
@ -1837,6 +1838,7 @@ another_key:
assert.NotContains(t, keys, "key") // Only empty leaf nodes are returned assert.NotContains(t, keys, "key") // Only empty leaf nodes are returned
assert.Contains(t, keys, "key.subkey") assert.Contains(t, keys, "key.subkey")
assert.Contains(t, keys, "another_key") assert.Contains(t, keys, "another_key")
assert.Contains(t, keys, "empty_dict")
assert.NotContains(t, keys, "is_known") assert.NotContains(t, keys, "is_known")
assert.Contains(t, keys, "has_default") assert.Contains(t, keys, "has_default")
@ -1845,6 +1847,7 @@ another_key:
assert.NotContains(t, vars, "key") // Only empty leaf nodes are returned assert.NotContains(t, vars, "key") // Only empty leaf nodes are returned
assert.Contains(t, vars, "key.subkey") assert.Contains(t, vars, "key.subkey")
assert.Contains(t, vars, "another_key") assert.Contains(t, vars, "another_key")
assert.Contains(t, vars, "empty_dict")
assert.NotContains(t, vars, "is_known") assert.NotContains(t, vars, "is_known")
assert.Contains(t, vars, "has_default") assert.Contains(t, vars, "has_default")
} }