@@ -114,17 +114,23 @@ var conversionTests = []conversionTest{
114114 {s : 1.5 , d : & scanraw , wantraw : sql .RawBytes ("1.5" )},
115115
116116 // Strings to integers
117+ {s : "127" , d : & scanint8 , wantint : 127 },
118+ {s : "128" , d : & scanint8 , wanterr : `converting driver.Value type string ("128") to a int8: value out of range` },
119+ {s : "32767" , d : & scanint16 , wantint : 32767 },
120+ {s : "32768" , d : & scanint16 , wanterr : `converting driver.Value type string ("32768") to a int16: value out of range` },
121+ {s : "2147483647" , d : & scanint32 , wantint : 2147483647 },
122+ {s : "2147483648" , d : & scanint32 , wanterr : `converting driver.Value type string ("2147483648") to a int32: value out of range` },
117123 {s : "255" , d : & scanuint8 , wantuint : 255 },
118- {s : "256" , d : & scanuint8 , wanterr : " converting driver.Value type string (\ " 256\ " ) to a uint8: value out of range" },
124+ {s : "256" , d : & scanuint8 , wanterr : ` converting driver.Value type string ("256") to a uint8: value out of range` },
119125 {s : "256" , d : & scanuint16 , wantuint : 256 },
120126 {s : "-1" , d : & scanint , wantint : - 1 },
121- {s : "foo" , d : & scanint , wanterr : " converting driver.Value type string (\ " foo\ " ) to a int: invalid syntax" },
127+ {s : "foo" , d : & scanint , wanterr : ` converting driver.Value type string ("foo") to a int: invalid syntax` },
122128
123129 // int64 to smaller integers
124130 {s : int64 (5 ), d : & scanuint8 , wantuint : 5 },
125- {s : int64 (256 ), d : & scanuint8 , wanterr : " converting driver.Value type int64 (\ " 256\ " ) to a uint8: value out of range" },
131+ {s : int64 (256 ), d : & scanuint8 , wanterr : ` converting driver.Value type int64 ("256") to a uint8: value out of range` },
126132 {s : int64 (256 ), d : & scanuint16 , wantuint : 256 },
127- {s : int64 (65536 ), d : & scanuint16 , wanterr : " converting driver.Value type int64 (\ " 65536\ " ) to a uint16: value out of range" },
133+ {s : int64 (65536 ), d : & scanuint16 , wanterr : ` converting driver.Value type int64 ("65536") to a uint16: value out of range` },
128134
129135 // True bools
130136 {s : true , d : & scanbool , wantbool : true },
@@ -247,6 +253,27 @@ func TestConversions(t *testing.T) {
247253 errf ("want pointer to %v, got %v" , * ct .wantptr , intPtrValue (ct .d ))
248254 }
249255 }
256+ if len (ct .wantraw ) != 0 {
257+ s := fmt .Sprintf ("%v" , ct .s )
258+ if _ , ok := ct .s .([]byte ); ok {
259+ s = fmt .Sprintf ("%s" , ct .s )
260+ }
261+ if s != string (ct .wantraw ) {
262+ errf ("want %q, got: %s" , string (ct .wantraw ), s )
263+ }
264+ }
265+ if len (ct .wantbytes ) != 0 {
266+ s := fmt .Sprintf ("%v" , ct .s )
267+ if _ , ok := ct .s .([]byte ); ok {
268+ s = fmt .Sprintf ("%s" , ct .s )
269+ }
270+ if timeVal , ok := ct .s .(time.Time ); ok {
271+ s = timeVal .Format (time .RFC3339Nano )
272+ }
273+ if s != string (ct .wantbytes ) {
274+ errf ("want %q, got: %s" , string (ct .wantbytes ), s )
275+ }
276+ }
250277 if ifptr , ok := ct .d .(* interface {}); ok {
251278 if ! reflect .DeepEqual (ct .wantiface , scaniface ) {
252279 errf ("want interface %#v, got %#v" , ct .wantiface , scaniface )
@@ -267,14 +294,18 @@ func TestConversions(t *testing.T) {
267294
268295func TestNullString (t * testing.T ) {
269296 var ns sql.NullString
270- ConvertAssign (& ns , []byte ("foo" ))
297+ if err := ConvertAssign (& ns , []byte ("foo" )); err != nil {
298+ t .Error (err )
299+ }
271300 if ! ns .Valid {
272301 t .Errorf ("expecting not null" )
273302 }
274303 if ns .String != "foo" {
275304 t .Errorf ("expecting foo; got %q" , ns .String )
276305 }
277- ConvertAssign (& ns , nil )
306+ if err := ConvertAssign (& ns , nil ); err != nil {
307+ t .Error (err )
308+ }
278309 if ns .Valid {
279310 t .Errorf ("expecting null on nil" )
280311 }
@@ -290,8 +321,8 @@ type valueConverterTest struct {
290321}
291322
292323var valueConverterTests = []valueConverterTest {
293- {driver .DefaultParameterConverter , sql.NullString {"hi" , true }, "hi" , "" },
294- {driver .DefaultParameterConverter , sql.NullString {"" , false }, nil , "" },
324+ {driver .DefaultParameterConverter , sql.NullString {String : "hi" , Valid : true }, "hi" , "" },
325+ {driver .DefaultParameterConverter , sql.NullString {String : "" , Valid : false }, nil , "" },
295326}
296327
297328func TestValueConverters (t * testing.T ) {
0 commit comments