opentofu/internal/repl/format_test.go
Brandon Croft bd744ad4e9
Unify all sensitive value plan output as "(sensitive value)"
Previously, there was mixed usage of "(sensitive)" and "(sensitive value)" and even though it was more common to see "(sensitive)", the thought is that it's a value we are hiding rather than describing something already shown.
2022-10-24 12:50:46 -06:00

188 lines
2.7 KiB
Go

package repl
import (
"fmt"
"testing"
"github.com/hashicorp/terraform/internal/lang/marks"
"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"),
`<<EOT
hello
world
EOT`,
},
{
cty.StringVal("EOR\nEOS\nEOT\nEOU"),
`<<EOT_
EOR
EOS
EOT
EOU
EOT_`,
},
{
cty.ObjectVal(map[string]cty.Value{"foo": cty.StringVal("boop\nbeep")}),
`{
"foo" = <<-EOT
boop
beep
EOT
}`,
},
{
cty.Zero,
`0`,
},
{
cty.NumberIntVal(5),
`5`,
},
{
cty.NumberIntVal(1234567890),
`1234567890`,
},
{
cty.NumberFloatVal(5.2),
`5.2`,
},
{
cty.NumberFloatVal(123456789.0),
`123456789`,
},
{
cty.NumberFloatVal(123456789.01),
`123456789.01`,
},
{
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([])`,
},
{
cty.StringVal("a sensitive value").Mark(marks.Sensitive),
"(sensitive value)",
},
}
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)
}
})
}
}