1 // Copyright © 2014 Steve Francia <spf@spf13.com>.
3 // Use of this source code is governed by an MIT-style
4 // license that can be found in the LICENSE file.
14 "github.com/stretchr/testify/assert"
17 func TestToUintE(t *testing.T) {
30 {uint16(8), 8, false},
31 {uint32(8), 8, false},
32 {uint64(8), 8, false},
33 {float32(8.31), 8, false},
34 {float64(8.31), 8, false},
45 {float32(-8.31), 0, true},
46 {float64(-8.31), 0, true},
49 {testing.T{}, 0, true},
52 for i, test := range tests {
53 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
55 v, err := ToUintE(test.input)
57 assert.Error(t, err, errmsg)
61 assert.NoError(t, err, errmsg)
62 assert.Equal(t, test.expect, v, errmsg)
65 v = ToUint(test.input)
66 assert.Equal(t, test.expect, v, errmsg)
70 func TestToUint64E(t *testing.T) {
83 {uint16(8), 8, false},
84 {uint32(8), 8, false},
85 {uint64(8), 8, false},
86 {float32(8.31), 8, false},
87 {float64(8.31), 8, false},
98 {float32(-8.31), 0, true},
99 {float64(-8.31), 0, true},
102 {testing.T{}, 0, true},
105 for i, test := range tests {
106 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
108 v, err := ToUint64E(test.input)
110 assert.Error(t, err, errmsg)
114 assert.NoError(t, err, errmsg)
115 assert.Equal(t, test.expect, v, errmsg)
118 v = ToUint64(test.input)
119 assert.Equal(t, test.expect, v, errmsg)
123 func TestToUint32E(t *testing.T) {
131 {int16(8), 8, false},
132 {int32(8), 8, false},
133 {int64(8), 8, false},
135 {uint8(8), 8, false},
136 {uint16(8), 8, false},
137 {uint32(8), 8, false},
138 {uint64(8), 8, false},
139 {float32(8.31), 8, false},
140 {float64(8.31), 8, false},
147 {int16(-8), 0, true},
148 {int32(-8), 0, true},
149 {int64(-8), 0, true},
150 {float32(-8.31), 0, true},
151 {float64(-8.31), 0, true},
155 {testing.T{}, 0, true},
158 for i, test := range tests {
159 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
161 v, err := ToUint32E(test.input)
163 assert.Error(t, err, errmsg)
167 assert.NoError(t, err, errmsg)
168 assert.Equal(t, test.expect, v, errmsg)
171 v = ToUint32(test.input)
172 assert.Equal(t, test.expect, v, errmsg)
176 func TestToUint16E(t *testing.T) {
184 {int16(8), 8, false},
185 {int32(8), 8, false},
186 {int64(8), 8, false},
188 {uint8(8), 8, false},
189 {uint16(8), 8, false},
190 {uint32(8), 8, false},
191 {uint64(8), 8, false},
192 {float32(8.31), 8, false},
193 {float64(8.31), 8, false},
201 {int16(-8), 0, true},
202 {int32(-8), 0, true},
203 {int64(-8), 0, true},
204 {float32(-8.31), 0, true},
205 {float64(-8.31), 0, true},
208 {testing.T{}, 0, true},
211 for i, test := range tests {
212 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
214 v, err := ToUint16E(test.input)
216 assert.Error(t, err, errmsg)
220 assert.NoError(t, err, errmsg)
221 assert.Equal(t, test.expect, v, errmsg)
224 v = ToUint16(test.input)
225 assert.Equal(t, test.expect, v, errmsg)
229 func TestToUint8E(t *testing.T) {
237 {int16(8), 8, false},
238 {int32(8), 8, false},
239 {int64(8), 8, false},
241 {uint8(8), 8, false},
242 {uint16(8), 8, false},
243 {uint32(8), 8, false},
244 {uint64(8), 8, false},
245 {float32(8.31), 8, false},
246 {float64(8.31), 8, false},
254 {int16(-8), 0, true},
255 {int32(-8), 0, true},
256 {int64(-8), 0, true},
257 {float32(-8.31), 0, true},
258 {float64(-8.31), 0, true},
261 {testing.T{}, 0, true},
264 for i, test := range tests {
265 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
267 v, err := ToUint8E(test.input)
269 assert.Error(t, err, errmsg)
273 assert.NoError(t, err, errmsg)
274 assert.Equal(t, test.expect, v, errmsg)
277 v = ToUint8(test.input)
278 assert.Equal(t, test.expect, v, errmsg)
282 func TestToIntE(t *testing.T) {
290 {int16(8), 8, false},
291 {int32(8), 8, false},
292 {int64(8), 8, false},
294 {uint8(8), 8, false},
295 {uint16(8), 8, false},
296 {uint32(8), 8, false},
297 {uint64(8), 8, false},
298 {float32(8.31), 8, false},
299 {float64(8.31), 8, false},
306 {testing.T{}, 0, true},
309 for i, test := range tests {
310 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
312 v, err := ToIntE(test.input)
314 assert.Error(t, err, errmsg)
318 assert.NoError(t, err, errmsg)
319 assert.Equal(t, test.expect, v, errmsg)
322 v = ToInt(test.input)
323 assert.Equal(t, test.expect, v, errmsg)
327 func TestToInt64E(t *testing.T) {
335 {int16(8), 8, false},
336 {int32(8), 8, false},
337 {int64(8), 8, false},
339 {uint8(8), 8, false},
340 {uint16(8), 8, false},
341 {uint32(8), 8, false},
342 {uint64(8), 8, false},
343 {float32(8.31), 8, false},
344 {float64(8.31), 8, false},
351 {testing.T{}, 0, true},
354 for i, test := range tests {
355 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
357 v, err := ToInt64E(test.input)
359 assert.Error(t, err, errmsg)
363 assert.NoError(t, err, errmsg)
364 assert.Equal(t, test.expect, v, errmsg)
367 v = ToInt64(test.input)
368 assert.Equal(t, test.expect, v, errmsg)
372 func TestToInt32E(t *testing.T) {
380 {int16(8), 8, false},
381 {int32(8), 8, false},
382 {int64(8), 8, false},
384 {uint8(8), 8, false},
385 {uint16(8), 8, false},
386 {uint32(8), 8, false},
387 {uint64(8), 8, false},
388 {float32(8.31), 8, false},
389 {float64(8.31), 8, false},
396 {testing.T{}, 0, true},
399 for i, test := range tests {
400 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
402 v, err := ToInt32E(test.input)
404 assert.Error(t, err, errmsg)
408 assert.NoError(t, err, errmsg)
409 assert.Equal(t, test.expect, v, errmsg)
412 v = ToInt32(test.input)
413 assert.Equal(t, test.expect, v, errmsg)
417 func TestToInt16E(t *testing.T) {
425 {int16(8), 8, false},
426 {int32(8), 8, false},
427 {int64(8), 8, false},
429 {uint8(8), 8, false},
430 {uint16(8), 8, false},
431 {uint32(8), 8, false},
432 {uint64(8), 8, false},
433 {float32(8.31), 8, false},
434 {float64(8.31), 8, false},
441 {testing.T{}, 0, true},
444 for i, test := range tests {
445 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
447 v, err := ToInt16E(test.input)
449 assert.Error(t, err, errmsg)
453 assert.NoError(t, err, errmsg)
454 assert.Equal(t, test.expect, v, errmsg)
457 v = ToInt16(test.input)
458 assert.Equal(t, test.expect, v, errmsg)
462 func TestToInt8E(t *testing.T) {
470 {int16(8), 8, false},
471 {int32(8), 8, false},
472 {int64(8), 8, false},
474 {uint8(8), 8, false},
475 {uint16(8), 8, false},
476 {uint32(8), 8, false},
477 {uint64(8), 8, false},
478 {float32(8.31), 8, false},
479 {float64(8.31), 8, false},
486 {testing.T{}, 0, true},
489 for i, test := range tests {
490 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
492 v, err := ToInt8E(test.input)
494 assert.Error(t, err, errmsg)
498 assert.NoError(t, err, errmsg)
499 assert.Equal(t, test.expect, v, errmsg)
502 v = ToInt8(test.input)
503 assert.Equal(t, test.expect, v, errmsg)
507 func TestToFloat64E(t *testing.T) {
515 {int16(8), 8, false},
516 {int32(8), 8, false},
517 {int64(8), 8, false},
519 {uint8(8), 8, false},
520 {uint16(8), 8, false},
521 {uint32(8), 8, false},
522 {uint64(8), 8, false},
523 {float32(8), 8, false},
524 {float64(8.31), 8.31, false},
530 {testing.T{}, 0, true},
533 for i, test := range tests {
534 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
536 v, err := ToFloat64E(test.input)
538 assert.Error(t, err, errmsg)
542 assert.NoError(t, err, errmsg)
543 assert.Equal(t, test.expect, v, errmsg)
546 v = ToFloat64(test.input)
547 assert.Equal(t, test.expect, v, errmsg)
551 func TestToFloat32E(t *testing.T) {
559 {int16(8), 8, false},
560 {int32(8), 8, false},
561 {int64(8), 8, false},
563 {uint8(8), 8, false},
564 {uint16(8), 8, false},
565 {uint32(8), 8, false},
566 {uint64(8), 8, false},
567 {float32(8.31), 8.31, false},
568 {float64(8.31), 8.31, false},
574 {testing.T{}, 0, true},
577 for i, test := range tests {
578 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
580 v, err := ToFloat32E(test.input)
582 assert.Error(t, err, errmsg)
586 assert.NoError(t, err, errmsg)
587 assert.Equal(t, test.expect, v, errmsg)
590 v = ToFloat32(test.input)
591 assert.Equal(t, test.expect, v, errmsg)
595 func TestToStringE(t *testing.T) {
606 {int(8), "8", false},
607 {int8(8), "8", false},
608 {int16(8), "8", false},
609 {int32(8), "8", false},
610 {int64(8), "8", false},
611 {uint(8), "8", false},
612 {uint8(8), "8", false},
613 {uint16(8), "8", false},
614 {uint32(8), "8", false},
615 {uint64(8), "8", false},
616 {float32(8.31), "8.31", false},
617 {float64(8.31), "8.31", false},
618 {true, "true", false},
619 {false, "false", false},
621 {[]byte("one time"), "one time", false},
622 {"one more time", "one more time", false},
623 {template.HTML("one time"), "one time", false},
624 {template.URL("http://somehost.foo"), "http://somehost.foo", false},
625 {template.JS("(1+2)"), "(1+2)", false},
626 {template.CSS("a"), "a", false},
627 {template.HTMLAttr("a"), "a", false},
629 {testing.T{}, "", true},
633 for i, test := range tests {
634 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
636 v, err := ToStringE(test.input)
638 assert.Error(t, err, errmsg)
642 assert.NoError(t, err, errmsg)
643 assert.Equal(t, test.expect, v, errmsg)
646 v = ToString(test.input)
647 assert.Equal(t, test.expect, v, errmsg)
655 func (x foo) String() string {
659 func TestStringerToString(t *testing.T) {
662 assert.Equal(t, "bar", ToString(x))
669 func (x fu) Error() string {
673 func TestErrorToString(t *testing.T) {
676 assert.Equal(t, "bar", ToString(x))
679 func TestStringMapStringSliceE(t *testing.T) {
680 // ToStringMapString inputs/outputs
681 var stringMapString = map[string]string{"key 1": "value 1", "key 2": "value 2", "key 3": "value 3"}
682 var stringMapInterface = map[string]interface{}{"key 1": "value 1", "key 2": "value 2", "key 3": "value 3"}
683 var interfaceMapString = map[interface{}]string{"key 1": "value 1", "key 2": "value 2", "key 3": "value 3"}
684 var interfaceMapInterface = map[interface{}]interface{}{"key 1": "value 1", "key 2": "value 2", "key 3": "value 3"}
686 // ToStringMapStringSlice inputs/outputs
687 var stringMapStringSlice = map[string][]string{"key 1": {"value 1", "value 2", "value 3"}, "key 2": {"value 1", "value 2", "value 3"}, "key 3": {"value 1", "value 2", "value 3"}}
688 var stringMapInterfaceSlice = map[string][]interface{}{"key 1": {"value 1", "value 2", "value 3"}, "key 2": {"value 1", "value 2", "value 3"}, "key 3": {"value 1", "value 2", "value 3"}}
689 var stringMapInterfaceInterfaceSlice = map[string]interface{}{"key 1": []interface{}{"value 1", "value 2", "value 3"}, "key 2": []interface{}{"value 1", "value 2", "value 3"}, "key 3": []interface{}{"value 1", "value 2", "value 3"}}
690 var stringMapStringSingleSliceFieldsResult = map[string][]string{"key 1": {"value", "1"}, "key 2": {"value", "2"}, "key 3": {"value", "3"}}
691 var interfaceMapStringSlice = map[interface{}][]string{"key 1": {"value 1", "value 2", "value 3"}, "key 2": {"value 1", "value 2", "value 3"}, "key 3": {"value 1", "value 2", "value 3"}}
692 var interfaceMapInterfaceSlice = map[interface{}][]interface{}{"key 1": {"value 1", "value 2", "value 3"}, "key 2": {"value 1", "value 2", "value 3"}, "key 3": {"value 1", "value 2", "value 3"}}
694 var stringMapStringSliceMultiple = map[string][]string{"key 1": {"value 1", "value 2", "value 3"}, "key 2": {"value 1", "value 2", "value 3"}, "key 3": {"value 1", "value 2", "value 3"}}
695 var stringMapStringSliceSingle = map[string][]string{"key 1": {"value 1"}, "key 2": {"value 2"}, "key 3": {"value 3"}}
697 var stringMapInterface1 = map[string]interface{}{"key 1": []string{"value 1"}, "key 2": []string{"value 2"}}
698 var stringMapInterfaceResult1 = map[string][]string{"key 1": {"value 1"}, "key 2": {"value 2"}}
706 expect map[string][]string
709 {stringMapStringSlice, stringMapStringSlice, false},
710 {stringMapInterfaceSlice, stringMapStringSlice, false},
711 {stringMapInterfaceInterfaceSlice, stringMapStringSlice, false},
712 {stringMapStringSliceMultiple, stringMapStringSlice, false},
713 {stringMapStringSliceMultiple, stringMapStringSlice, false},
714 {stringMapString, stringMapStringSliceSingle, false},
715 {stringMapInterface, stringMapStringSliceSingle, false},
716 {stringMapInterface1, stringMapInterfaceResult1, false},
717 {interfaceMapStringSlice, stringMapStringSlice, false},
718 {interfaceMapInterfaceSlice, stringMapStringSlice, false},
719 {interfaceMapString, stringMapStringSingleSliceFieldsResult, false},
720 {interfaceMapInterface, stringMapStringSingleSliceFieldsResult, false},
723 {testing.T{}, nil, true},
724 {map[interface{}]interface{}{"foo": testing.T{}}, nil, true},
725 {map[interface{}]interface{}{Key{"foo"}: "bar"}, nil, true}, // ToStringE(Key{"foo"}) should fail
728 for i, test := range tests {
729 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
731 v, err := ToStringMapStringSliceE(test.input)
733 assert.Error(t, err, errmsg)
737 assert.NoError(t, err, errmsg)
738 assert.Equal(t, test.expect, v, errmsg)
741 v = ToStringMapStringSlice(test.input)
742 assert.Equal(t, test.expect, v, errmsg)
746 func TestToStringMapE(t *testing.T) {
749 expect map[string]interface{}
752 {map[interface{}]interface{}{"tag": "tags", "group": "groups"}, map[string]interface{}{"tag": "tags", "group": "groups"}, false},
753 {map[string]interface{}{"tag": "tags", "group": "groups"}, map[string]interface{}{"tag": "tags", "group": "groups"}, false},
756 {testing.T{}, nil, true},
759 for i, test := range tests {
760 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
762 v, err := ToStringMapE(test.input)
764 assert.Error(t, err, errmsg)
768 assert.NoError(t, err, errmsg)
769 assert.Equal(t, test.expect, v, errmsg)
772 v = ToStringMap(test.input)
773 assert.Equal(t, test.expect, v, errmsg)
777 func TestToStringMapBoolE(t *testing.T) {
780 expect map[string]bool
783 {map[interface{}]interface{}{"v1": true, "v2": false}, map[string]bool{"v1": true, "v2": false}, false},
784 {map[string]interface{}{"v1": true, "v2": false}, map[string]bool{"v1": true, "v2": false}, false},
785 {map[string]bool{"v1": true, "v2": false}, map[string]bool{"v1": true, "v2": false}, false},
788 {testing.T{}, nil, true},
791 for i, test := range tests {
792 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
794 v, err := ToStringMapBoolE(test.input)
796 assert.Error(t, err, errmsg)
800 assert.NoError(t, err, errmsg)
801 assert.Equal(t, test.expect, v, errmsg)
804 v = ToStringMapBool(test.input)
805 assert.Equal(t, test.expect, v, errmsg)
809 func TestToStringMapStringE(t *testing.T) {
810 var stringMapString = map[string]string{"key 1": "value 1", "key 2": "value 2", "key 3": "value 3"}
811 var stringMapInterface = map[string]interface{}{"key 1": "value 1", "key 2": "value 2", "key 3": "value 3"}
812 var interfaceMapString = map[interface{}]string{"key 1": "value 1", "key 2": "value 2", "key 3": "value 3"}
813 var interfaceMapInterface = map[interface{}]interface{}{"key 1": "value 1", "key 2": "value 2", "key 3": "value 3"}
817 expect map[string]string
820 {stringMapString, stringMapString, false},
821 {stringMapInterface, stringMapString, false},
822 {interfaceMapString, stringMapString, false},
823 {interfaceMapInterface, stringMapString, false},
826 {testing.T{}, nil, true},
829 for i, test := range tests {
830 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
832 v, err := ToStringMapStringE(test.input)
834 assert.Error(t, err, errmsg)
838 assert.NoError(t, err, errmsg)
839 assert.Equal(t, test.expect, v, errmsg)
842 v = ToStringMapString(test.input)
843 assert.Equal(t, test.expect, v, errmsg)
847 func TestToBoolSliceE(t *testing.T) {
853 {[]bool{true, false, true}, []bool{true, false, true}, false},
854 {[]interface{}{true, false, true}, []bool{true, false, true}, false},
855 {[]int{1, 0, 1}, []bool{true, false, true}, false},
856 {[]string{"true", "false", "true"}, []bool{true, false, true}, false},
859 {testing.T{}, nil, true},
860 {[]string{"foo", "bar"}, nil, true},
863 for i, test := range tests {
864 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
866 v, err := ToBoolSliceE(test.input)
868 assert.Error(t, err, errmsg)
872 assert.NoError(t, err, errmsg)
873 assert.Equal(t, test.expect, v, errmsg)
876 v = ToBoolSlice(test.input)
877 assert.Equal(t, test.expect, v, errmsg)
881 func TestToIntSliceE(t *testing.T) {
887 {[]int{1, 3}, []int{1, 3}, false},
888 {[]interface{}{1.2, 3.2}, []int{1, 3}, false},
889 {[]string{"2", "3"}, []int{2, 3}, false},
890 {[2]string{"2", "3"}, []int{2, 3}, false},
893 {testing.T{}, nil, true},
894 {[]string{"foo", "bar"}, nil, true},
897 for i, test := range tests {
898 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
900 v, err := ToIntSliceE(test.input)
902 assert.Error(t, err, errmsg)
906 assert.NoError(t, err, errmsg)
907 assert.Equal(t, test.expect, v, errmsg)
910 v = ToIntSlice(test.input)
911 assert.Equal(t, test.expect, v, errmsg)
915 func TestToSliceE(t *testing.T) {
921 {[]interface{}{1, 3}, []interface{}{1, 3}, false},
922 {[]map[string]interface{}{{"k1": 1}, {"k2": 2}}, []interface{}{map[string]interface{}{"k1": 1}, map[string]interface{}{"k2": 2}}, false},
925 {testing.T{}, nil, true},
928 for i, test := range tests {
929 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
931 v, err := ToSliceE(test.input)
933 assert.Error(t, err, errmsg)
937 assert.NoError(t, err, errmsg)
938 assert.Equal(t, test.expect, v, errmsg)
941 v = ToSlice(test.input)
942 assert.Equal(t, test.expect, v, errmsg)
946 func TestToStringSliceE(t *testing.T) {
952 {[]string{"a", "b"}, []string{"a", "b"}, false},
953 {[]interface{}{1, 3}, []string{"1", "3"}, false},
954 {interface{}(1), []string{"1"}, false},
957 {testing.T{}, nil, true},
960 for i, test := range tests {
961 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
963 v, err := ToStringSliceE(test.input)
965 assert.Error(t, err, errmsg)
969 assert.NoError(t, err, errmsg)
970 assert.Equal(t, test.expect, v, errmsg)
973 v = ToStringSlice(test.input)
974 assert.Equal(t, test.expect, v, errmsg)
978 func TestToDurationSliceE(t *testing.T) {
981 expect []time.Duration
984 {[]string{"1s", "1m"}, []time.Duration{time.Second, time.Minute}, false},
985 {[]int{1, 2}, []time.Duration{1, 2}, false},
986 {[]interface{}{1, 3}, []time.Duration{1, 3}, false},
989 {testing.T{}, nil, true},
992 for i, test := range tests {
993 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
995 v, err := ToDurationSliceE(test.input)
997 assert.Error(t, err, errmsg)
1001 assert.NoError(t, err, errmsg)
1002 assert.Equal(t, test.expect, v, errmsg)
1005 v = ToDurationSlice(test.input)
1006 assert.Equal(t, test.expect, v, errmsg)
1010 func TestToBoolE(t *testing.T) {
1017 {nil, false, false},
1018 {"false", false, false},
1019 {"FALSE", false, false},
1020 {"False", false, false},
1021 {"f", false, false},
1022 {"F", false, false},
1023 {false, false, false},
1025 {"true", true, false},
1026 {"TRUE", true, false},
1027 {"True", true, false},
1031 {true, true, false},
1035 {"test", false, true},
1036 {testing.T{}, false, true},
1039 for i, test := range tests {
1040 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
1042 v, err := ToBoolE(test.input)
1044 assert.Error(t, err, errmsg)
1048 assert.NoError(t, err, errmsg)
1049 assert.Equal(t, test.expect, v, errmsg)
1052 v = ToBool(test.input)
1053 assert.Equal(t, test.expect, v, errmsg)
1057 func BenchmarkTooBool(b *testing.B) {
1058 for i := 0; i < b.N; i++ {
1060 b.Fatal("ToBool returned false")
1065 func TestIndirectPointers(t *testing.T) {
1070 assert.Equal(t, ToInt(y), 13)
1071 assert.Equal(t, ToInt(z), 13)
1074 func TestToTimeEE(t *testing.T) {
1080 {"2009-11-10 23:00:00 +0000 UTC", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false}, // Time.String()
1081 {"Tue Nov 10 23:00:00 2009", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false}, // ANSIC
1082 {"Tue Nov 10 23:00:00 UTC 2009", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false}, // UnixDate
1083 {"Tue Nov 10 23:00:00 +0000 2009", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false}, // RubyDate
1084 {"10 Nov 09 23:00 UTC", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false}, // RFC822
1085 {"10 Nov 09 23:00 +0000", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false}, // RFC822Z
1086 {"Tuesday, 10-Nov-09 23:00:00 UTC", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false}, // RFC850
1087 {"Tue, 10 Nov 2009 23:00:00 UTC", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false}, // RFC1123
1088 {"Tue, 10 Nov 2009 23:00:00 +0000", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false}, // RFC1123Z
1089 {"2009-11-10T23:00:00Z", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false}, // RFC3339
1090 {"2009-11-10T23:00:00Z", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false}, // RFC3339Nano
1091 {"11:00PM", time.Date(0, 1, 1, 23, 0, 0, 0, time.UTC), false}, // Kitchen
1092 {"Nov 10 23:00:00", time.Date(0, 11, 10, 23, 0, 0, 0, time.UTC), false}, // Stamp
1093 {"Nov 10 23:00:00.000", time.Date(0, 11, 10, 23, 0, 0, 0, time.UTC), false}, // StampMilli
1094 {"Nov 10 23:00:00.000000", time.Date(0, 11, 10, 23, 0, 0, 0, time.UTC), false}, // StampMicro
1095 {"Nov 10 23:00:00.000000000", time.Date(0, 11, 10, 23, 0, 0, 0, time.UTC), false}, // StampNano
1096 {"2016-03-06 15:28:01-00:00", time.Date(2016, 3, 6, 15, 28, 1, 0, time.UTC), false}, // RFC3339 without T
1097 {"2016-03-06 15:28:01", time.Date(2016, 3, 6, 15, 28, 1, 0, time.UTC), false},
1098 {"2016-03-06 15:28:01 -0000", time.Date(2016, 3, 6, 15, 28, 1, 0, time.UTC), false},
1099 {"2016-03-06 15:28:01 -00:00", time.Date(2016, 3, 6, 15, 28, 1, 0, time.UTC), false},
1100 {"2006-01-02", time.Date(2006, 1, 2, 0, 0, 0, 0, time.UTC), false},
1101 {"02 Jan 2006", time.Date(2006, 1, 2, 0, 0, 0, 0, time.UTC), false},
1102 {1472574600, time.Date(2016, 8, 30, 16, 30, 0, 0, time.UTC), false},
1103 {int(1482597504), time.Date(2016, 12, 24, 16, 38, 24, 0, time.UTC), false},
1104 {int64(1234567890), time.Date(2009, 2, 13, 23, 31, 30, 0, time.UTC), false},
1105 {int32(1234567890), time.Date(2009, 2, 13, 23, 31, 30, 0, time.UTC), false},
1106 {uint(1482597504), time.Date(2016, 12, 24, 16, 38, 24, 0, time.UTC), false},
1107 {uint64(1234567890), time.Date(2009, 2, 13, 23, 31, 30, 0, time.UTC), false},
1108 {uint32(1234567890), time.Date(2009, 2, 13, 23, 31, 30, 0, time.UTC), false},
1109 {time.Date(2009, 2, 13, 23, 31, 30, 0, time.UTC), time.Date(2009, 2, 13, 23, 31, 30, 0, time.UTC), false},
1111 {"2006", time.Time{}, true},
1112 {testing.T{}, time.Time{}, true},
1115 for i, test := range tests {
1116 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
1118 v, err := ToTimeE(test.input)
1120 assert.Error(t, err, errmsg)
1124 assert.NoError(t, err, errmsg)
1125 assert.Equal(t, test.expect, v.UTC(), errmsg)
1128 v = ToTime(test.input)
1129 assert.Equal(t, test.expect, v.UTC(), errmsg)
1133 func TestToDurationE(t *testing.T) {
1134 var td time.Duration = 5
1138 expect time.Duration
1141 {time.Duration(5), td, false},
1142 {int(5), td, false},
1143 {int64(5), td, false},
1144 {int32(5), td, false},
1145 {int16(5), td, false},
1146 {int8(5), td, false},
1147 {uint(5), td, false},
1148 {uint64(5), td, false},
1149 {uint32(5), td, false},
1150 {uint16(5), td, false},
1151 {uint8(5), td, false},
1152 {float64(5), td, false},
1153 {float32(5), td, false},
1154 {string("5"), td, false},
1155 {string("5ns"), td, false},
1156 {string("5us"), time.Microsecond * td, false},
1157 {string("5µs"), time.Microsecond * td, false},
1158 {string("5ms"), time.Millisecond * td, false},
1159 {string("5s"), time.Second * td, false},
1160 {string("5m"), time.Minute * td, false},
1161 {string("5h"), time.Hour * td, false},
1164 {testing.T{}, 0, true},
1167 for i, test := range tests {
1168 errmsg := fmt.Sprintf("i = %d", i) // assert helper message
1170 v, err := ToDurationE(test.input)
1172 assert.Error(t, err, errmsg)
1176 assert.NoError(t, err, errmsg)
1177 assert.Equal(t, test.expect, v, errmsg)
1180 v = ToDuration(test.input)
1181 assert.Equal(t, test.expect, v, errmsg)