150 lines
2.2 KiB
Go
150 lines
2.2 KiB
Go
|
package repl
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/zclconf/go-cty/cty"
|
||
|
)
|
||
|
|
||
|
func TestFormatValue(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
Val cty.Value
|
||
|
Want string
|
||
|
}{
|
||
|
{
|
||
|
cty.NullVal(cty.DynamicPseudoType),
|
||
|
`null`,
|
||
|
},
|
||
|
{
|
||
|
cty.NullVal(cty.String),
|
||
|
`tostring(null)`,
|
||
|
},
|
||
|
{
|
||
|
cty.NullVal(cty.Number),
|
||
|
`tonumber(null)`,
|
||
|
},
|
||
|
{
|
||
|
cty.NullVal(cty.Bool),
|
||
|
`tobool(null)`,
|
||
|
},
|
||
|
{
|
||
|
cty.NullVal(cty.List(cty.String)),
|
||
|
`tolist(null) /* of string */`,
|
||
|
},
|
||
|
{
|
||
|
cty.NullVal(cty.Set(cty.Number)),
|
||
|
`toset(null) /* of number */`,
|
||
|
},
|
||
|
{
|
||
|
cty.NullVal(cty.Map(cty.Bool)),
|
||
|
`tomap(null) /* of bool */`,
|
||
|
},
|
||
|
{
|
||
|
cty.NullVal(cty.Object(map[string]cty.Type{"a": cty.Bool})),
|
||
|
`null /* object */`, // Ideally this would display the full object type, including its attributes
|
||
|
},
|
||
|
{
|
||
|
cty.UnknownVal(cty.DynamicPseudoType),
|
||
|
`(known after apply)`,
|
||
|
},
|
||
|
{
|
||
|
cty.StringVal(""),
|
||
|
`""`,
|
||
|
},
|
||
|
{
|
||
|
cty.StringVal("hello"),
|
||
|
`"hello"`,
|
||
|
},
|
||
|
{
|
||
|
cty.StringVal("hello\nworld"),
|
||
|
`"hello\nworld"`, // Ideally we'd use heredoc syntax here for better readability, but we don't yet
|
||
|
},
|
||
|
{
|
||
|
cty.Zero,
|
||
|
`0`,
|
||
|
},
|
||
|
{
|
||
|
cty.NumberIntVal(5),
|
||
|
`5`,
|
||
|
},
|
||
|
{
|
||
|
cty.NumberFloatVal(5.2),
|
||
|
`5.2`,
|
||
|
},
|
||
|
{
|
||
|
cty.False,
|
||
|
`false`,
|
||
|
},
|
||
|
{
|
||
|
cty.True,
|
||
|
`true`,
|
||
|
},
|
||
|
{
|
||
|
cty.EmptyObjectVal,
|
||
|
`{}`,
|
||
|
},
|
||
|
{
|
||
|
cty.ObjectVal(map[string]cty.Value{
|
||
|
"a": cty.StringVal("b"),
|
||
|
}),
|
||
|
`{
|
||
|
"a" = "b"
|
||
|
}`,
|
||
|
},
|
||
|
{
|
||
|
cty.ObjectVal(map[string]cty.Value{
|
||
|
"a": cty.StringVal("b"),
|
||
|
"c": cty.StringVal("d"),
|
||
|
}),
|
||
|
`{
|
||
|
"a" = "b"
|
||
|
"c" = "d"
|
||
|
}`,
|
||
|
},
|
||
|
{
|
||
|
cty.MapValEmpty(cty.String),
|
||
|
`tomap({})`,
|
||
|
},
|
||
|
{
|
||
|
cty.EmptyTupleVal,
|
||
|
`[]`,
|
||
|
},
|
||
|
{
|
||
|
cty.TupleVal([]cty.Value{
|
||
|
cty.StringVal("b"),
|
||
|
}),
|
||
|
`[
|
||
|
"b",
|
||
|
]`,
|
||
|
},
|
||
|
{
|
||
|
cty.TupleVal([]cty.Value{
|
||
|
cty.StringVal("b"),
|
||
|
cty.StringVal("d"),
|
||
|
}),
|
||
|
`[
|
||
|
"b",
|
||
|
"d",
|
||
|
]`,
|
||
|
},
|
||
|
{
|
||
|
cty.ListValEmpty(cty.String),
|
||
|
`tolist([])`,
|
||
|
},
|
||
|
{
|
||
|
cty.SetValEmpty(cty.String),
|
||
|
`toset([])`,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, test := range tests {
|
||
|
t.Run(fmt.Sprintf("%#v", test.Val), func(t *testing.T) {
|
||
|
got := FormatValue(test.Val, 0)
|
||
|
if got != test.Want {
|
||
|
t.Errorf("wrong result\nvalue: %#v\ngot: %s\nwant: %s", test.Val, got, test.Want)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|