6c4344623b
The main HCL package is more visible this way, and so it's easier than having to pick it out from dozens of other package directories.
103 lines
2.3 KiB
Go
103 lines
2.3 KiB
Go
package transform
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"reflect"
|
|
|
|
"github.com/hashicorp/hcl/v2"
|
|
"github.com/hashicorp/hcl/v2/hcltest"
|
|
"github.com/zclconf/go-cty/cty"
|
|
)
|
|
|
|
// Assert that deepWrapper implements Body
|
|
var deepWrapperIsBody hcl.Body = deepWrapper{}
|
|
|
|
func TestDeep(t *testing.T) {
|
|
|
|
testTransform := TransformerFunc(func(body hcl.Body) hcl.Body {
|
|
_, remain, diags := body.PartialContent(&hcl.BodySchema{
|
|
Blocks: []hcl.BlockHeaderSchema{
|
|
{
|
|
Type: "remove",
|
|
},
|
|
},
|
|
})
|
|
|
|
return BodyWithDiagnostics(remain, diags)
|
|
})
|
|
|
|
src := hcltest.MockBody(&hcl.BodyContent{
|
|
Attributes: hcltest.MockAttrs(map[string]hcl.Expression{
|
|
"true": hcltest.MockExprLiteral(cty.True),
|
|
}),
|
|
Blocks: []*hcl.Block{
|
|
{
|
|
Type: "remove",
|
|
Body: hcl.EmptyBody(),
|
|
},
|
|
{
|
|
Type: "child",
|
|
Body: hcltest.MockBody(&hcl.BodyContent{
|
|
Blocks: []*hcl.Block{
|
|
{
|
|
Type: "remove",
|
|
},
|
|
},
|
|
}),
|
|
},
|
|
},
|
|
})
|
|
|
|
wrapped := Deep(src, testTransform)
|
|
|
|
rootContent, diags := wrapped.Content(&hcl.BodySchema{
|
|
Attributes: []hcl.AttributeSchema{
|
|
{
|
|
Name: "true",
|
|
},
|
|
},
|
|
Blocks: []hcl.BlockHeaderSchema{
|
|
{
|
|
Type: "child",
|
|
},
|
|
},
|
|
})
|
|
if len(diags) != 0 {
|
|
t.Errorf("unexpected diagnostics for root content")
|
|
for _, diag := range diags {
|
|
t.Logf("- %s", diag)
|
|
}
|
|
}
|
|
|
|
wantAttrs := hcltest.MockAttrs(map[string]hcl.Expression{
|
|
"true": hcltest.MockExprLiteral(cty.True),
|
|
})
|
|
if !reflect.DeepEqual(rootContent.Attributes, wantAttrs) {
|
|
t.Errorf("wrong root attributes\ngot: %#v\nwant: %#v", rootContent.Attributes, wantAttrs)
|
|
}
|
|
|
|
if got, want := len(rootContent.Blocks), 1; got != want {
|
|
t.Fatalf("wrong number of root blocks %d; want %d", got, want)
|
|
}
|
|
if got, want := rootContent.Blocks[0].Type, "child"; got != want {
|
|
t.Errorf("wrong block type %s; want %s", got, want)
|
|
}
|
|
|
|
childBlock := rootContent.Blocks[0]
|
|
childContent, diags := childBlock.Body.Content(&hcl.BodySchema{})
|
|
if len(diags) != 0 {
|
|
t.Errorf("unexpected diagnostics for child content")
|
|
for _, diag := range diags {
|
|
t.Logf("- %s", diag)
|
|
}
|
|
}
|
|
|
|
if len(childContent.Attributes) != 0 {
|
|
t.Errorf("unexpected attributes in child content; want empty content")
|
|
}
|
|
if len(childContent.Blocks) != 0 {
|
|
t.Errorf("unexpected blocks in child content; want empty content")
|
|
}
|
|
}
|