summaryrefslogtreecommitdiff
path: root/statement_test.go
diff options
context:
space:
mode:
authorroot <sina@snix.ir>2022-05-27 13:13:53 +0000
committerroot <sina@snix.ir>2022-05-27 13:13:53 +0000
commit937c561db4b25a1becdc81701511fafc67b90389 (patch)
tree17e5d4c692ec4ab3c8b0deb0072d5784cc4be084 /statement_test.go
fork mysql driverHEADmaster
Diffstat (limited to 'statement_test.go')
-rw-r--r--statement_test.go151
1 files changed, 151 insertions, 0 deletions
diff --git a/statement_test.go b/statement_test.go
new file mode 100644
index 0000000..01405cf
--- /dev/null
+++ b/statement_test.go
@@ -0,0 +1,151 @@
+// Go MySQL Driver - A MySQL-Driver for Go's database/sql package
+//
+// Copyright 2017 The Go-MySQL-Driver Authors. All rights reserved.
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this file,
+// You can obtain one at http://mozilla.org/MPL/2.0/.
+
+package mariadb
+
+import (
+ "bytes"
+ "database/sql/driver"
+ "encoding/json"
+ "testing"
+)
+
+func TestConvertDerivedString(t *testing.T) {
+ type derived string
+
+ output, err := converter{}.ConvertValue(derived("value"))
+ if err != nil {
+ t.Fatal("Derived string type not convertible", err)
+ }
+
+ if output != "value" {
+ t.Fatalf("Derived string type not converted, got %#v %T", output, output)
+ }
+}
+
+func TestConvertDerivedByteSlice(t *testing.T) {
+ type derived []uint8
+
+ output, err := converter{}.ConvertValue(derived("value"))
+ if err != nil {
+ t.Fatal("Byte slice not convertible", err)
+ }
+
+ if !bytes.Equal(output.([]byte), []byte("value")) {
+ t.Fatalf("Byte slice not converted, got %#v %T", output, output)
+ }
+}
+
+func TestConvertDerivedUnsupportedSlice(t *testing.T) {
+ type derived []int
+
+ _, err := converter{}.ConvertValue(derived{1})
+ if err == nil || err.Error() != "unsupported type mysql.derived, a slice of int" {
+ t.Fatal("Unexpected error", err)
+ }
+}
+
+func TestConvertDerivedBool(t *testing.T) {
+ type derived bool
+
+ output, err := converter{}.ConvertValue(derived(true))
+ if err != nil {
+ t.Fatal("Derived bool type not convertible", err)
+ }
+
+ if output != true {
+ t.Fatalf("Derived bool type not converted, got %#v %T", output, output)
+ }
+}
+
+func TestConvertPointer(t *testing.T) {
+ str := "value"
+
+ output, err := converter{}.ConvertValue(&str)
+ if err != nil {
+ t.Fatal("Pointer type not convertible", err)
+ }
+
+ if output != "value" {
+ t.Fatalf("Pointer type not converted, got %#v %T", output, output)
+ }
+}
+
+func TestConvertSignedIntegers(t *testing.T) {
+ values := []interface{}{
+ int8(-42),
+ int16(-42),
+ int32(-42),
+ int64(-42),
+ int(-42),
+ }
+
+ for _, value := range values {
+ output, err := converter{}.ConvertValue(value)
+ if err != nil {
+ t.Fatalf("%T type not convertible %s", value, err)
+ }
+
+ if output != int64(-42) {
+ t.Fatalf("%T type not converted, got %#v %T", value, output, output)
+ }
+ }
+}
+
+type myUint64 struct {
+ value uint64
+}
+
+func (u myUint64) Value() (driver.Value, error) {
+ return u.value, nil
+}
+
+func TestConvertUnsignedIntegers(t *testing.T) {
+ values := []interface{}{
+ uint8(42),
+ uint16(42),
+ uint32(42),
+ uint64(42),
+ uint(42),
+ myUint64{uint64(42)},
+ }
+
+ for _, value := range values {
+ output, err := converter{}.ConvertValue(value)
+ if err != nil {
+ t.Fatalf("%T type not convertible %s", value, err)
+ }
+
+ if output != uint64(42) {
+ t.Fatalf("%T type not converted, got %#v %T", value, output, output)
+ }
+ }
+
+ output, err := converter{}.ConvertValue(^uint64(0))
+ if err != nil {
+ t.Fatal("uint64 high-bit not convertible", err)
+ }
+
+ if output != ^uint64(0) {
+ t.Fatalf("uint64 high-bit converted, got %#v %T", output, output)
+ }
+}
+
+func TestConvertJSON(t *testing.T) {
+ raw := json.RawMessage("{}")
+
+ out, err := converter{}.ConvertValue(raw)
+
+ if err != nil {
+ t.Fatal("json.RawMessage was failed in convert", err)
+ }
+
+ if _, ok := out.(json.RawMessage); !ok {
+ t.Fatalf("json.RawMessage converted, got %#v %T", out, out)
+ }
+}

Snix LLC Git Repository Holder Copyright(C) 2022 All Rights Reserved Email To Snix.IR