From dd14d2c73f2d72211d97d1a14b7741f2ec818bc5 Mon Sep 17 00:00:00 2001 From: Albert Vaca Cintora Date: Wed, 20 Apr 2022 12:38:53 +0200 Subject: [PATCH] Also consider explicitly set empty dicts as leaf nodes --- viper.go | 4 ++++ viper_test.go | 3 +++ 2 files changed, 7 insertions(+) diff --git a/viper.go b/viper.go index df6dbef..bab5774 100644 --- a/viper.go +++ b/viper.go @@ -1789,6 +1789,10 @@ func (v *Viper) flattenAndMergeMap(shadow map[string]bool, m map[string]interfac shadow[strings.ToLower(fullKey)] = true continue } + if len(m2) == 0 { + // empty dict explicitly present in the map + shadow[strings.ToLower(fullKey)] = true + } // recursively merge to shadow map shadow = v.flattenAndMergeMap(shadow, m2, fullKey) } diff --git a/viper_test.go b/viper_test.go index e37aa6e..64aa766 100644 --- a/viper_test.go +++ b/viper_test.go @@ -1825,6 +1825,7 @@ func TestEmptySection(t *testing.T) { key: subkey: another_key: +empty_dict: {} ` v := New() @@ -1837,6 +1838,7 @@ another_key: assert.NotContains(t, keys, "key") // Only empty leaf nodes are returned assert.Contains(t, keys, "key.subkey") assert.Contains(t, keys, "another_key") + assert.Contains(t, keys, "empty_dict") assert.NotContains(t, keys, "is_known") assert.Contains(t, keys, "has_default") @@ -1845,6 +1847,7 @@ another_key: assert.NotContains(t, vars, "key") // Only empty leaf nodes are returned assert.Contains(t, vars, "key.subkey") assert.Contains(t, vars, "another_key") + assert.Contains(t, vars, "empty_dict") assert.NotContains(t, vars, "is_known") assert.Contains(t, vars, "has_default") }