1
0
Fork 0
bocadillo/tests/type_time_test.go

175 lines
4.6 KiB
Go

package tests
import (
"fmt"
"testing"
"time"
"github.com/localhots/bocadillo/mysql"
)
func TestYear(t *testing.T) {
tbl := suite.createTable(mysql.ColumnTypeYear, "", attrNone)
defer tbl.drop(t)
for _, v := range []int16{1900, 1901, 1999, 2018, 2155} {
t.Run(fmt.Sprint(v), func(t *testing.T) {
suite.insertAndCompare(t, tbl, v)
})
}
}
func TestDate(t *testing.T) {
tbl := suite.createTable(mysql.ColumnTypeDate, "", attrNone)
defer tbl.drop(t)
vals := []string{
"0000-00-00",
"1000-01-01",
"1234-05-06",
"1500-01-01",
"2016-09-08",
"2030-06-12",
"9999-12-31",
}
for _, v := range vals {
t.Run(v, func(t *testing.T) {
suite.insertAndCompare(t, tbl, v)
})
}
}
func TestTime(t *testing.T) {
tbl := suite.createTable(mysql.ColumnTypeTime, "", attrNone)
defer tbl.drop(t)
vals := []string{
"00:00:00",
"06:00:00",
"11:11:11",
"12:34:56",
"24:00:00",
"23:59:59",
}
for _, v := range vals {
t.Run(v, func(t *testing.T) {
suite.insertAndCompare(t, tbl, v)
})
}
}
func TestTimestamp(t *testing.T) {
tbl := suite.createTable(mysql.ColumnTypeTimestamp, "", attrNone)
defer tbl.drop(t)
vals := []time.Time{
parseTime("0000-00-00T00:00:00Z"),
// This is the lowest I could get
// Spec says 1970-01-01 00:00:01 should be supported
parseTime("1970-01-01T01:00:01Z"),
parseTime("1975-01-01T00:00:01Z"),
parseTime("1985-01-01T00:00:01Z"),
parseTime("1999-12-31T23:59:59Z"),
parseTime("2018-11-08T19:26:00Z"),
parseTime("2038-01-19T03:14:07Z"),
parseTime("2038-01-19T04:14:07Z"), // Should be outside supported range? 2038-01-19 03:14:07
}
for _, v := range vals {
t.Run(v.Format(time.RFC3339Nano), func(t *testing.T) {
suite.insertAndCompare(t, tbl, v)
})
}
}
func TestDatetime(t *testing.T) {
inputs := map[string][]time.Time{
"0": {
parseTime("0000-00-00T00:00:00Z"),
parseTime("1000-01-01T00:00:00Z"),
parseTime("1975-01-01T00:00:01Z"),
parseTime("1985-01-01T00:00:01Z"),
parseTime("1999-12-31T23:59:59Z"),
parseTime("2018-11-08T19:26:00Z"),
parseTime("2038-01-19T03:14:07Z"),
parseTime("9999-12-31T23:59:59Z"),
},
"1": {
parseTime("0000-00-00T00:00:00.0Z"),
parseTime("1000-01-01T00:00:00.1Z"),
parseTime("1975-01-01T00:00:01.1Z"),
parseTime("1985-01-01T00:00:01.1Z"),
parseTime("1999-12-31T23:59:59.1Z"),
parseTime("2018-11-08T19:26:00.1Z"),
parseTime("2038-01-19T03:14:07.1Z"),
parseTime("9999-12-31T23:59:59.1Z"),
},
"2": {
parseTime("0000-00-00T00:00:00.00Z"),
parseTime("1000-01-01T00:00:00.22Z"),
parseTime("1975-01-01T00:00:01.22Z"),
parseTime("1985-01-01T00:00:01.22Z"),
parseTime("1999-12-31T23:59:59.22Z"),
parseTime("2018-11-08T19:26:00.22Z"),
parseTime("2038-01-19T03:14:07.22Z"),
parseTime("9999-12-31T23:59:59.22Z"),
},
"3": {
parseTime("0000-00-00T00:00:00.000Z"),
parseTime("1000-01-01T00:00:00.333Z"),
parseTime("1975-01-01T00:00:01.333Z"),
parseTime("1985-01-01T00:00:01.333Z"),
parseTime("1999-12-31T23:59:59.333Z"),
parseTime("2018-11-08T19:26:00.333Z"),
parseTime("2038-01-19T03:14:07.333Z"),
parseTime("9999-12-31T23:59:59.333Z"),
},
"4": {
parseTime("0000-00-00T00:00:00.0000Z"),
parseTime("1000-01-01T00:00:00.4444Z"),
parseTime("1975-01-01T00:00:01.4444Z"),
parseTime("1985-01-01T00:00:01.4444Z"),
parseTime("1999-12-31T23:59:59.4444Z"),
parseTime("2018-11-08T19:26:00.4444Z"),
parseTime("2038-01-19T03:14:07.4444Z"),
parseTime("9999-12-31T23:59:59.4444Z"),
},
"5": {
parseTime("0000-00-00T00:00:00.00000Z"),
parseTime("1000-01-01T00:00:00.55555Z"),
parseTime("1975-01-01T00:00:01.55555Z"),
parseTime("1985-01-01T00:00:01.55555Z"),
parseTime("1999-12-31T23:59:59.55555Z"),
parseTime("2018-11-08T19:26:00.55555Z"),
parseTime("2038-01-19T03:14:07.55555Z"),
parseTime("9999-12-31T23:59:59.55555Z"),
},
"6": {
parseTime("0000-00-00T00:00:00.000000Z"),
parseTime("1000-01-01T00:00:00.666666Z"),
parseTime("1975-01-01T00:00:01.666666Z"),
parseTime("1985-01-01T00:00:01.666666Z"),
parseTime("1999-12-31T23:59:59.666666Z"),
parseTime("2018-11-08T19:26:00.666666Z"),
parseTime("2038-01-19T03:14:07.666666Z"),
parseTime("9999-12-31T23:59:59.666666Z"),
},
}
for length, vals := range inputs {
t.Run(length, func(t *testing.T) {
tbl := suite.createTable(mysql.ColumnTypeDatetime, length, attrNone)
defer tbl.drop(t)
for _, v := range vals {
t.Run(v.Format(time.RFC3339Nano), func(t *testing.T) {
suite.insertAndCompare(t, tbl, v)
})
}
})
}
}
func parseTime(str string) time.Time {
t, _ := time.Parse(str, time.RFC3339Nano)
return t
}