From 74b94f0d8b6f86ff1e798487a5a422c63b90f067 Mon Sep 17 00:00:00 2001 From: go-jet Date: Fri, 20 Sep 2019 19:13:30 +0200 Subject: [PATCH] Add more unit tests. --- execution/internal/null_types.go | 2 +- execution/internal/null_types_test.go | 147 ++++++++++++++++++++++++++ internal/utils/utils_test.go | 13 +++ 3 files changed, 161 insertions(+), 1 deletion(-) create mode 100644 execution/internal/null_types_test.go diff --git a/execution/internal/null_types.go b/execution/internal/null_types.go index c9fb45e..5a39094 100644 --- a/execution/internal/null_types.go +++ b/execution/internal/null_types.go @@ -62,7 +62,7 @@ func (nt *NullTime) Scan(value interface{}) (err error) { nt.Time, nt.Valid = parseTime(v) return default: - return fmt.Errorf("can't scan time from %v", value) + return fmt.Errorf("can't scan time.Time from %v", value) } } diff --git a/execution/internal/null_types_test.go b/execution/internal/null_types_test.go new file mode 100644 index 0000000..70eb42f --- /dev/null +++ b/execution/internal/null_types_test.go @@ -0,0 +1,147 @@ +package internal + +import ( + "fmt" + "gotest.tools/assert" + "testing" + "time" +) + +func TestNullByteArray(t *testing.T) { + var array NullByteArray + + assert.NilError(t, array.Scan(nil)) + assert.Equal(t, array.Valid, false) + + assert.NilError(t, array.Scan([]byte("bytea"))) + assert.Equal(t, array.Valid, true) + assert.Equal(t, string(array.ByteArray), string([]byte("bytea"))) + + assert.Error(t, array.Scan(12), "can't scan []byte from 12") +} + +func TestNullTime(t *testing.T) { + var array NullTime + + assert.NilError(t, array.Scan(nil)) + assert.Equal(t, array.Valid, false) + + time := time.Now() + assert.NilError(t, array.Scan(time)) + assert.Equal(t, array.Valid, true) + value, _ := array.Value() + assert.Equal(t, value, time) + + assert.NilError(t, array.Scan([]byte("13:10:11"))) + assert.Equal(t, array.Valid, true) + value, _ = array.Value() + assert.Equal(t, fmt.Sprintf("%v", value), "0000-01-01 13:10:11 +0000 UTC") + + assert.NilError(t, array.Scan("13:10:11")) + assert.Equal(t, array.Valid, true) + value, _ = array.Value() + assert.Equal(t, fmt.Sprintf("%v", value), "0000-01-01 13:10:11 +0000 UTC") + + assert.Error(t, array.Scan(12), "can't scan time.Time from 12") +} + +func TestNullInt8(t *testing.T) { + var array NullInt8 + + assert.NilError(t, array.Scan(nil)) + assert.Equal(t, array.Valid, false) + + assert.NilError(t, array.Scan(int64(11))) + assert.Equal(t, array.Valid, true) + value, _ := array.Value() + assert.Equal(t, value, int8(11)) + + assert.Error(t, array.Scan("text"), "can't scan int8 from text") +} + +func TestNullInt16(t *testing.T) { + var array NullInt16 + + assert.NilError(t, array.Scan(nil)) + assert.Equal(t, array.Valid, false) + + assert.NilError(t, array.Scan(int64(11))) + assert.Equal(t, array.Valid, true) + value, _ := array.Value() + assert.Equal(t, value, int16(11)) + + assert.NilError(t, array.Scan(int16(20))) + assert.Equal(t, array.Valid, true) + value, _ = array.Value() + assert.Equal(t, value, int16(20)) + + assert.NilError(t, array.Scan(int8(30))) + assert.Equal(t, array.Valid, true) + value, _ = array.Value() + assert.Equal(t, value, int16(30)) + + assert.NilError(t, array.Scan(uint8(30))) + assert.Equal(t, array.Valid, true) + value, _ = array.Value() + assert.Equal(t, value, int16(30)) + + assert.Error(t, array.Scan("text"), "can't scan int16 from text") +} + +func TestNullInt32(t *testing.T) { + var array NullInt32 + + assert.NilError(t, array.Scan(nil)) + assert.Equal(t, array.Valid, false) + + assert.NilError(t, array.Scan(int64(11))) + assert.Equal(t, array.Valid, true) + value, _ := array.Value() + assert.Equal(t, value, int32(11)) + + assert.NilError(t, array.Scan(int32(32))) + assert.Equal(t, array.Valid, true) + value, _ = array.Value() + assert.Equal(t, value, int32(32)) + + assert.NilError(t, array.Scan(int16(20))) + assert.Equal(t, array.Valid, true) + value, _ = array.Value() + assert.Equal(t, value, int32(20)) + + assert.NilError(t, array.Scan(uint16(16))) + assert.Equal(t, array.Valid, true) + value, _ = array.Value() + assert.Equal(t, value, int32(16)) + + assert.NilError(t, array.Scan(int8(30))) + assert.Equal(t, array.Valid, true) + value, _ = array.Value() + assert.Equal(t, value, int32(30)) + + assert.NilError(t, array.Scan(uint8(30))) + assert.Equal(t, array.Valid, true) + value, _ = array.Value() + assert.Equal(t, value, int32(30)) + + assert.Error(t, array.Scan("text"), "can't scan int32 from text") +} + +func TestNullFloat32(t *testing.T) { + var array NullFloat32 + + assert.NilError(t, array.Scan(nil)) + assert.Equal(t, array.Valid, false) + + assert.NilError(t, array.Scan(float64(64))) + assert.Equal(t, array.Valid, true) + value, _ := array.Value() + assert.Equal(t, value, float32(64)) + + assert.NilError(t, array.Scan(float32(32))) + assert.Equal(t, array.Valid, true) + value, _ = array.Value() + assert.Equal(t, value, float32(32)) + + assert.Error(t, array.Scan(12), "can't scan float32 from 12") +} diff --git a/internal/utils/utils_test.go b/internal/utils/utils_test.go index a41a225..359e854 100644 --- a/internal/utils/utils_test.go +++ b/internal/utils/utils_test.go @@ -1,6 +1,7 @@ package utils import ( + "fmt" "gotest.tools/assert" "testing" ) @@ -23,3 +24,15 @@ func TestToGoIdentifier(t *testing.T) { assert.Equal(t, ToGoIdentifier("My Table"), "MyTable") assert.Equal(t, ToGoIdentifier("My-Table"), "MyTable") } + +func TestErrorCatch(t *testing.T) { + var err error + + func() { + defer ErrorCatch(&err) + + panic(fmt.Errorf("newError")) + }() + + assert.Error(t, err, "newError") +}