@@ -323,6 +323,72 @@ func TestMappingCollectionFormat(t *testing.T) {
323323 assert .Equal (t , [2 ]int {1 , 2 }, s .ArrayPipes )
324324}
325325
326+ func TestMappingCollectionFormatInvalid (t * testing.T ) {
327+ var s struct {
328+ SliceCsv []int `form:"slice_csv" collection_format:"xxx"`
329+ }
330+ err := mappingByPtr (& s , formSource {
331+ "slice_csv" : {"1,2" },
332+ }, "form" )
333+ require .Error (t , err )
334+
335+ var s2 struct {
336+ ArrayCsv [2 ]int `form:"array_csv" collection_format:"xxx"`
337+ }
338+ err = mappingByPtr (& s2 , formSource {
339+ "array_csv" : {"1,2" },
340+ }, "form" )
341+ require .Error (t , err )
342+ }
343+
344+ func TestMappingMultipleDefaultWithCollectionFormat (t * testing.T ) {
345+ var s struct {
346+ SliceMulti []int `form:",default=1;2;3" collection_format:"multi"`
347+ SliceCsv []int `form:",default=1;2;3" collection_format:"csv"`
348+ SliceSsv []int `form:",default=1 2 3" collection_format:"ssv"`
349+ SliceTsv []int `form:",default=1\t2\t3" collection_format:"tsv"`
350+ SlicePipes []int `form:",default=1|2|3" collection_format:"pipes"`
351+ ArrayMulti [2 ]int `form:",default=1;2" collection_format:"multi"`
352+ ArrayCsv [2 ]int `form:",default=1;2" collection_format:"csv"`
353+ ArraySsv [2 ]int `form:",default=1 2" collection_format:"ssv"`
354+ ArrayTsv [2 ]int `form:",default=1\t2" collection_format:"tsv"`
355+ ArrayPipes [2 ]int `form:",default=1|2" collection_format:"pipes"`
356+ SliceStringMulti []string `form:",default=1;2;3" collection_format:"multi"`
357+ SliceStringCsv []string `form:",default=1;2;3" collection_format:"csv"`
358+ SliceStringSsv []string `form:",default=1 2 3" collection_format:"ssv"`
359+ SliceStringTsv []string `form:",default=1\t2\t3" collection_format:"tsv"`
360+ SliceStringPipes []string `form:",default=1|2|3" collection_format:"pipes"`
361+ ArrayStringMulti [2 ]string `form:",default=1;2" collection_format:"multi"`
362+ ArrayStringCsv [2 ]string `form:",default=1;2" collection_format:"csv"`
363+ ArrayStringSsv [2 ]string `form:",default=1 2" collection_format:"ssv"`
364+ ArrayStringTsv [2 ]string `form:",default=1\t2" collection_format:"tsv"`
365+ ArrayStringPipes [2 ]string `form:",default=1|2" collection_format:"pipes"`
366+ }
367+ err := mappingByPtr (& s , formSource {}, "form" )
368+ require .NoError (t , err )
369+
370+ assert .Equal (t , []int {1 , 2 , 3 }, s .SliceMulti )
371+ assert .Equal (t , []int {1 , 2 , 3 }, s .SliceCsv )
372+ assert .Equal (t , []int {1 , 2 , 3 }, s .SliceSsv )
373+ assert .Equal (t , []int {1 , 2 , 3 }, s .SliceTsv )
374+ assert .Equal (t , []int {1 , 2 , 3 }, s .SlicePipes )
375+ assert .Equal (t , [2 ]int {1 , 2 }, s .ArrayMulti )
376+ assert .Equal (t , [2 ]int {1 , 2 }, s .ArrayCsv )
377+ assert .Equal (t , [2 ]int {1 , 2 }, s .ArraySsv )
378+ assert .Equal (t , [2 ]int {1 , 2 }, s .ArrayTsv )
379+ assert .Equal (t , [2 ]int {1 , 2 }, s .ArrayPipes )
380+ assert .Equal (t , []string {"1" , "2" , "3" }, s .SliceStringMulti )
381+ assert .Equal (t , []string {"1" , "2" , "3" }, s .SliceStringCsv )
382+ assert .Equal (t , []string {"1" , "2" , "3" }, s .SliceStringSsv )
383+ assert .Equal (t , []string {"1" , "2" , "3" }, s .SliceStringTsv )
384+ assert .Equal (t , []string {"1" , "2" , "3" }, s .SliceStringPipes )
385+ assert .Equal (t , [2 ]string {"1" , "2" }, s .ArrayStringMulti )
386+ assert .Equal (t , [2 ]string {"1" , "2" }, s .ArrayStringCsv )
387+ assert .Equal (t , [2 ]string {"1" , "2" }, s .ArrayStringSsv )
388+ assert .Equal (t , [2 ]string {"1" , "2" }, s .ArrayStringTsv )
389+ assert .Equal (t , [2 ]string {"1" , "2" }, s .ArrayStringPipes )
390+ }
391+
326392func TestMappingStructField (t * testing.T ) {
327393 var s struct {
328394 J struct {
0 commit comments