1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
package mysql
import (
"testing"
"time"
)
type sio struct {
in, out string
}
func checkRow(t *testing.T, examples []sio, conv func(string) interface{}) {
row := make(Row, 1)
for _, ex := range examples {
row[0] = conv(ex.in)
str := row.Str(0)
if str != ex.out {
t.Fatalf("Wrong conversion: '%s' != '%s'", str, ex.out)
}
}
}
var dates = []sio{
sio{"2121-11-22", "2121-11-22"},
sio{"0000-00-00", "0000-00-00"},
sio{" 1234-12-18 ", "1234-12-18"},
sio{"\t1234-12-18 \r\n", "1234-12-18"},
}
func TestConvDate(t *testing.T) {
conv := func(str string) interface{} {
d, err := ParseDate(str)
if err != nil {
return err
}
return d
}
checkRow(t, dates, conv)
}
var datetimes = []sio{
sio{"2121-11-22 11:22:32", "2121-11-22 11:22:32"},
sio{" 1234-12-18 22:11:22 ", "1234-12-18 22:11:22"},
sio{"\t 1234-12-18 22:11:22 \r\n", "1234-12-18 22:11:22"},
sio{"2000-11-11", "2000-11-11 00:00:00"},
sio{"0000-00-00 00:00:00", "0000-00-00 00:00:00"},
sio{"0000-00-00", "0000-00-00 00:00:00"},
sio{"2000-11-22 11:11:11.000111222", "2000-11-22 11:11:11.000111222"},
}
func TestConvTime(t *testing.T) {
conv := func(str string) interface{} {
d, err := ParseTime(str, time.Local)
if err != nil {
return err
}
return d
}
checkRow(t, datetimes, conv)
}
var times = []sio{
sio{"1:23:45", "1:23:45"},
sio{"-112:23:45", "-112:23:45"},
sio{"+112:23:45", "112:23:45"},
sio{"1:60:00", "invalid MySQL TIME string: 1:60:00"},
sio{"1:00:60", "invalid MySQL TIME string: 1:00:60"},
sio{"1:23:45.000111333", "1:23:45.000111333"},
sio{"-1:23:45.000111333", "-1:23:45.000111333"},
}
func TestConvDuration(t *testing.T) {
conv := func(str string) interface{} {
d, err := ParseDuration(str)
if err != nil {
return err
}
return d
}
checkRow(t, times, conv)
}
func TestEscapeString(t *testing.T) {
txt := " \000 \n \r \\ ' \" \032 "
exp := ` \0 \n \r \\ \' \" \Z `
out := escapeString(txt)
if out != exp {
t.Fatalf("escapeString: ret='%s' exp='%s'", out, exp)
}
}
func TestEscapeQuotes(t *testing.T) {
txt := " '' '' ' ' ' "
exp := ` '''' '''' '' '' '' `
out := escapeQuotes(txt)
if out != exp {
t.Fatalf("escapeString: ret='%s' exp='%s'", out, exp)
}
}
|