@@ -572,3 +572,310 @@ func TestFieldAnyReflect(t *testing.T) {
572572 }
573573
574574}
575+
576+ func TestFieldAccept (t * testing.T ) {
577+ type customStruct struct {
578+ v int
579+ }
580+
581+ cases := []struct {
582+ name string
583+ original Field
584+ expected interface {}
585+ }{
586+ {
587+ name : "String" ,
588+ original : String ("k" , "42" ),
589+ expected : "42" ,
590+ },
591+ {
592+ name : "Bool" ,
593+ original : Bool ("k" , true ),
594+ expected : true ,
595+ },
596+ {
597+ name : "Int" ,
598+ original : Int ("k" , 42 ),
599+ expected : int64 (42 ),
600+ },
601+ {
602+ name : "Int64" ,
603+ original : Int64 ("k" , 42 ),
604+ expected : int64 (42 ),
605+ },
606+ {
607+ name : "Int32" ,
608+ original : Int32 ("k" , 42 ),
609+ expected : int32 (42 ),
610+ },
611+ {
612+ name : "Int16" ,
613+ original : Int16 ("k" , 42 ),
614+ expected : int16 (42 ),
615+ },
616+ {
617+ name : "Int8" ,
618+ original : Int8 ("k" , 42 ),
619+ expected : int8 (42 ),
620+ },
621+ {
622+ name : "Uint" ,
623+ original : Uint ("k" , 42 ),
624+ expected : uint64 (42 ),
625+ },
626+ {
627+ name : "Uint64" ,
628+ original : Uint64 ("k" , 42 ),
629+ expected : uint64 (42 ),
630+ },
631+ {
632+ name : "Uint32" ,
633+ original : Uint32 ("k" , 42 ),
634+ expected : uint32 (42 ),
635+ },
636+ {
637+ name : "Uint16" ,
638+ original : Uint16 ("k" , 42 ),
639+ expected : uint16 (42 ),
640+ },
641+ {
642+ name : "Uint8" ,
643+ original : Uint8 ("k" , 42 ),
644+ expected : uint8 (42 ),
645+ },
646+ {
647+ name : "Float64" ,
648+ original : Float64 ("k" , 42 ),
649+ expected : float64 (42 ),
650+ },
651+ {
652+ name : "Float32" ,
653+ original : Float32 ("k" , 42 ),
654+ expected : float32 (42 ),
655+ },
656+ {
657+ name : "Strings" ,
658+ original : Strings ("k" , []string {"42" , "43" }),
659+ expected : stringArray {"42" , "43" }, // FIXME
660+ },
661+ {
662+ name : "Bools" ,
663+ original : Bools ("k" , []bool {true , false }),
664+ expected : []bool {true , false },
665+ },
666+ {
667+ name : "ConstBools" ,
668+ original : ConstBools ("k" , []bool {true , false }),
669+ expected : []bool {true , false },
670+ },
671+ {
672+ name : "Ints" ,
673+ original : Ints ("k" , []int {42 , 43 }),
674+ expected : []int64 {42 , 43 },
675+ },
676+ {
677+ name : "ConstInts" ,
678+ original : ConstInts ("k" , []int {42 , 43 }),
679+ expected : []int64 {42 , 43 },
680+ },
681+ {
682+ name : "Ints64" ,
683+ original : Ints64 ("k" , []int64 {42 , 43 }),
684+ expected : []int64 {42 , 43 },
685+ },
686+ {
687+ name : "ConstInts64" ,
688+ original : ConstInts64 ("k" , []int64 {42 , 43 }),
689+ expected : []int64 {42 , 43 },
690+ },
691+ {
692+ name : "Ints32" ,
693+ original : Ints32 ("k" , []int32 {42 , 43 }),
694+ expected : []int32 {42 , 43 },
695+ },
696+ {
697+ name : "ConstInts32" ,
698+ original : ConstInts32 ("k" , []int32 {42 , 43 }),
699+ expected : []int32 {42 , 43 },
700+ },
701+ {
702+ name : "Ints16" ,
703+ original : Ints16 ("k" , []int16 {42 , 43 }),
704+ expected : []int16 {42 , 43 },
705+ },
706+ {
707+ name : "ConstInts16" ,
708+ original : ConstInts16 ("k" , []int16 {42 , 43 }),
709+ expected : []int16 {42 , 43 },
710+ },
711+ {
712+ name : "Ints8" ,
713+ original : Ints8 ("k" , []int8 {42 }),
714+ expected : []int8 {42 },
715+ },
716+ {
717+ name : "ConstInts8" ,
718+ original : ConstInts8 ("k" , []int8 {42 }),
719+ expected : []int8 {42 },
720+ },
721+ {
722+ name : "Uints" ,
723+ original : Uints ("k" , []uint {42 , 43 }),
724+ expected : []uint64 {42 , 43 },
725+ },
726+ {
727+ name : "ConstUints" ,
728+ original : ConstUints ("k" , []uint {42 , 43 }),
729+ expected : []uint64 {42 , 43 },
730+ },
731+ {
732+ name : "Uints64" ,
733+ original : Uints64 ("k" , []uint64 {42 , 43 }),
734+ expected : []uint64 {42 , 43 },
735+ },
736+ {
737+ name : "ConstUints64" ,
738+ original : ConstUints64 ("k" , []uint64 {42 , 43 }),
739+ expected : []uint64 {42 , 43 },
740+ },
741+ {
742+ name : "Uints32" ,
743+ original : Uints32 ("k" , []uint32 {42 , 43 }),
744+ expected : []uint32 {42 , 43 },
745+ },
746+ {
747+ name : "ConstUints32" ,
748+ original : ConstUints32 ("k" , []uint32 {42 , 43 }),
749+ expected : []uint32 {42 , 43 },
750+ },
751+ {
752+ name : "Uints16" ,
753+ original : Uints16 ("k" , []uint16 {42 , 43 }),
754+ expected : []uint16 {42 , 43 },
755+ },
756+ {
757+ name : "ConstUints16" ,
758+ original : ConstUints16 ("k" , []uint16 {42 , 43 }),
759+ expected : []uint16 {42 , 43 },
760+ },
761+ {
762+ name : "Uints8" ,
763+ original : Uints8 ("k" , []uint8 {42 }),
764+ expected : []uint8 {42 },
765+ },
766+ {
767+ name : "ConstUints8" ,
768+ original : ConstUints8 ("k" , []uint8 {42 }),
769+ expected : []uint8 {42 },
770+ },
771+ {
772+ name : "Floats64" ,
773+ original : Floats64 ("k" , []float64 {42 }),
774+ expected : []float64 {42 },
775+ },
776+ {
777+ name : "ConstFloats64" ,
778+ original : ConstFloats64 ("k" , []float64 {42 }),
779+ expected : []float64 {42 },
780+ },
781+ {
782+ name : "Floats32" ,
783+ original : Floats32 ("k" , []float32 {42 }),
784+ expected : []float32 {42 },
785+ },
786+ {
787+ name : "ConstFloats32" ,
788+ original : ConstFloats32 ("k" , []float32 {42 }),
789+ expected : []float32 {42 },
790+ },
791+ {
792+ name : "nil" ,
793+ original : Any ("k" , nil ),
794+ expected : nil ,
795+ },
796+ {
797+ name : "Bytes" ,
798+ original : Bytes ("k" , []byte {42 , 43 }),
799+ expected : []byte {42 , 43 },
800+ },
801+ {
802+ name : "ConstBytes" ,
803+ original : ConstBytes ("k" , []byte {42 , 43 }),
804+ expected : []byte {42 , 43 },
805+ },
806+ {
807+ name : "Error" ,
808+ original : NamedError ("k" , errors .New ("test" )),
809+ expected : errors .New ("test" ),
810+ },
811+ {
812+ name : "Time" ,
813+ original : Time ("k" , time .Date (2020 , 1 , 2 , 3 , 4 , 5 , 6 , time .UTC )),
814+ expected : time .Date (2020 , 1 , 2 , 3 , 4 , 5 , 6 , time .UTC ),
815+ },
816+ {
817+ name : "Duration" ,
818+ original : Duration ("k" , time .Minute ),
819+ expected : time .Minute ,
820+ },
821+ {
822+ name : "Stringer" ,
823+ original : Stringer ("k" , & testStringer {"stringer" }),
824+ expected : "stringer" ,
825+ },
826+ {
827+ name : "ConstStringer" ,
828+ original : ConstStringer ("k" , & testStringer {"stringer" }),
829+ expected : "stringer" ,
830+ },
831+ {
832+ name : "Stringer/Nil" ,
833+ original : Stringer ("k" , nil ),
834+ expected : "nil" , // FIXME
835+ },
836+ {
837+ name : "ConstStringer/Nil" ,
838+ original : ConstStringer ("k" , nil ),
839+ expected : "nil" , // FIXME
840+ },
841+ {
842+ name : "Array" ,
843+ original : Array ("k" , & testArrayEncoder {}),
844+ expected : & testArrayEncoder {},
845+ },
846+ {
847+ name : "Array/Nil" ,
848+ original : Array ("k" , nil ),
849+ expected : "nil" , // FIXME
850+ },
851+ {
852+ name : "Object" ,
853+ original : Object ("k" , & testObjectEncoder {}),
854+ expected : & testObjectEncoder {},
855+ },
856+ {
857+ name : "Object/Nil" ,
858+ original : Object ("k" , nil ),
859+ expected : "nil" , // FIXME
860+ },
861+ {
862+ name : "Object/Nil" ,
863+ original : Object ("k" , nil ),
864+ expected : "nil" , // FIXME
865+ },
866+ {
867+ name : "Any" ,
868+ original : Any ("k" , customStruct {42 }),
869+ expected : customStruct {42 },
870+ },
871+ }
872+
873+ for _ , c := range cases {
874+ t .Run (c .name , func (t * testing.T ) {
875+ e := newTestFieldEncoder ()
876+ c .original .Accept (e )
877+ assert .Equal (t , c .expected , e .result ["k" ])
878+ })
879+ }
880+
881+ }
0 commit comments