github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/strutil/api_test.go (about) 1 package strutil_test 2 3 import ( 4 "reflect" 5 "testing" 6 "time" 7 8 "github.com/johnnyeven/libtools/strutil" 9 ) 10 11 type Stringer struct { 12 } 13 14 func (Stringer) String() string { 15 return "test" 16 } 17 18 func TestConvertToStr(t *testing.T) { 19 type args struct { 20 v interface{} 21 } 22 tests := []struct { 23 name string 24 args args 25 want string 26 wantErr bool 27 }{ 28 { 29 name: "string", 30 args: args{ 31 v: "abc", 32 }, 33 want: "abc", 34 wantErr: false, 35 }, 36 { 37 name: "int", 38 args: args{ 39 v: int(112), 40 }, 41 want: "112", 42 wantErr: false, 43 }, 44 { 45 name: "int8", 46 args: args{ 47 v: int8(12), 48 }, 49 want: "12", 50 wantErr: false, 51 }, 52 { 53 name: "int16", 54 args: args{ 55 v: int16(123), 56 }, 57 want: "123", 58 wantErr: false, 59 }, 60 { 61 name: "int32", 62 args: args{ 63 v: int32(456), 64 }, 65 want: "456", 66 wantErr: false, 67 }, 68 { 69 name: "int64", 70 args: args{ 71 v: int64(12390), 72 }, 73 want: "12390", 74 wantErr: false, 75 }, 76 { 77 name: "uint", 78 args: args{ 79 v: uint(12390), 80 }, 81 want: "12390", 82 wantErr: false, 83 }, 84 { 85 name: "uint8", 86 args: args{ 87 v: uint8(12), 88 }, 89 want: "12", 90 wantErr: false, 91 }, 92 { 93 name: "uint16", 94 args: args{ 95 v: uint16(12390), 96 }, 97 want: "12390", 98 wantErr: false, 99 }, 100 { 101 name: "uint32", 102 args: args{ 103 v: uint32(12390), 104 }, 105 want: "12390", 106 wantErr: false, 107 }, 108 { 109 name: "uint64", 110 args: args{ 111 v: uint64(12390), 112 }, 113 want: "12390", 114 wantErr: false, 115 }, 116 { 117 name: "bool", 118 args: args{ 119 v: true, 120 }, 121 want: "true", 122 wantErr: false, 123 }, 124 { 125 name: "stringer", 126 args: args{ 127 v: Stringer{}, 128 }, 129 want: "test", 130 wantErr: false, 131 }, 132 { 133 name: "float32", 134 args: args{ 135 v: float32(1.1), 136 }, 137 want: "1.1", 138 wantErr: false, 139 }, 140 { 141 name: "float64", 142 args: args{ 143 v: float64(1.11), 144 }, 145 want: "1.11", 146 wantErr: false, 147 }, 148 } 149 150 for _, tt := range tests { 151 got, err := strutil.ConvertToStr(tt.args.v) 152 if (err != nil) != tt.wantErr { 153 t.Errorf("%q. ConvertToStr() error = %v, wantErr %v", tt.name, err, tt.wantErr) 154 continue 155 } 156 if got != tt.want { 157 t.Errorf("%q. ConvertToStr() = %v, want %v", tt.name, got, tt.want) 158 } 159 } 160 } 161 162 func TestConvertFromStr(t *testing.T) { 163 var int8V int8 164 var uint8V uint8 165 var int16V int16 166 var uint16V uint16 167 var stringV string 168 var boolV bool 169 var float32V float32 170 var duration time.Duration 171 type args struct { 172 strValue string 173 v reflect.Value 174 } 175 tests := []struct { 176 name string 177 args args 178 wantErr bool 179 }{ 180 { 181 name: "int8", 182 args: args{ 183 strValue: "1", 184 v: reflect.ValueOf(&int8V), 185 }, 186 wantErr: false, 187 }, 188 { 189 name: "int8", 190 args: args{ 191 strValue: "100000000", 192 v: reflect.ValueOf(&int8V), 193 }, 194 wantErr: true, 195 }, 196 { 197 name: "int8", 198 args: args{ 199 strValue: "-1", 200 v: reflect.ValueOf(&int8V), 201 }, 202 wantErr: false, 203 }, 204 { 205 name: "int8", 206 args: args{ 207 strValue: "-1000000000", 208 v: reflect.ValueOf(&int8V), 209 }, 210 wantErr: true, 211 }, 212 { 213 name: "uint8", 214 args: args{ 215 strValue: "1", 216 v: reflect.ValueOf(&uint8V), 217 }, 218 wantErr: false, 219 }, 220 { 221 name: "uint8", 222 args: args{ 223 strValue: "-1", 224 v: reflect.ValueOf(&uint8V), 225 }, 226 wantErr: true, 227 }, 228 { 229 name: "uint8", 230 args: args{ 231 strValue: "10000000", 232 v: reflect.ValueOf(&uint8V), 233 }, 234 wantErr: true, 235 }, 236 { 237 name: "int16", 238 args: args{ 239 strValue: "32768", 240 v: reflect.ValueOf(&int16V), 241 }, 242 wantErr: true, 243 }, 244 { 245 name: "int16", 246 args: args{ 247 strValue: "-32769", 248 v: reflect.ValueOf(&int16V), 249 }, 250 wantErr: true, 251 }, 252 { 253 name: "int16", 254 args: args{ 255 strValue: "32767", 256 v: reflect.ValueOf(&int16V), 257 }, 258 wantErr: false, 259 }, 260 { 261 name: "uint16", 262 args: args{ 263 strValue: "65536", 264 v: reflect.ValueOf(&uint16V), 265 }, 266 wantErr: true, 267 }, 268 { 269 name: "uint16", 270 args: args{ 271 strValue: "-1", 272 v: reflect.ValueOf(&uint16V), 273 }, 274 wantErr: true, 275 }, 276 { 277 name: "uint16", 278 args: args{ 279 strValue: "65535", 280 v: reflect.ValueOf(&uint16V), 281 }, 282 wantErr: false, 283 }, 284 { 285 name: "string", 286 args: args{ 287 strValue: "abd-)123$123", 288 v: reflect.ValueOf(&stringV), 289 }, 290 wantErr: false, 291 }, 292 { 293 name: "bool", 294 args: args{ 295 strValue: "false", 296 v: reflect.ValueOf(&boolV), 297 }, 298 wantErr: false, 299 }, 300 { 301 name: "bool", 302 args: args{ 303 strValue: "False", 304 v: reflect.ValueOf(&boolV), 305 }, 306 wantErr: false, 307 }, 308 { 309 name: "bool", 310 args: args{ 311 strValue: "true", 312 v: reflect.ValueOf(&boolV), 313 }, 314 wantErr: false, 315 }, 316 { 317 name: "bool", 318 args: args{ 319 strValue: "True", 320 v: reflect.ValueOf(&boolV), 321 }, 322 wantErr: false, 323 }, 324 { 325 name: "float32", 326 args: args{ 327 strValue: "0.32", 328 v: reflect.ValueOf(&float32V), 329 }, 330 wantErr: false, 331 }, 332 { 333 name: "duration", 334 args: args{ 335 strValue: "30s", 336 v: reflect.ValueOf(&duration), 337 }, 338 wantErr: false, 339 }, 340 } 341 for _, tt := range tests { 342 if err := strutil.ConvertFromStr(tt.args.strValue, tt.args.v); (err != nil) != tt.wantErr { 343 t.Errorf("%q. ConvertFromStr() error = %v, wantErr %v", tt.name, err, tt.wantErr) 344 } 345 } 346 }