@@ -235,6 +235,174 @@ func TestUint(t *testing.T) {
235235 Equal (t , test .NoURLValue , uint (0 ))
236236}
237237
238+ func TestString (t * testing.T ) {
239+
240+ type TestString struct {
241+ String string
242+ StringPtr * string
243+ StringArray []string
244+ StringPtrArray []* string
245+ StringArrayArray [][]string
246+ StringPtrArrayArray [][]* string
247+ StringMap map [string ]string
248+ StringPtrMap map [* string ]* string
249+ NoURLValue string
250+ }
251+
252+ values := url.Values {
253+ "String" : []string {"3" },
254+ "StringPtr" : []string {"3" },
255+ "StringArray" : []string {"1" , "2" , "3" },
256+ "StringPtrArray[0]" : []string {"1" },
257+ "StringPtrArray[2]" : []string {"3" },
258+ "StringArrayArray[0][0]" : []string {"1" },
259+ "StringArrayArray[0][2]" : []string {"3" },
260+ "StringArrayArray[2][0]" : []string {"1" },
261+ "StringPtrArrayArray[0][0]" : []string {"1" },
262+ "StringPtrArrayArray[0][2]" : []string {"3" },
263+ "StringPtrArrayArray[2][0]" : []string {"1" },
264+ "StringMap[1]" : []string {"3" },
265+ "StringPtrMap[1]" : []string {"3" },
266+ }
267+
268+ var test TestString
269+
270+ test .StringArray = make ([]string , 4 )
271+
272+ decoder := NewDecoder ()
273+ errs := decoder .Decode (& test , values )
274+ Equal (t , errs , nil )
275+
276+ Equal (t , test .String , "3" )
277+
278+ Equal (t , * test .StringPtr , "3" )
279+
280+ Equal (t , len (test .StringArray ), 4 )
281+ Equal (t , test .StringArray [0 ], "1" )
282+ Equal (t , test .StringArray [1 ], "2" )
283+ Equal (t , test .StringArray [2 ], "3" )
284+ Equal (t , test .StringArray [3 ], "" )
285+
286+ Equal (t , len (test .StringPtrArray ), 3 )
287+ Equal (t , * test .StringPtrArray [0 ], "1" )
288+ Equal (t , test .StringPtrArray [1 ], nil )
289+ Equal (t , * test .StringPtrArray [2 ], "3" )
290+
291+ Equal (t , len (test .StringArrayArray ), 3 )
292+ Equal (t , len (test .StringArrayArray [0 ]), 3 )
293+ Equal (t , len (test .StringArrayArray [1 ]), 0 )
294+ Equal (t , len (test .StringArrayArray [2 ]), 1 )
295+ Equal (t , test .StringArrayArray [0 ][0 ], "1" )
296+ Equal (t , test .StringArrayArray [0 ][1 ], "" )
297+ Equal (t , test .StringArrayArray [0 ][2 ], "3" )
298+ Equal (t , test .StringArrayArray [2 ][0 ], "1" )
299+
300+ Equal (t , len (test .StringPtrArrayArray ), 3 )
301+ Equal (t , len (test .StringPtrArrayArray [0 ]), 3 )
302+ Equal (t , len (test .StringPtrArrayArray [1 ]), 0 )
303+ Equal (t , len (test .StringPtrArrayArray [2 ]), 1 )
304+ Equal (t , * test .StringPtrArrayArray [0 ][0 ], "1" )
305+ Equal (t , test .StringPtrArrayArray [0 ][1 ], nil )
306+ Equal (t , * test .StringPtrArrayArray [0 ][2 ], "3" )
307+ Equal (t , * test .StringPtrArrayArray [2 ][0 ], "1" )
308+
309+ Equal (t , len (test .StringMap ), 1 )
310+ Equal (t , len (test .StringPtrMap ), 1 )
311+
312+ v , ok := test .StringMap ["1" ]
313+ Equal (t , ok , true )
314+ Equal (t , v , "3" )
315+
316+ Equal (t , test .NoURLValue , "" )
317+ }
318+
319+ func TestFloat (t * testing.T ) {
320+
321+ type TestFloat struct {
322+ Float32 float32
323+ Float32Ptr * float32
324+ Float64 float64
325+ Float64Ptr * float64
326+ Float32Array []float32
327+ Float32PtrArray []* float32
328+ Float32ArrayArray [][]float32
329+ Float32PtrArrayArray [][]* float32
330+ Float32Map map [float32 ]float32
331+ Float32PtrMap map [* float32 ]* float32
332+ NoURLValue float32
333+ }
334+
335+ values := url.Values {
336+ "Float32" : []string {"3.3" },
337+ "Float32Ptr" : []string {"3.3" },
338+ "Float64" : []string {"3.3" },
339+ "Float64Ptr" : []string {"3.3" },
340+ "Float32Array" : []string {"1.1" , "2.2" , "3.3" },
341+ "Float32PtrArray[0]" : []string {"1.1" },
342+ "Float32PtrArray[2]" : []string {"3.3" },
343+ "Float32ArrayArray[0][0]" : []string {"1.1" },
344+ "Float32ArrayArray[0][2]" : []string {"3.3" },
345+ "Float32ArrayArray[2][0]" : []string {"1.1" },
346+ "Float32PtrArrayArray[0][0]" : []string {"1.1" },
347+ "Float32PtrArrayArray[0][2]" : []string {"3.3" },
348+ "Float32PtrArrayArray[2][0]" : []string {"1.1" },
349+ "Float32Map[1.1]" : []string {"3.3" },
350+ "Float32PtrMap[1.1]" : []string {"3.3" },
351+ }
352+
353+ var test TestFloat
354+
355+ test .Float32Array = make ([]float32 , 4 )
356+
357+ decoder := NewDecoder ()
358+ errs := decoder .Decode (& test , values )
359+ Equal (t , errs , nil )
360+
361+ Equal (t , test .Float32 , float32 (3.3 ))
362+ Equal (t , test .Float64 , float64 (3.3 ))
363+
364+ Equal (t , * test .Float32Ptr , float32 (3.3 ))
365+ Equal (t , * test .Float64Ptr , float64 (3.3 ))
366+
367+ Equal (t , len (test .Float32Array ), 4 )
368+ Equal (t , test .Float32Array [0 ], float32 (1.1 ))
369+ Equal (t , test .Float32Array [1 ], float32 (2.2 ))
370+ Equal (t , test .Float32Array [2 ], float32 (3.3 ))
371+ Equal (t , test .Float32Array [3 ], float32 (0.0 ))
372+
373+ Equal (t , len (test .Float32PtrArray ), 3 )
374+ Equal (t , * test .Float32PtrArray [0 ], float32 (1.1 ))
375+ Equal (t , test .Float32PtrArray [1 ], nil )
376+ Equal (t , * test .Float32PtrArray [2 ], float32 (3.3 ))
377+
378+ Equal (t , len (test .Float32ArrayArray ), 3 )
379+ Equal (t , len (test .Float32ArrayArray [0 ]), 3 )
380+ Equal (t , len (test .Float32ArrayArray [1 ]), 0 )
381+ Equal (t , len (test .Float32ArrayArray [2 ]), 1 )
382+ Equal (t , test .Float32ArrayArray [0 ][0 ], float32 (1.1 ))
383+ Equal (t , test .Float32ArrayArray [0 ][1 ], float32 (0.0 ))
384+ Equal (t , test .Float32ArrayArray [0 ][2 ], float32 (3.3 ))
385+ Equal (t , test .Float32ArrayArray [2 ][0 ], float32 (1.1 ))
386+
387+ Equal (t , len (test .Float32PtrArrayArray ), 3 )
388+ Equal (t , len (test .Float32PtrArrayArray [0 ]), 3 )
389+ Equal (t , len (test .Float32PtrArrayArray [1 ]), 0 )
390+ Equal (t , len (test .Float32PtrArrayArray [2 ]), 1 )
391+ Equal (t , * test .Float32PtrArrayArray [0 ][0 ], float32 (1.1 ))
392+ Equal (t , test .Float32PtrArrayArray [0 ][1 ], nil )
393+ Equal (t , * test .Float32PtrArrayArray [0 ][2 ], float32 (3.3 ))
394+ Equal (t , * test .Float32PtrArrayArray [2 ][0 ], float32 (1.1 ))
395+
396+ Equal (t , len (test .Float32Map ), 1 )
397+ Equal (t , len (test .Float32PtrMap ), 1 )
398+
399+ v , ok := test .Float32Map [float32 (1.1 )]
400+ Equal (t , ok , true )
401+ Equal (t , v , float32 (3.3 ))
402+
403+ Equal (t , test .NoURLValue , float32 (0.0 ))
404+ }
405+
238406// func TestString(t *testing.T) {
239407
240408// type stringStruct struct {
0 commit comments