pull/32714/merge
Federico Laurianti 17 hours ago committed by GitHub
commit 4e0add960f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -485,6 +485,10 @@ func (t *parser) valList() ([]any, error) {
if r, _, e := t.sc.ReadRune(); e == nil && r != ',' { if r, _, e := t.sc.ReadRune(); e == nil && r != ',' {
t.sc.UnreadRune() t.sc.UnreadRune()
} }
// {} is an empty list.
if len(list) == 0 && len(rs) == 0 {
return list, nil
}
v, e := t.reader(rs) v, e := t.reader(rs)
list = append(list, v) list = append(list, v)
return list, e return list, e

@ -131,6 +131,11 @@ func TestParseSet(t *testing.T) {
expect: map[string]any{"zero": "0"}, expect: map[string]any{"zero": "0"},
err: false, err: false,
}, },
{
str: "empty_list={}",
expect: map[string]any{"empty_list": []any{}},
err: false,
},
} }
tests := []struct { tests := []struct {
str string str string
@ -287,6 +292,26 @@ func TestParseSet(t *testing.T) {
map[string]any{"name1": map[string]any{"name2": []string{"value1", "value2"}}}, map[string]any{"name1": map[string]any{"name2": []string{"value1", "value2"}}},
false, false,
}, },
{
str: "name1={value1}",
expect: map[string]any{"name1": []string{"value1"}},
},
{
str: "name1={value1,}",
expect: map[string]any{"name1": []string{"value1", ""}},
},
{
str: "name1={}",
expect: map[string]any{"name1": []any{}},
},
{
str: "name1={},name2=value2",
expect: map[string]any{"name1": []any{}, "name2": "value2"},
},
{
str: "name1.name2={}",
expect: map[string]any{"name1": map[string]any{"name2": []any{}}},
},
{ {
str: "name1={1021,902", str: "name1={1021,902",
err: true, err: true,
@ -344,6 +369,10 @@ func TestParseSet(t *testing.T) {
str: "noval[0]=", str: "noval[0]=",
expect: map[string]any{"noval": []any{""}}, expect: map[string]any{"noval": []any{""}},
}, },
{
str: "list[0]={}",
expect: map[string]any{"list": []any{[]any{}}},
},
{ {
str: "nested[0][0]=1", str: "nested[0][0]=1",
expect: map[string]any{"nested": []any{[]any{1}}}, expect: map[string]any{"nested": []any{[]any{1}}},
@ -667,6 +696,17 @@ func TestParseFile(t *testing.T) {
assert.YAMLEq(t, string(y1), string(y2), input) assert.YAMLEq(t, string(y1), string(y2), input)
} }
func TestParseFileEmptyList(t *testing.T) {
input := "name1={}"
rs2v := func(rs []rune) (any, error) {
return nil, fmt.Errorf("unexpected read of %q", string(rs))
}
got, err := ParseFile(input, rs2v)
require.NoError(t, err)
assert.Equal(t, map[string]any{"name1": []any{}}, got, input)
}
func TestParseIntoFile(t *testing.T) { func TestParseIntoFile(t *testing.T) {
got := map[string]any{} got := map[string]any{}
input := "name1=path1" input := "name1=path1"

Loading…
Cancel
Save