mirror of
https://github.com/go-ini/ini.git
synced 2026-06-19 21:46:45 +02:00
key: add AllowDuplicateShadowValues option (#298)
This commit is contained in:
@@ -125,6 +125,8 @@ type LoadOptions struct {
|
||||
ReaderBufferSize int
|
||||
// AllowNonUniqueSections indicates whether to allow sections with the same name multiple times.
|
||||
AllowNonUniqueSections bool
|
||||
// AllowDuplicateShadowValues indicates whether values for shadowed keys should be deduplicated.
|
||||
AllowDuplicateShadowValues bool
|
||||
}
|
||||
|
||||
// DebugFunc is the type of function called to log parse events.
|
||||
|
||||
@@ -54,14 +54,16 @@ func (k *Key) addShadow(val string) error {
|
||||
return errors.New("cannot add shadow to auto-increment or boolean key")
|
||||
}
|
||||
|
||||
// Deduplicate shadows based on their values.
|
||||
if k.value == val {
|
||||
return nil
|
||||
}
|
||||
for i := range k.shadows {
|
||||
if k.shadows[i].value == val {
|
||||
if !k.s.f.options.AllowDuplicateShadowValues {
|
||||
// Deduplicate shadows based on their values.
|
||||
if k.value == val {
|
||||
return nil
|
||||
}
|
||||
for i := range k.shadows {
|
||||
if k.shadows[i].value == val {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
shadow := newKey(k.s, k.name, val)
|
||||
|
||||
+23
@@ -51,6 +51,29 @@ func TestKey_AddShadow(t *testing.T) {
|
||||
Convey("Add shadow to auto-increment key", func() {
|
||||
So(f.Section("notes").Key("#1").AddShadow("beta"), ShouldNotBeNil)
|
||||
})
|
||||
|
||||
Convey("Deduplicate an existing value", func() {
|
||||
k := f.Section("").Key("NAME")
|
||||
So(k.AddShadow("ini"), ShouldBeNil)
|
||||
So(k.ValueWithShadows(), ShouldResemble, []string{"ini", "ini.v1"})
|
||||
})
|
||||
})
|
||||
|
||||
Convey("Allow duplicate shadowed values", t, func() {
|
||||
f := ini.Empty(ini.LoadOptions{
|
||||
AllowShadows: true,
|
||||
AllowDuplicateShadowValues: true,
|
||||
})
|
||||
So(f, ShouldNotBeNil)
|
||||
|
||||
k, err := f.Section("").NewKey("NAME", "ini")
|
||||
So(err, ShouldBeNil)
|
||||
So(k, ShouldNotBeNil)
|
||||
|
||||
So(k.AddShadow("ini.v1"), ShouldBeNil)
|
||||
So(k.AddShadow("ini"), ShouldBeNil)
|
||||
So(k.AddShadow("ini"), ShouldBeNil)
|
||||
So(k.ValueWithShadows(), ShouldResemble, []string{"ini", "ini.v1", "ini", "ini"})
|
||||
})
|
||||
|
||||
Convey("Shadow is not allowed", t, func() {
|
||||
|
||||
Reference in New Issue
Block a user