@@ -1129,7 +1129,7 @@ func TestDecodeAllTypes(t *testing.T) {
11291129 Equal (t , phones [1 ].Label , "label2" )
11301130}
11311131
1132- func TestDecoderPanics (t * testing.T ) {
1132+ func TestDecoderPanicsAndBadValues (t * testing.T ) {
11331133
11341134 type Phone struct {
11351135 Number string
@@ -1152,7 +1152,28 @@ func TestDecoderPanics(t *testing.T) {
11521152 PanicMatches (t , func () { decoder .Decode (& test , values ) }, "Invalid formatting for key 'Phone[0.Number' missing ']' bracket" )
11531153
11541154 i := 1
1155- PanicMatches (t , func () { decoder .Decode (i , values ) }, "interface must be a pointer" )
1155+ err := decoder .Decode (i , values )
1156+ NotEqual (t , err , nil )
1157+
1158+ _ , ok := err .(* InvalidDecoderError )
1159+ Equal (t , ok , true )
1160+ Equal (t , err .Error (), "form: Decode(non-pointer int)" )
1161+
1162+ err = decoder .Decode (nil , values )
1163+ NotEqual (t , err , nil )
1164+
1165+ _ , ok = err .(* InvalidDecoderError )
1166+ Equal (t , ok , true )
1167+ Equal (t , err .Error (), "form: Decode(nil)" )
1168+
1169+ var ts * TestError
1170+
1171+ err = decoder .Decode (ts , values )
1172+ NotEqual (t , err , nil )
1173+
1174+ _ , ok = err .(* InvalidDecoderError )
1175+ Equal (t , ok , true )
1176+ Equal (t , err .Error (), "form: Decode(nil *form.TestError)" )
11561177
11571178 values = url.Values {
11581179 "Phone0].Number" : []string {"1(111)111-1111" },
@@ -1357,7 +1378,12 @@ func TestDecoderInterface(t *testing.T) {
13571378
13581379 iface = i
13591380
1360- PanicMatches (t , func () { d .Decode (iface , values ) }, "interface must be a pointer" )
1381+ err = d .Decode (iface , values )
1382+ NotEqual (t , err , nil )
1383+
1384+ _ , ok := err .(* InvalidDecoderError )
1385+ Equal (t , ok , true )
1386+ Equal (t , err .Error (), "form: Decode(non-pointer int)" )
13611387
13621388 values = map [string ][]string {
13631389 "Value" : {"testVal" },
@@ -1377,5 +1403,10 @@ func TestDecoderInterface(t *testing.T) {
13771403
13781404 iface = tst
13791405
1380- PanicMatches (t , func () { d .Decode (iface , values ) }, "interface must be a pointer" )
1406+ err = d .Decode (iface , values )
1407+ NotEqual (t , err , nil )
1408+
1409+ _ , ok = err .(* InvalidDecoderError )
1410+ Equal (t , ok , true )
1411+ Equal (t , err .Error (), "form: Decode(non-pointer form.test)" )
13811412}
0 commit comments