@@ -50,6 +50,7 @@ import (
50
50
"strconv"
51
51
"testing"
52
52
"time"
53
+ "math"
53
54
54
55
"github.com/godror/godror"
55
56
. "github.com/oracle-samples/gorm-oracle/tests/utils"
@@ -557,6 +558,72 @@ func TestNumScan(t *testing.T) {
557
558
if err := n .Scan (3.14 ); err == nil {
558
559
t .Errorf ("expected error for unsupported type" )
559
560
}
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
+ }
560
627
}
561
628
562
629
func TestStringsSliceScanValue (t * testing.T ) {
@@ -661,3 +728,62 @@ func TestEmptyTimeScanValue(t *testing.T) {
661
728
t .Errorf ("expected time.Time, got %T" , val )
662
729
}
663
730
}
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