52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package model
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
)
|
|
|
|
func TestIDBinaryAndJSONRoundTrip(t *testing.T) {
|
|
id, err := NewID()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
binary, err := id.Value()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var copy ID
|
|
if err := copy.Scan(binary); err != nil || copy != id {
|
|
t.Fatalf("binary roundtrip: %s %v", copy, err)
|
|
}
|
|
b, err := json.Marshal(id)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := json.Unmarshal(b, ©); err != nil || copy != id {
|
|
t.Fatalf("JSON roundtrip: %s %v", copy, err)
|
|
}
|
|
if err := json.Unmarshal([]byte(`"0123"`), ©); err == nil {
|
|
t.Fatal("accepted truncated ID")
|
|
}
|
|
if _, err := ID("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").Value(); err == nil {
|
|
t.Fatal("accepted case-folded ID")
|
|
}
|
|
if err := copy.Scan([]byte{1}); err == nil {
|
|
t.Fatal("accepted truncated binary ID")
|
|
}
|
|
}
|
|
func TestJSONScanOwnsBytes(t *testing.T) {
|
|
src := []byte(`{"ok":true}`)
|
|
var doc JSON
|
|
if err := doc.Scan(src); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
src[2] = 'x'
|
|
if string(doc) != `{"ok":true}` {
|
|
t.Fatal("document aliases driver buffer")
|
|
}
|
|
if _, err := JSON(`{broken`).Value(); err == nil {
|
|
t.Fatal("accepted invalid JSON")
|
|
}
|
|
}
|