1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package swag
16
17 import (
18 "math"
19 "strconv"
20 "testing"
21
22 "github.com/stretchr/testify/assert"
23 "github.com/stretchr/testify/require"
24 )
25
26 func errMsg(f string) string {
27 const (
28 expectedQuote = "expected '"
29 errSuffix = "' to generate an error"
30 )
31
32 return expectedQuote + f + errSuffix
33 }
34
35
36
37 func TestConvertBool(t *testing.T) {
38 for k := range evaluatesAsTrue {
39 r, err := ConvertBool(k)
40 require.NoError(t, err)
41 assert.True(t, r)
42 }
43 for _, k := range []string{"a", "", "0", "false", "unchecked"} {
44 r, err := ConvertBool(k)
45 require.NoError(t, err)
46 assert.False(t, r)
47 }
48 }
49
50 func TestConvertFloat32(t *testing.T) {
51 validFloats := []float32{1.0, -1, math.MaxFloat32, math.SmallestNonzeroFloat32, 0, 5.494430303}
52 invalidFloats := []string{"a", strconv.FormatFloat(math.MaxFloat64, 'f', -1, 64), "true"}
53
54 for _, f := range validFloats {
55 c, err := ConvertFloat32(FormatFloat32(f))
56 require.NoError(t, err)
57 assert.InDelta(t, f, c, 1e-6)
58 }
59 for _, f := range invalidFloats {
60 _, err := ConvertFloat32(f)
61 require.Error(t, err, errMsg(f))
62 }
63 }
64
65 func TestConvertFloat64(t *testing.T) {
66 validFloats := []float64{1.0, -1, float64(math.MaxFloat32), float64(math.SmallestNonzeroFloat32), math.MaxFloat64, math.SmallestNonzeroFloat64, 0, 5.494430303}
67 invalidFloats := []string{"a", "true"}
68
69 for _, f := range validFloats {
70 c, err := ConvertFloat64(FormatFloat64(f))
71 require.NoError(t, err)
72 assert.InDelta(t, f, c, 1e-6)
73 }
74 for _, f := range invalidFloats {
75 _, err := ConvertFloat64(f)
76 require.Error(t, err, errMsg(f))
77 }
78 }
79
80 func TestConvertInt8(t *testing.T) {
81 validInts := []int8{0, 1, -1, math.MaxInt8, math.MinInt8}
82 invalidInts := []string{"1.233", "a", "false", strconv.FormatInt(int64(math.MaxInt64), 10)}
83
84 for _, f := range validInts {
85 c, err := ConvertInt8(FormatInt8(f))
86 require.NoError(t, err)
87 assert.EqualValues(t, f, c)
88 }
89 for _, f := range invalidInts {
90 _, err := ConvertInt8(f)
91 require.Error(t, err, errMsg(f))
92 }
93 }
94
95 func TestConvertInt16(t *testing.T) {
96 validInts := []int16{0, 1, -1, math.MaxInt8, math.MinInt8, math.MaxInt16, math.MinInt16}
97 invalidInts := []string{"1.233", "a", "false", strconv.FormatInt(int64(math.MaxInt64), 10)}
98
99 for _, f := range validInts {
100 c, err := ConvertInt16(FormatInt16(f))
101 require.NoError(t, err)
102 assert.EqualValues(t, f, c)
103 }
104 for _, f := range invalidInts {
105 _, err := ConvertInt16(f)
106 require.Error(t, err, errMsg(f))
107 }
108 }
109
110 func TestConvertInt32(t *testing.T) {
111 validInts := []int32{0, 1, -1, math.MaxInt8, math.MinInt8, math.MaxInt16, math.MinInt16, math.MinInt32, math.MaxInt32}
112 invalidInts := []string{"1.233", "a", "false", strconv.FormatInt(int64(math.MaxInt64), 10)}
113
114 for _, f := range validInts {
115 c, err := ConvertInt32(FormatInt32(f))
116 require.NoError(t, err)
117 assert.EqualValues(t, f, c)
118 }
119 for _, f := range invalidInts {
120 _, err := ConvertInt32(f)
121 require.Error(t, err, errMsg(f))
122 }
123 }
124
125 func TestConvertInt64(t *testing.T) {
126 validInts := []int64{0, 1, -1, math.MaxInt8, math.MinInt8, math.MaxInt16, math.MinInt16, math.MinInt32, math.MaxInt32, math.MaxInt64, math.MinInt64}
127 invalidInts := []string{"1.233", "a", "false"}
128
129 for _, f := range validInts {
130 c, err := ConvertInt64(FormatInt64(f))
131 require.NoError(t, err)
132 assert.EqualValues(t, f, c)
133 }
134 for _, f := range invalidInts {
135 _, err := ConvertInt64(f)
136 require.Error(t, err, errMsg(f))
137 }
138 }
139
140 func TestConvertUint8(t *testing.T) {
141 validInts := []uint8{0, 1, math.MaxUint8}
142 invalidInts := []string{"1.233", "a", "false", strconv.FormatUint(math.MaxUint64, 10)}
143
144 for _, f := range validInts {
145 c, err := ConvertUint8(FormatUint8(f))
146 require.NoError(t, err)
147 assert.EqualValues(t, f, c)
148 }
149 for _, f := range invalidInts {
150 _, err := ConvertUint8(f)
151 require.Error(t, err, errMsg(f))
152 }
153 }
154
155 func TestConvertUint16(t *testing.T) {
156 validUints := []uint16{0, 1, math.MaxUint8, math.MaxUint16}
157 invalidUints := []string{"1.233", "a", "false", strconv.FormatUint(math.MaxUint64, 10)}
158
159 for _, f := range validUints {
160 c, err := ConvertUint16(FormatUint16(f))
161 require.NoError(t, err)
162 assert.EqualValues(t, f, c)
163 }
164 for _, f := range invalidUints {
165 _, err := ConvertUint16(f)
166 require.Error(t, err, errMsg(f))
167 }
168 }
169
170 func TestConvertUint32(t *testing.T) {
171 validUints := []uint32{0, 1, math.MaxUint8, math.MaxUint16, math.MaxUint32}
172 invalidUints := []string{"1.233", "a", "false", strconv.FormatUint(math.MaxUint64, 10)}
173
174 for _, f := range validUints {
175 c, err := ConvertUint32(FormatUint32(f))
176 require.NoError(t, err)
177 assert.EqualValues(t, f, c)
178 }
179 for _, f := range invalidUints {
180 _, err := ConvertUint32(f)
181 require.Error(t, err, errMsg(f))
182 }
183 }
184
185 func TestConvertUint64(t *testing.T) {
186 validUints := []uint64{0, 1, math.MaxUint8, math.MaxUint16, math.MaxUint32, math.MaxUint64}
187 invalidUints := []string{"1.233", "a", "false"}
188
189 for _, f := range validUints {
190 c, err := ConvertUint64(FormatUint64(f))
191 require.NoError(t, err)
192 assert.EqualValues(t, f, c)
193 }
194 for _, f := range invalidUints {
195 _, err := ConvertUint64(f)
196 require.Error(t, err, errMsg(f))
197 }
198 }
199
200 func TestIsFloat64AJSONInteger(t *testing.T) {
201 assert.False(t, IsFloat64AJSONInteger(math.Inf(1)))
202 assert.False(t, IsFloat64AJSONInteger(maxJSONFloat+1))
203
204 assert.False(t, IsFloat64AJSONInteger(minJSONFloat-1))
205 assert.True(t, IsFloat64AJSONInteger(1.0))
206 assert.True(t, IsFloat64AJSONInteger(maxJSONFloat))
207 assert.True(t, IsFloat64AJSONInteger(minJSONFloat))
208 assert.True(t, IsFloat64AJSONInteger(1/0.01*67.15000001))
209 assert.False(t, IsFloat64AJSONInteger(math.SmallestNonzeroFloat64))
210 assert.True(t, IsFloat64AJSONInteger(math.SmallestNonzeroFloat64/2))
211 assert.True(t, IsFloat64AJSONInteger(math.SmallestNonzeroFloat64/3))
212 assert.True(t, IsFloat64AJSONInteger(math.SmallestNonzeroFloat64/4))
213 }
214
215 func TestFormatBool(t *testing.T) {
216 assert.Equal(t, "true", FormatBool(true))
217 assert.Equal(t, "false", FormatBool(false))
218 }
219
View as plain text