Files
dataxl/cmd/dataxl/conversion_matrix_test.go

65 lines
1.5 KiB
Go

package main
import (
"reflect"
"testing"
)
func TestConversionMatrixPreservesRepresentativeTable(t *testing.T) {
formats := []string{"json", "yaml", "toml", "csv", "tsv", "xlsx"}
records := []any{
map[string]any{
"active": true,
"id": int64(1),
"name": "Alice",
"note": " first line\nsecond line ",
},
map[string]any{
"active": false,
"id": int64(2),
"name": "ボブ",
"note": "comma, tab\t and quote \"",
},
}
want := valueToTable(records)
fixtures := make(map[string][]byte, len(formats))
for _, format := range formats {
var (
data []byte
err error
)
if isTabular(format) {
data, err = encodeTable(want, format, "Sheet1")
} else {
data, err = encodeStructured(records, format, true)
}
if err != nil {
t.Fatalf("build %s fixture: %v", format, err)
}
fixtures[format] = data
}
for _, from := range formats {
for _, to := range formats {
t.Run(from+"_to_"+to, func(t *testing.T) {
converted, err := convert(fixtures[from], from, to, "Sheet1", true)
if err != nil {
t.Fatalf("convert %s -> %s: %v", from, to, err)
}
normalized, err := convert(converted, to, "tsv", "Sheet1", false)
if err != nil {
t.Fatalf("normalize %s output through TSV: %v", to, err)
}
got, err := parseTable(normalized, "tsv", "Sheet1")
if err != nil {
t.Fatalf("parse normalized TSV: %v", err)
}
if !reflect.DeepEqual(got, want) {
t.Fatalf("%s -> %s table = %#v, want %#v", from, to, got, want)
}
})
}
}
}