route/vendor/github.com/zclconf/go-cty/cty/convert/sort_types_test.go

102 lines
2.2 KiB
Go

package convert
import (
"fmt"
"testing"
"github.com/zclconf/go-cty/cty"
)
func TestSortTypes(t *testing.T) {
tests := []struct {
Input []cty.Type
Want []cty.Type
}{
{
[]cty.Type{},
[]cty.Type{},
},
{
[]cty.Type{cty.String, cty.Number},
[]cty.Type{cty.String, cty.Number},
},
{
[]cty.Type{cty.Number, cty.String},
[]cty.Type{cty.String, cty.Number},
},
{
[]cty.Type{cty.String, cty.Bool},
[]cty.Type{cty.String, cty.Bool},
},
{
[]cty.Type{cty.Bool, cty.String},
[]cty.Type{cty.String, cty.Bool},
},
{
[]cty.Type{cty.Bool, cty.String, cty.Number},
[]cty.Type{cty.String, cty.Bool, cty.Number},
},
{
[]cty.Type{cty.Number, cty.String, cty.Bool},
[]cty.Type{cty.String, cty.Number, cty.Bool},
},
{
[]cty.Type{cty.String, cty.String},
[]cty.Type{cty.String, cty.String},
},
{
[]cty.Type{cty.Number, cty.String, cty.Number},
[]cty.Type{cty.String, cty.Number, cty.Number},
},
{
[]cty.Type{cty.String, cty.List(cty.String)},
[]cty.Type{cty.String, cty.List(cty.String)},
},
{
[]cty.Type{cty.List(cty.String), cty.String},
[]cty.Type{cty.List(cty.String), cty.String},
},
{
// This result is somewhat arbitrary, but the important thing
// is that it is consistent.
[]cty.Type{cty.Bool, cty.List(cty.String), cty.String},
[]cty.Type{cty.List(cty.String), cty.String, cty.Bool},
},
{
[]cty.Type{cty.String, cty.DynamicPseudoType},
[]cty.Type{cty.String, cty.DynamicPseudoType},
},
{
[]cty.Type{cty.DynamicPseudoType, cty.String},
[]cty.Type{cty.String, cty.DynamicPseudoType},
},
}
for _, test := range tests {
t.Run(fmt.Sprintf("%#v", test.Input), func(t *testing.T) {
idxs := sortTypes(test.Input)
if len(idxs) != len(test.Input) {
t.Fatalf("wrong number of indexes %q; want %q", len(idxs), len(test.Input))
}
got := make([]cty.Type, len(idxs))
for i, idx := range idxs {
got[i] = test.Input[idx]
}
for i := range test.Want {
if !got[i].Equals(test.Want[i]) {
t.Errorf(
"wrong order\ninput: %#v\ngot: %#v\nwant: %#v",
test.Input,
got, test.Want,
)
break
}
}
})
}
}