Skip to content

Commit c908df2

Browse files
Add more test cases
1 parent 964bf09 commit c908df2

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed

tests/scanner_valuer_test.go

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import (
5050
"strconv"
5151
"testing"
5252
"time"
53+
"math"
5354

5455
"github.com/godror/godror"
5556
. "github.com/oracle-samples/gorm-oracle/tests/utils"
@@ -557,6 +558,72 @@ func TestNumScan(t *testing.T) {
557558
if err := n.Scan(3.14); err == nil {
558559
t.Errorf("expected error for unsupported type")
559560
}
561+
562+
if err := n.Scan(int64(0)); err != nil {
563+
t.Errorf("expected no error, got %v", err)
564+
}
565+
if n != 0 {
566+
t.Errorf("expected 0, got %d", n)
567+
}
568+
569+
if err := n.Scan(int64(-123)); err != nil {
570+
t.Errorf("expected no error, got %v", err)
571+
}
572+
if n != -123 {
573+
t.Errorf("expected -123, got %d", n)
574+
}
575+
576+
large := int64(math.MaxInt64)
577+
if err := n.Scan(large); err != nil {
578+
t.Errorf("expected no error for large int, got %v", err)
579+
}
580+
if n != Num(large) {
581+
t.Errorf("expected %d, got %d", large, n)
582+
}
583+
584+
small := int64(math.MinInt64)
585+
if err := n.Scan(small); err != nil {
586+
t.Errorf("expected no error for small int, got %v", err)
587+
}
588+
if n != Num(small) {
589+
t.Errorf("expected %d, got %d", small, n)
590+
}
591+
592+
if err := n.Scan(" 77 "); err == nil {
593+
t.Errorf("expected error for spaced string")
594+
}
595+
596+
if err := n.Scan(""); err == nil {
597+
t.Errorf("expected error for empty string")
598+
}
599+
600+
if err := n.Scan([]byte("")); err == nil {
601+
t.Errorf("expected error for empty byte slice")
602+
}
603+
604+
if err := n.Scan("not-a-number"); err == nil {
605+
t.Errorf("expected error for invalid string")
606+
}
607+
608+
if err := n.Scan(godror.Number("abc")); err == nil {
609+
t.Errorf("expected error for invalid godror.Number")
610+
}
611+
612+
if err := n.Scan(uint64(123)); err == nil {
613+
t.Errorf("expected error for unsupported uint64 type")
614+
}
615+
616+
if err := n.Scan("9223372036854775808"); err == nil {
617+
t.Errorf("expected error for overflow string")
618+
}
619+
620+
if err := n.Scan(`"42"`); err == nil {
621+
t.Errorf("expected error for quoted JSON string")
622+
}
623+
624+
if err := n.Scan(true); err == nil {
625+
t.Errorf("expected error for bool input")
626+
}
560627
}
561628

562629
func TestStringsSliceScanValue(t *testing.T) {
@@ -661,3 +728,62 @@ func TestEmptyTimeScanValue(t *testing.T) {
661728
t.Errorf("expected time.Time, got %T", val)
662729
}
663730
}
731+
732+
func TestStringsSliceEmptySlice(t *testing.T) {
733+
empty := StringsSlice{}
734+
val, err := empty.Value()
735+
if err != nil {
736+
t.Errorf("expected no error for empty slice, got %v", err)
737+
}
738+
739+
var parsed StringsSlice
740+
if err := parsed.Scan(val.(string)); err != nil {
741+
t.Errorf("expected no error scanning empty slice, got %v", err)
742+
}
743+
if len(parsed) != 0 {
744+
t.Errorf("expected empty slice, got %#v", parsed)
745+
}
746+
}
747+
748+
func TestStringsSliceNilSlice(t *testing.T) {
749+
var nilSlice StringsSlice
750+
val, err := nilSlice.Value()
751+
if err != nil {
752+
t.Errorf("expected no error for nil slice, got %v", err)
753+
}
754+
if val.(string) != "null" && val.(string) != "[]" {
755+
t.Errorf("expected JSON null or [], got %v", val)
756+
}
757+
}
758+
759+
func TestStringsSliceSpecialCharacters(t *testing.T) {
760+
special := StringsSlice{"a,b", "c\nd", "e\"f"}
761+
val, err := special.Value()
762+
if err != nil {
763+
t.Errorf("expected no error, got %v", err)
764+
}
765+
766+
var parsed StringsSlice
767+
if err := parsed.Scan(val.(string)); err != nil {
768+
t.Errorf("expected no error scanning special chars, got %v", err)
769+
}
770+
if parsed[0] != "a,b" || parsed[1] != "c\nd" || parsed[2] != "e\"f" {
771+
t.Errorf("unexpected parsed result with special chars: %#v", parsed)
772+
}
773+
}
774+
775+
func TestStringsSliceInvalidJSON(t *testing.T) {
776+
var parsed StringsSlice
777+
err := parsed.Scan("{bad json}")
778+
if err == nil {
779+
t.Errorf("expected error for malformed JSON, got nil")
780+
}
781+
}
782+
783+
func TestStringsSliceWrongType(t *testing.T) {
784+
slice := StringsSlice{"x"}
785+
err := slice.Scan(123)
786+
if err == nil {
787+
t.Errorf("expected error for wrong type, got nil")
788+
}
789+
}

0 commit comments

Comments
 (0)