102 lines
2.2 KiB
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
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|