@@ -480,3 +480,184 @@ func TestGORMValuer(t *testing.T) {
480480 t .Errorf ("generated vars is not equal, got %v" , stmt .Vars )
481481 }
482482}
483+
484+ func TestEncryptedDataScanValue (t * testing.T ) {
485+ var ed EncryptedData
486+
487+ if err := ed .Scan ([]byte ("***mypassword" )); err != nil {
488+ t .Errorf ("expected no error, got %v" , err )
489+ }
490+ if string (ed ) != "mypassword" {
491+ t .Errorf ("expected 'mypassword', got %s" , string (ed ))
492+ }
493+
494+ if err := ed .Scan ("***otherpass" ); err != nil {
495+ t .Errorf ("expected no error, got %v" , err )
496+ }
497+ if string (ed ) != "otherpass" {
498+ t .Errorf ("expected 'otherpass', got %s" , string (ed ))
499+ }
500+
501+ if err := ed .Scan ([]byte ("no" )); err == nil {
502+ t .Errorf ("expected error for too short input" )
503+ }
504+
505+ val , err := EncryptedData ("mypassword" ).Value ()
506+ if err != nil {
507+ t .Errorf ("expected no error, got %v" , err )
508+ }
509+ if string (val .([]byte )) != "***mypassword" {
510+ t .Errorf ("expected '***mypassword', got %s" , string (val .([]byte )))
511+ }
512+
513+ _ , err = EncryptedData ("xpass" ).Value ()
514+ if err == nil {
515+ t .Errorf ("expected error when starting with 'x'" )
516+ }
517+ }
518+
519+ func TestNumScan (t * testing.T ) {
520+ var n Num
521+
522+ if err := n .Scan (int64 (42 )); err != nil {
523+ t .Errorf ("expected no error, got %v" , err )
524+ }
525+ if n != 42 {
526+ t .Errorf ("expected 42, got %d" , n )
527+ }
528+
529+ if err := n .Scan ("99" ); err != nil {
530+ t .Errorf ("expected no error, got %v" , err )
531+ }
532+ if n != 99 {
533+ t .Errorf ("expected 99, got %d" , n )
534+ }
535+
536+ if err := n .Scan ([]byte ("123" )); err != nil {
537+ t .Errorf ("expected no error, got %v" , err )
538+ }
539+ if n != 123 {
540+ t .Errorf ("expected 123, got %d" , n )
541+ }
542+
543+ if err := n .Scan (godror .Number ("456" )); err != nil {
544+ t .Errorf ("expected no error, got %v" , err )
545+ }
546+ if n != 456 {
547+ t .Errorf ("expected 456, got %d" , n )
548+ }
549+
550+ if err := n .Scan (nil ); err != nil {
551+ t .Errorf ("expected no error, got %v" , err )
552+ }
553+ if n != 0 {
554+ t .Errorf ("expected 0 after nil scan, got %d" , n )
555+ }
556+
557+ if err := n .Scan (3.14 ); err == nil {
558+ t .Errorf ("expected error for unsupported type" )
559+ }
560+ }
561+
562+ func TestStringsSliceScanValue (t * testing.T ) {
563+ original := StringsSlice {"a" , "b" }
564+ val , err := original .Value ()
565+ if err != nil {
566+ t .Errorf ("expected no error, got %v" , err )
567+ }
568+
569+ var parsed StringsSlice
570+ if err := parsed .Scan (val .(string )); err != nil {
571+ t .Errorf ("expected no error, got %v" , err )
572+ }
573+ if len (parsed ) != 2 || parsed [0 ] != "a" || parsed [1 ] != "b" {
574+ t .Errorf ("unexpected parsed result: %#v" , parsed )
575+ }
576+
577+ if err := parsed .Scan (123 ); err == nil {
578+ t .Errorf ("expected error for unsupported type" )
579+ }
580+ }
581+
582+ func TestStructsSliceScanValue (t * testing.T ) {
583+ original := StructsSlice {
584+ {Name : "n1" , Val : "v1" },
585+ {Name : "n2" , Val : "v2" },
586+ }
587+ val , err := original .Value ()
588+ if err != nil {
589+ t .Errorf ("expected no error, got %v" , err )
590+ }
591+
592+ var parsed StructsSlice
593+ if err := parsed .Scan (val .(string )); err != nil {
594+ t .Errorf ("expected no error, got %v" , err )
595+ }
596+ if len (parsed ) != 2 || parsed [0 ].Name != "n1" || parsed [1 ].Val != "v2" {
597+ t .Errorf ("unexpected parsed result: %#v" , parsed )
598+ }
599+ }
600+
601+ func TestExampleStructScanValue (t * testing.T ) {
602+ orig := ExampleStruct {Name : "foo" , Val : "bar" }
603+ val , err := orig .Value ()
604+ if err != nil {
605+ t .Errorf ("expected no error, got %v" , err )
606+ }
607+
608+ var parsed ExampleStruct
609+ if err := parsed .Scan (val .([]byte )); err != nil {
610+ t .Errorf ("expected no error, got %v" , err )
611+ }
612+ if parsed .Val != "bar" {
613+ t .Errorf ("expected Val 'bar', got %s" , parsed .Val )
614+ }
615+
616+ if err := parsed .Scan (123 ); err == nil {
617+ t .Errorf ("expected error for unsupported type" )
618+ }
619+ }
620+
621+ func TestRoleScanValue (t * testing.T ) {
622+ var r Role
623+ if err := r .Scan ([]byte ("admin" )); err != nil {
624+ t .Errorf ("expected no error, got %v" , err )
625+ }
626+ if ! r .IsAdmin () {
627+ t .Errorf ("expected role to be admin" )
628+ }
629+
630+ if err := r .Scan ("user" ); err != nil {
631+ t .Errorf ("expected no error, got %v" , err )
632+ }
633+ if r .IsAdmin () {
634+ t .Errorf ("expected role to be not admin" )
635+ }
636+
637+ val , err := r .Value ()
638+ if err != nil {
639+ t .Errorf ("expected no error, got %v" , err )
640+ }
641+ if val != "user" {
642+ t .Errorf ("expected 'user', got %v" , val )
643+ }
644+ }
645+
646+ func TestEmptyTimeScanValue (t * testing.T ) {
647+ var et EmptyTime
648+ now := time .Now ()
649+ if err := et .Scan (now ); err != nil {
650+ t .Errorf ("expected no error, got %v" , err )
651+ }
652+ if ! et .Time .Equal (now ) {
653+ t .Errorf ("expected %v, got %v" , now , et .Time )
654+ }
655+
656+ val , err := et .Value ()
657+ if err != nil {
658+ t .Errorf ("expected no error, got %v" , err )
659+ }
660+ if _ , ok := val .(time.Time ); ! ok {
661+ t .Errorf ("expected time.Time, got %T" , val )
662+ }
663+ }
0 commit comments