@@ -1187,39 +1187,42 @@ func newTestMultipartForm(parts []*testFormPart) (io.Reader, string, error) {
11871187}
11881188
11891189func TestRegisterAndUnregisterBodyDecoder (t * testing.T ) {
1190- var (
1191- contentType = "text/csv"
1192- decoder = func (body io.Reader , h http.Header , schema * openapi3.SchemaRef , encFn EncodingFn ) (interface {}, error ) {
1193- data , err := ioutil .ReadAll (body )
1194- if err != nil {
1195- return nil , err
1196- }
1197- var vv []interface {}
1198- for _ , v := range strings .Split (string (data ), "," ) {
1199- vv = append (vv , v )
1200- }
1201- return vv , nil
1190+ var decoder BodyDecoder
1191+ decoder = func (body io.Reader , h http.Header , schema * openapi3.SchemaRef , encFn EncodingFn ) (decoded interface {}, err error ) {
1192+ var data []byte
1193+ if data , err = ioutil .ReadAll (body ); err != nil {
1194+ return
12021195 }
1203- schema = openapi3 .NewArraySchema ().WithItems (openapi3 .NewStringSchema ()).NewRef ()
1204- encFn = func (string ) * openapi3.Encoding { return nil }
1205- body = strings .NewReader ("foo,bar" )
1206- want = []interface {}{"foo" , "bar" }
1207- wantErr = & ParseError {Kind : KindUnsupportedFormat }
1208- )
1196+ return strings .Split (string (data ), "," ), nil
1197+ }
1198+ contentType := "text/csv"
12091199 h := make (http.Header )
12101200 h .Set (headerCT , contentType )
12111201
1202+ originalDecoder := RegisteredBodyDecoder (contentType )
1203+ require .Nil (t , originalDecoder )
1204+
12121205 RegisterBodyDecoder (contentType , decoder )
1206+ require .Equal (t , fmt .Sprintf ("%v" , decoder ), fmt .Sprintf ("%v" , RegisteredBodyDecoder (contentType )))
1207+
1208+ body := strings .NewReader ("foo,bar" )
1209+ schema := openapi3 .NewArraySchema ().WithItems (openapi3 .NewStringSchema ()).NewRef ()
1210+ encFn := func (string ) * openapi3.Encoding { return nil }
12131211 got , err := decodeBody (body , h , schema , encFn )
12141212
12151213 require .NoError (t , err )
1216- require .Truef (t , reflect . DeepEqual ( got , want ), "got %v, want %v" , got , want )
1214+ require .Equal (t , [] string { "foo" , "bar" } , got )
12171215
12181216 UnregisterBodyDecoder (contentType )
1219- _ , err = decodeBody (body , h , schema , encFn )
12201217
1221- require .Error (t , err )
1222- require .Truef (t , matchParseError (err , wantErr ), "got error:\n %v\n want error:\n %v" , err , wantErr )
1218+ originalDecoder = RegisteredBodyDecoder (contentType )
1219+ require .Nil (t , originalDecoder )
1220+
1221+ _ , err = decodeBody (body , h , schema , encFn )
1222+ require .Equal (t , & ParseError {
1223+ Kind : KindUnsupportedFormat ,
1224+ Reason : prefixUnsupportedCT + ` "text/csv"` ,
1225+ }, err )
12231226}
12241227
12251228func matchParseError (got , want error ) bool {
0 commit comments