mirror of
https://github.com/therootcompany/golib.git
synced 2026-11-04 15:05:00 +00:00
69 lines
1.5 KiB
Go
69 lines
1.5 KiB
Go
package csvx
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/csv"
|
|
"testing"
|
|
)
|
|
|
|
func TestStringsCSV(t *testing.T) {
|
|
var values Strings[Comma]
|
|
if err := values.UnmarshalCSV([]byte("admin,hr,pm")); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
data, err := values.MarshalCSV()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got := string(data); got != "admin,hr,pm" {
|
|
t.Fatalf("CSV = %q", got)
|
|
}
|
|
|
|
var spaced Strings[Space]
|
|
if err := spaced.UnmarshalCSV([]byte("admin hr\tpm")); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(spaced) != 3 || spaced[1] != "hr" {
|
|
t.Fatalf("space values = %#v", spaced)
|
|
}
|
|
}
|
|
|
|
func TestIntsJSONAndSQL(t *testing.T) {
|
|
values := Ints[Comma]{1, 2, 3}
|
|
got, err := values.Value()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if string(got.([]byte)) != `[1,2,3]` {
|
|
t.Fatalf("Value = %q", got)
|
|
}
|
|
|
|
var scanned Ints[Comma]
|
|
if err := scanned.Scan([]byte(`[1,2,3]`)); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(scanned) != 3 || scanned[2] != 3 {
|
|
t.Fatalf("scanned = %#v", scanned)
|
|
}
|
|
if err := scanned.UnmarshalCSV([]byte("4,5,6")); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(scanned) != 3 || scanned[0] != 4 {
|
|
t.Fatalf("CSV values = %#v", scanned)
|
|
}
|
|
}
|
|
|
|
func TestDelimitedCSVUsesOuterQuoting(t *testing.T) {
|
|
var data bytes.Buffer
|
|
writer := csv.NewWriter(&data)
|
|
writer.Comma = '\t'
|
|
if err := SerializeCSV(writer, []struct {
|
|
Values Strings[Tab] `json:"values"`
|
|
}{{Values: Strings[Tab]{"a", "b"}}}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got := data.String(); got != "values\n\"a\tb\"\n" {
|
|
t.Fatalf("TSV = %q", got)
|
|
}
|
|
}
|