Skip to content

Commit be51821

Browse files
committed
improved structure (but still broken)
1 parent 75147f2 commit be51821

File tree

1 file changed

+90
-81
lines changed

1 file changed

+90
-81
lines changed

driver_test.go

Lines changed: 90 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,11 @@ func runTests(t *testing.T, name string, tests ...func(db *DBTest)) {
119119
defer db.Close()
120120

121121
environment := &DBTest{t, db}
122+
environment.mustExec("DROP TABLE IF EXISTS test")
122123
for _, test := range tests {
123124
test(environment)
124125
}
126+
environment.mustExec("DROP TABLE IF EXISTS test")
125127
}
126128

127129
func args(args ...interface{}) []interface{} {
@@ -206,8 +208,6 @@ func _rawBytesResultExceedsBuffer(db *DBTest) {
206208
}
207209

208210
func _crud(db *DBTest) {
209-
db.mustExec("DROP TABLE IF EXISTS test")
210-
211211
// Create Table
212212
db.mustExec("CREATE TABLE test (value BOOL)")
213213

@@ -302,8 +302,6 @@ func TestInt(t *testing.T) {
302302
}
303303

304304
func _int(db *DBTest) {
305-
db.mustExec("DROP TABLE IF EXISTS test")
306-
307305
types := [5]string{"TINYINT", "SMALLINT", "MEDIUMINT", "INT", "BIGINT"}
308306
in := int64(42)
309307
var out int64
@@ -353,8 +351,6 @@ func TestFloat(t *testing.T) {
353351
}
354352

355353
func _float(db *DBTest) {
356-
db.mustExec("DROP TABLE IF EXISTS test")
357-
358354
types := [2]string{"FLOAT", "DOUBLE"}
359355
in := float32(42.23)
360356
var out float32
@@ -384,8 +380,6 @@ func TestString(t *testing.T) {
384380
}
385381

386382
func _string(db *DBTest) {
387-
db.mustExec("DROP TABLE IF EXISTS test")
388-
389383
types := [6]string{"CHAR(255)", "VARCHAR(255)", "TINYTEXT", "TEXT", "MEDIUMTEXT", "LONGTEXT"}
390384
in := "κόσμε üöäßñóùéàâÿœ'îë Árvíztűrő いろはにほへとちりぬるを イロハニホヘト דג סקרן чащах น่าฟังเอย"
391385
var out string
@@ -432,89 +426,111 @@ func _string(db *DBTest) {
432426
}
433427

434428
func TestDateTime(t *testing.T) {
435-
var modes = [2]string{"text", "binary"}
436-
var types = [2]string{"DATE", "DATETIME"}
437-
var tests = [2][]struct {
429+
type testmode struct {
430+
selectSuffix string
431+
args []interface{}
432+
}
433+
type timetest struct {
438434
in interface{}
439435
sOut string
440436
tOut time.Time
441437
tIsZero bool
442-
}{
443-
{
444-
{"2012-06-14", "2012-06-14", time.Date(2012, 6, 14, 0, 0, 0, 0, time.UTC), false},
445-
{"0000-00-00", "0000-00-00", time.Time{}, true},
446-
{time.Date(2012, 6, 14, 0, 0, 0, 0, time.UTC), "2012-06-14", time.Date(2012, 6, 14, 0, 0, 0, 0, time.UTC), false},
447-
{time.Time{}, "0000-00-00", time.Time{}, true},
448-
},
449-
{
450-
{"2011-11-20 21:27:37", "2011-11-20 21:27:37", time.Date(2011, 11, 20, 21, 27, 37, 0, time.UTC), false},
451-
{"0000-00-00 00:00:00", "0000-00-00 00:00:00", time.Time{}, true},
452-
{time.Date(2011, 11, 20, 21, 27, 37, 0, time.UTC), "2011-11-20 21:27:37", time.Date(2011, 11, 20, 21, 27, 37, 0, time.UTC), false},
453-
{time.Time{}, "0000-00-00 00:00:00", time.Time{}, true},
454-
},
455-
}
456-
var sOut string
457-
var tOut time.Time
458-
459-
var rows [2]*sql.Rows
460-
var err error
461-
var resultType string
438+
}
439+
type tester func(db *DBTest, rows *sql.Rows,
440+
test *timetest, sqltype, resulttype, mode string)
441+
type setup struct {
442+
vartype string
443+
dsnSuffix string
444+
test tester
445+
}
446+
var (
447+
date = time.Date(2012, 6, 14, 0, 0, 0, 0, time.UTC)
448+
dstring = "2012-06-14"
449+
datetime = time.Date(2011, 11, 20, 21, 27, 37, 0, time.UTC)
450+
dtstring = "2011-11-20 21:27:37"
451+
date0 = time.Time{}
452+
d0string = "0000-00-00"
453+
dt0string = "0000-00-00 00:00:00"
454+
modes = map[string]*testmode{
455+
"text": &testmode{"", args()},
456+
"binary": &testmode{" WHERE 1 = ?", args(1)},
457+
}
458+
timetests = map[string][]*timetest{
459+
"DATE": {
460+
{dstring, dstring, date, false},
461+
{d0string, d0string, date0, true},
462+
{date, dstring, date, false},
463+
{date0, d0string, date0, true},
464+
},
465+
"DATETIME": {
466+
{dtstring, dtstring, datetime, false},
467+
{dt0string, dt0string, date0, true},
468+
{datetime, dtstring, datetime, false},
469+
{date0, dt0string, date0, true},
470+
},
471+
}
472+
setups = []*setup{
473+
{"string", "&parseTime=false", func(
474+
db *DBTest, rows *sql.Rows, test *timetest, sqltype, resulttype, mode string) {
475+
var sOut string
476+
if err := rows.Scan(&sOut); err != nil {
477+
db.Errorf("%s (%s %s): %v",
478+
sqltype, resulttype, mode, err)
479+
} else if test.sOut != sOut {
480+
db.Errorf("%s (%s %s): %s != %s",
481+
sqltype, resulttype, mode,
482+
test.sOut, sOut)
483+
}
484+
}},
485+
{"time.Time", "&parseTime=true", func(
486+
db *DBTest, rows *sql.Rows, test *timetest, sqltype, resulttype, mode string) {
487+
var tOut time.Time
488+
if err := rows.Scan(&tOut); err != nil {
489+
db.Errorf("%s (%s %s): %v",
490+
sqltype, resulttype, mode, err)
491+
} else if test.tOut != tOut || test.tIsZero != tOut.IsZero() {
492+
db.Errorf("%s (%s %s): %s [%t] != %s [%t]",
493+
sqltype, resulttype, mode,
494+
test.tOut, test.tIsZero,
495+
tOut, tOut.IsZero())
496+
}
497+
}},
498+
}
499+
)
462500

501+
var s *setup
463502
testTime := func(db *DBTest) {
464-
defer db.mustExec("DROP TABLE IF EXISTS test")
465-
for i, v := range types {
503+
var rows *sql.Rows
504+
for sqltype, tests := range timetests {
466505
db.mustExec("DROP TABLE IF EXISTS test")
467-
db.mustExec("CREATE TABLE test (value " + v + ") CHARACTER SET utf8 COLLATE utf8_unicode_ci")
468-
for j := range tests[i] {
469-
db.mustExec("INSERT INTO test VALUES (?)", tests[i][j].in)
470-
// string
471-
rows[0] = db.mustQuery("SELECT value FROM test") // text
472-
rows[1] = db.mustQuery("SELECT value FROM test WHERE 1 = ?", 1) // binary
473-
474-
for k := range rows {
475-
if rows[k].Next() {
476-
if resultType == "string" {
477-
err = rows[k].Scan(&sOut)
478-
if err != nil {
479-
db.Errorf("%s (%s %s): %v",
480-
v, resultType, modes[k], err)
481-
} else if tests[i][j].sOut != sOut {
482-
db.Errorf("%s (%s %s): %s != %s",
483-
v, resultType, modes[k],
484-
tests[i][j].sOut, sOut)
485-
}
486-
} else {
487-
err = rows[k].Scan(&tOut)
488-
if err != nil {
489-
t.Errorf("%s (%s %s): %v",
490-
v, resultType, modes[k], err)
491-
} else if tests[i][j].tOut != tOut || tests[i][j].tIsZero != tOut.IsZero() {
492-
t.Errorf("%s (%s %s): %s [%t] != %s [%t]",
493-
v, resultType, modes[k],
494-
tests[i][j].tOut, tests[i][j].tIsZero,
495-
tOut, tOut.IsZero())
496-
}
497-
}
506+
db.mustExec("CREATE TABLE test (value " + sqltype + ") CHARACTER SET utf8 COLLATE utf8_unicode_ci")
507+
for _, test := range tests {
508+
db.mustExec("INSERT INTO test VALUES (?)", test.in)
509+
for mode, q := range modes {
510+
rows = db.mustQuery("SELECT value FROM test"+q.selectSuffix, q.args...)
511+
if rows.Next() {
512+
s.test(db, rows, test, sqltype, s.vartype, mode)
498513
} else {
499-
err = rows[k].Err()
500-
if err != nil {
501-
db.Errorf("%s (%s %s): %v", v, resultType, modes[k], err)
514+
if err := rows.Err(); err != nil {
515+
db.Errorf("%s (%s %s): %v",
516+
sqltype, s.vartype, mode, err)
502517
} else {
503-
db.Errorf("%s (%s %s): no data", v, resultType, modes[k])
518+
db.Errorf("%s (%s %s): no data",
519+
sqltype, s.vartype, mode)
504520
}
505521
}
506522
}
507523
}
508524
}
509525
}
510526

511-
resultType = "string"
512527
oldDsn := dsn
513-
dsn += "&sql_mode=ALLOW_INVALID_DATES"
514-
runTests(t, "TestDateTime", testTime)
515-
dsn += "&parseTime=true"
516-
resultType = "time.Time"
517-
runTests(t, "TestDateTime", testTime)
528+
usedDsn := oldDsn + "&sql_mode=ALLOW_INVALID_DATES"
529+
for _, v := range setups {
530+
s = v
531+
dsn = usedDsn + s.dsnSuffix
532+
runTests(t, "TestDateTime", testTime)
533+
}
518534
dsn = oldDsn
519535
}
520536

@@ -634,8 +650,6 @@ func _null(db *DBTest) {
634650
} else {
635651
db.Error("no data")
636652
}
637-
638-
db.mustExec("DROP TABLE IF EXISTS test")
639653
}
640654

641655
func TestLongData(t *testing.T) {
@@ -655,7 +669,6 @@ func _longData(db *DBTest) {
655669
maxAllowedPacketSize = 1 << 25
656670
}
657671

658-
db.mustExec("DROP TABLE IF EXISTS test")
659672
db.mustExec("CREATE TABLE test (value LONGBLOB) CHARACTER SET utf8 COLLATE utf8_unicode_ci")
660673

661674
in := strings.Repeat(`0`, maxAllowedPacketSize+1)
@@ -696,8 +709,6 @@ func _longData(db *DBTest) {
696709
} else {
697710
db.Fatalf("LONGBLOB: no data")
698711
}
699-
700-
db.mustExec("DROP TABLE IF EXISTS test")
701712
}
702713

703714
func TestLoadData(t *testing.T) {
@@ -787,8 +798,6 @@ func _loadData(db *DBTest) {
787798
} else if err.Error() != "Reader 'doesnotexist' is not registered" {
788799
db.Fatal(err.Error())
789800
}
790-
791-
db.mustExec("DROP TABLE IF EXISTS test")
792801
}
793802

794803
// Special cases

0 commit comments

Comments
 (0)