65 lines
1.5 KiB
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)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|