From 3428ffe0e421598ac00673ef18efb866ce826d74 Mon Sep 17 00:00:00 2001
From: Joe Chen
Date: Thu, 10 Feb 2022 18:09:07 +0800
Subject: [PATCH] key: ignore empty values in `ValueWithShadows`
---
key.go | 16 +++++++++++-----
key_test.go | 7 +++++++
2 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/key.go b/key.go
index 2147974..a19d9f3 100644
--- a/key.go
+++ b/key.go
@@ -110,7 +110,8 @@ func (k *Key) Value() string {
return k.value
}
-// ValueWithShadows returns raw values of key and its shadows if any.
+// ValueWithShadows returns raw values of key and its shadows if any. Shadow
+// keys with empty values are ignored from the returned list.
func (k *Key) ValueWithShadows() []string {
if len(k.shadows) == 0 {
if k.value == "" {
@@ -118,10 +119,15 @@ func (k *Key) ValueWithShadows() []string {
}
return []string{k.value}
}
- vals := make([]string, len(k.shadows)+1)
- vals[0] = k.value
- for i := range k.shadows {
- vals[i+1] = k.shadows[i].value
+
+ vals := make([]string, 0, len(k.shadows)+1)
+ if k.value != "" {
+ vals = append(vals, k.value)
+ }
+ for _, s := range k.shadows {
+ if s.value != "" {
+ vals = append(vals, s.value)
+ }
}
return vals
}
diff --git a/key_test.go b/key_test.go
index 69ce2db..83095d7 100644
--- a/key_test.go
+++ b/key_test.go
@@ -57,6 +57,13 @@ func TestKey_AddShadow(t *testing.T) {
assert.NoError(t, k.AddShadow("ini"))
assert.Equal(t, []string{"ini", "ini.v1"}, k.ValueWithShadows())
})
+
+ t.Run("ignore empty shadow values", func(t *testing.T) {
+ k := f.Section("").Key("empty")
+ assert.NoError(t, k.AddShadow(""))
+ assert.NoError(t, k.AddShadow("ini"))
+ assert.Equal(t, []string{"ini"}, k.ValueWithShadows())
+ })
})
t.Run("allow duplicate shadowed values", func(t *testing.T) {