87 lines
1.3 KiB
Go
87 lines
1.3 KiB
Go
package cty
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
)
|
|
|
|
func TestTypeJSONable(t *testing.T) {
|
|
tests := []struct {
|
|
Type Type
|
|
Want string
|
|
}{
|
|
{
|
|
String,
|
|
`"string"`,
|
|
},
|
|
{
|
|
Number,
|
|
`"number"`,
|
|
},
|
|
{
|
|
Bool,
|
|
`"bool"`,
|
|
},
|
|
{
|
|
List(Bool),
|
|
`["list","bool"]`,
|
|
},
|
|
{
|
|
Map(Bool),
|
|
`["map","bool"]`,
|
|
},
|
|
{
|
|
Set(Bool),
|
|
`["set","bool"]`,
|
|
},
|
|
{
|
|
List(Map(Bool)),
|
|
`["list",["map","bool"]]`,
|
|
},
|
|
{
|
|
Tuple([]Type{Bool, String}),
|
|
`["tuple",["bool","string"]]`,
|
|
},
|
|
{
|
|
Object(map[string]Type{"bool": Bool, "string": String}),
|
|
`["object",{"bool":"bool","string":"string"}]`,
|
|
},
|
|
{
|
|
DynamicPseudoType,
|
|
`"dynamic"`,
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.Type.GoString(), func(t *testing.T) {
|
|
result, err := json.Marshal(test.Type)
|
|
|
|
if err != nil {
|
|
t.Fatalf("unexpected error from Marshal: %s", err)
|
|
}
|
|
|
|
resultStr := string(result)
|
|
|
|
if resultStr != test.Want {
|
|
t.Errorf(
|
|
"wrong result\ntype: %#v\ngot: %s\nwant: %s",
|
|
test.Type, resultStr, test.Want,
|
|
)
|
|
}
|
|
|
|
var ty Type
|
|
err = json.Unmarshal(result, &ty)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error from Unmarshal: %s", err)
|
|
}
|
|
|
|
if !ty.Equals(test.Type) {
|
|
t.Errorf(
|
|
"type did not unmarshal correctly\njson: %s\ngot: %#v\nwant: %#v",
|
|
resultStr, ty, test.Type,
|
|
)
|
|
}
|
|
})
|
|
}
|
|
}
|