Skip to content

Commit

Permalink
Merge pull request #335 from kinvolk/fix-slice-value-decoding
Browse files Browse the repository at this point in the history
gohcl/decode.go: fix decoding value slices
  • Loading branch information
alisdair authored Nov 19, 2020
2 parents 819c383 + e3e49cc commit 7e77010
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
3 changes: 3 additions & 0 deletions gohcl/decode.go
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,9 @@ func decodeBodyToStruct(body hcl.Body, ctx *hcl.EvalContext, val reflect.Value)
diags = append(diags, decodeBlockToValue(block, ctx, v.Elem())...)
sli.Index(i).Set(v)
} else {
if i >= sli.Len() {
sli = reflect.Append(sli, reflect.Indirect(reflect.New(ty)))
}
diags = append(diags, decodeBlockToValue(block, ctx, sli.Index(i))...)
}
}
Expand Down
31 changes: 31 additions & 0 deletions gohcl/decode_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ func TestDecodeBody(t *testing.T) {
Nested []*withTwoAttributes `hcl:"nested,block"`
}

type withListofNestedBlocksNoPointers struct {
Nested []withTwoAttributes `hcl:"nested,block"`
}

tests := []struct {
Body map[string]interface{}
Target func() interface{}
Expand Down Expand Up @@ -647,6 +651,33 @@ func TestDecodeBody(t *testing.T) {
},
0,
},
{
// Make sure decoding value slices works the same as pointer slices.
map[string]interface{}{
"nested": []map[string]interface{}{
{
"b": "bar",
},
{
"b": "baz",
},
},
},
func() interface{} {
return &withListofNestedBlocksNoPointers{
Nested: []withTwoAttributes{
{
B: "foo",
},
},
}
},
func(gotI interface{}) bool {
n := gotI.(withListofNestedBlocksNoPointers)
return n.Nested[0].B == "bar" && len(n.Nested) == 2
},
0,
},
}

for i, test := range tests {
Expand Down

0 comments on commit 7e77010

Please sign in to comment.