go-typst/variable-encoder_test.go
2024-12-01 15:03:28 +01:00

68 lines
2.0 KiB
Go

package typst
import (
"bytes"
"math"
"testing"
"github.com/google/go-cmp/cmp"
)
func TestVariableEncoder(t *testing.T) {
tests := []struct {
name string
params any
wantErr bool
want string
}{
{"nil", nil, false, "none"},
{"bool false", false, false, "false"},
{"bool true", true, false, "true"},
{"int", int(-123), false, "-123"},
{"int8", int8(-123), false, "-123"},
{"int16", int16(-123), false, "-123"},
{"int32", int32(-123), false, "-123"},
{"int64", int64(-123), false, "-123"},
{"uint", uint(123), false, "123"},
{"uint8", uint8(123), false, "123"},
{"uint16", uint16(123), false, "123"},
{"uint32", uint32(123), false, "123"},
{"uint64", uint64(123), false, "123"},
{"float32", float32(1), false, "1e+00"},
{"float64", float64(1), false, "1e+00"},
{"float64 nan", float64(math.NaN()), false, "float.nan"},
{"float64 +inf", float64(math.Inf(1)), false, "float.inf"},
{"float64 -inf", float64(math.Inf(-1)), false, "-float.inf"},
{"string", "Hey!", false, `"Hey!"`},
{"struct", struct {
Foo string
Bar int
}{"Hey!", 12345}, false, "(\n Foo: \"Hey!\",\n Bar: 12345,\n)"},
{"map string string", map[string]string{"Foo": "Bar", "Foo2": "Electric Foogaloo"}, false, "(\n Foo: \"Bar\",\n Foo2: \"Electric Foogaloo\",\n)"},
{"map string string nil", map[string]string(nil), false, "()"},
{"string array", [5]string{"Foo", "Bar"}, false, `("Foo", "Bar", "", "", "")`},
{"string slice", []string{"Foo", "Bar"}, false, `("Foo", "Bar")`},
{"string slice pointer", &[]string{"Foo", "Bar"}, false, `("Foo", "Bar")`},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := bytes.Buffer{}
vEnc := NewVariableEncoder(&result)
err := vEnc.Encode(tt.params)
switch {
case err != nil && !tt.wantErr:
t.Fatalf("Failed to encode typst variables: %v", err)
case err == nil && tt.wantErr:
t.Fatalf("Expected error, but got none")
}
if !cmp.Equal(result.String(), tt.want) {
t.Errorf("Got unexpected result: %s", cmp.Diff(result.String(), tt.want))
}
})
}
}