Skip to content

Commit 05d84c1

Browse files
authored
Merge pull request #2477 from allenflux/fix/initialize-constructor-values
fix: initialize parsers in collection value constructors Reviewed-by: Naveen Gogineni <dear.chap@gmail.com> Reviewed-by: Eng Zer Jun <engzerjun@gmail.com> Tested-by: Eng Zer Jun <engzerjun@gmail.com>
2 parents f7659f8 + cc200ff commit 05d84c1

3 files changed

Lines changed: 30 additions & 1 deletion

File tree

‎flag_map_impl.go‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,12 @@ func (i MapBase[T, C, VC]) Create(val map[string]T, p *map[string]T, c C) Value
4040

4141
// NewMapBase makes a *MapBase with default values
4242
func NewMapBase[T any, C any, VC ValueCreator[T, C]](defaults map[string]T) *MapBase[T, C, VC] {
43+
var t T
44+
var c C
45+
var vc VC
4346
return &MapBase[T, C, VC]{
44-
dict: &defaults,
47+
dict: &defaults,
48+
value: vc.Create(t, new(T), c),
4549
}
4650
}
4751

‎flag_slice_base.go‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,12 @@ func (i SliceBase[T, C, VC]) Create(val []T, p *[]T, c C) Value {
3030

3131
// NewSliceBase makes a *SliceBase with default values
3232
func NewSliceBase[T any, C any, VC ValueCreator[T, C]](defaults ...T) *SliceBase[T, C, VC] {
33+
var t T
34+
var c C
35+
var vc VC
3336
return &SliceBase[T, C, VC]{
3437
slice: &defaults,
38+
value: vc.Create(t, new(T), c),
3539
}
3640
}
3741

‎flag_test.go‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2580,6 +2580,27 @@ func TestStringMap_Serialized_Set(t *testing.T) {
25802580
require.Equal(t, m0.String(), m1.String(), "pre and post serialization do not match")
25812581
}
25822582

2583+
func TestSliceAndMapConstructorsSet(t *testing.T) {
2584+
tests := []struct {
2585+
name string
2586+
value Value
2587+
input string
2588+
want any
2589+
}{
2590+
{"string slice", NewStringSlice("old"), "a,b", []string{"a", "b"}},
2591+
{"int slice", NewIntSlice(1), "2,3", []int{2, 3}},
2592+
{"uint slice", NewUintSlice(1), "2,3", []uint{2, 3}},
2593+
{"float slice", NewFloatSlice(1), "2.5,3.5", []float64{2.5, 3.5}},
2594+
{"string map", NewStringMap(map[string]string{"old": "v"}), "k=v", map[string]string{"k": "v"}},
2595+
}
2596+
for _, tt := range tests {
2597+
t.Run(tt.name, func(t *testing.T) {
2598+
require.NoError(t, tt.value.Set(tt.input))
2599+
require.Equal(t, tt.want, tt.value.Get())
2600+
})
2601+
}
2602+
}
2603+
25832604
var timestampFlagTests = []struct {
25842605
name string
25852606
aliases []string

0 commit comments

Comments
 (0)