hcl/hclwrite/ast_test.go

48 lines
1015 B
Go

package hclwrite
import (
"fmt"
"strings"
)
type TestTreeNode struct {
Type string
Val string
Children []TestTreeNode
}
func makeTestTree(n *node) (root TestTreeNode) {
const us = "hclwrite."
const usPtr = "*hclwrite."
root.Type = fmt.Sprintf("%T", n.content)
if strings.HasPrefix(root.Type, us) {
root.Type = root.Type[len(us):]
} else if strings.HasPrefix(root.Type, usPtr) {
root.Type = root.Type[len(usPtr):]
}
type WithVal interface {
testValue() string
}
hasTestVal := false
if withVal, ok := n.content.(WithVal); ok {
root.Val = withVal.testValue()
hasTestVal = true
}
n.content.walkChildNodes(func(n *node) {
root.Children = append(root.Children, makeTestTree(n))
})
// If we didn't end up with any children then this is probably a leaf
// node, so we'll set its content value to it raw bytes if we didn't
// already set a test value.
if !hasTestVal && len(root.Children) == 0 {
toks := n.content.BuildTokens(nil)
root.Val = toks.testValue()
}
return root
}