@@ -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
562629func 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\n d" , "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\n d" || 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