github.com/codingeasygo/util@v0.0.0-20231206062002-1ce2f004b7d9/converter/converter_test.go (about) 1 package converter 2 3 import ( 4 "bytes" 5 "fmt" 6 "strings" 7 "testing" 8 "time" 9 ) 10 11 type XTIME time.Time 12 13 func TestNumber(t *testing.T) { 14 type MyInt int 15 var m map[string]interface{} 16 //test all type 17 m = map[string]interface{}{} 18 m["abc"] = "123" 19 m["abc2"] = int(1) 20 m["myint"] = MyInt(1) 21 m["float32"] = float32(1) 22 m["float64"] = float64(1) 23 m["int"] = int(1) 24 m["int8"] = int8(1) 25 m["int16"] = int16(1) 26 m["int32"] = int32(1) 27 m["int64"] = int64(1) 28 m["uint"] = uint(1) 29 m["uint8"] = uint8(1) 30 m["uint16"] = uint16(1) 31 m["uint32"] = uint32(1) 32 m["uint64"] = uint64(1) 33 m["time"] = time.Now() 34 m["time1"] = time.Time{} 35 m["time2"] = XTIME(time.Now()) 36 m["time3"] = XTIME(time.Time{}) 37 for key, val := range m { 38 intA, err := IntVal(val) 39 if err != nil { 40 t.Error(key, err) 41 return 42 } 43 intB := Int(val) 44 if intA != intB { 45 t.Errorf("%v %v %v", key, intA, intB) 46 return 47 } 48 int64A, err := Int64Val(val) 49 if err != nil { 50 t.Error(key) 51 return 52 } 53 int64B := Int64(val) 54 if int64A != int64B { 55 t.Errorf("%v %v %v", key, int64A, int64B) 56 return 57 } 58 uint64A, err := Uint64Val(val) 59 if err != nil { 60 t.Error(key) 61 return 62 } 63 uint64B := Uint64(val) 64 if uint64A != uint64B { 65 t.Errorf("%v %v %v", key, uint64A, uint64B) 66 return 67 } 68 float64A, err := Float64Val(val) 69 if err != nil { 70 t.Error(key) 71 return 72 } 73 float64B := Float64(val) 74 if float64A != float64B { 75 t.Errorf("%v %v %v", key, float64A, float64B) 76 return 77 } 78 } 79 //test error 80 m = map[string]interface{}{} 81 m["nil"] = nil 82 m["abd"] = "a123" 83 m["str1"] = []byte("akkkk") 84 for key, val := range m { 85 _, err := IntVal(val) 86 if err == nil { 87 t.Error(key) 88 return 89 } 90 _, err = Int64Val(val) 91 if err == nil { 92 t.Error(key) 93 return 94 } 95 _, err = Uint64Val(val) 96 if err == nil { 97 t.Error(key) 98 return 99 } 100 _, err = Float64Val(val) 101 if err == nil { 102 t.Error(key) 103 return 104 } 105 } 106 } 107 108 func TestString(t *testing.T) { 109 var m map[string]interface{} 110 //test all type 111 m = map[string]interface{}{} 112 type myString string 113 var sbyte = []byte("akkkk") 114 var sstr = "a123" 115 m["abd"] = "a123" 116 m["my_str"] = myString("jdldklal") 117 m["str1"] = []byte("akkkk") 118 m["str2"] = &sbyte 119 m["str3"] = &sstr 120 m["other"] = 111 121 m["arr1"] = []int{1} 122 m["arr1"] = []interface{}{nil, nil} 123 for key, val := range m { 124 strA, err := StringVal(val) 125 if err != nil { 126 t.Error(key) 127 return 128 } 129 strB := String(val) 130 if strA != strB { 131 t.Errorf("%v %v %v", key, strA, strB) 132 return 133 } 134 } 135 //test error 136 m = map[string]interface{}{} 137 m["nil"] = nil 138 for key, val := range m { 139 _, err := StringVal(val) 140 if err == nil { 141 t.Error(key) 142 return 143 } 144 } 145 } 146 147 func TestArray(t *testing.T) { 148 var i0, i1 = 1, 2 149 var s0 = "1,2,3" 150 var m map[string]interface{} 151 //test all type 152 m = map[string]interface{}{} 153 m["str1"] = []byte("123") 154 m["str2"] = "1,2,3" 155 m["str3"] = &s0 156 m["arr1"] = []int{1, 1} 157 m["arr2"] = []interface{}{1, 1} 158 m["arr3"] = []*int{&i0, &i1} 159 m["arr4"] = []interface{}{&i0, &i1} 160 for key, val := range m { 161 _, err := ArrayVal(val) 162 if err != nil { 163 t.Error(key, err) 164 return 165 } 166 _, err = ArrayStringVal(val) 167 if err != nil { 168 t.Error(key, err) 169 return 170 } 171 _, err = ArrayIntVal(val) 172 if err != nil { 173 t.Error(key, err) 174 return 175 } 176 _, err = ArrayInt64Val(val) 177 if err != nil { 178 t.Error(key, err) 179 return 180 } 181 _, err = ArrayUint64Val(val) 182 if err != nil { 183 t.Error(key, err) 184 return 185 } 186 _, err = ArrayFloat64Val(val) 187 if err != nil { 188 t.Error(key, err) 189 return 190 } 191 } 192 //test error 193 var snil *string 194 var serr string = "xx" 195 m = map[string]interface{}{} 196 m["nil"] = nil 197 m["int"] = 1 198 m["str1"] = "xx" 199 m["str2"] = snil 200 m["str3"] = &serr 201 m["i1"] = []interface{}{"aaa"} 202 m["i2"] = []*testing.T{nil} 203 // m["nil"] = []interface{}{"1", snil} 204 for key, val := range m { 205 _, err := ArrayIntVal(val) 206 if err == nil { 207 t.Error(key) 208 return 209 } 210 _, err = ArrayInt64Val(val) 211 if err == nil { 212 t.Error(key) 213 return 214 } 215 _, err = ArrayUint64Val(val) 216 if err == nil { 217 t.Error(key) 218 return 219 } 220 _, err = ArrayFloat64Val(val) 221 if err == nil { 222 t.Error(key) 223 return 224 } 225 } 226 _, err := ArrayStringVal(nil) 227 if err == nil { 228 t.Error("xx") 229 return 230 } 231 _, err = ArrayStringVal(snil) 232 if err == nil { 233 t.Error("xx") 234 return 235 } 236 _, err = ArrayStringVal(t) 237 if err == nil { 238 t.Error("xx") 239 return 240 } 241 _, err = ArrayStringVal([]interface{}{nil}) 242 if err == nil { 243 t.Error("xx") 244 return 245 } 246 _, err = ArrayStringVal([]*testing.T{nil}) 247 if err == nil { 248 t.Error("xx") 249 return 250 } 251 _, err = ArrayValAll(t, true) 252 if err != nil { 253 t.Error("xx") 254 return 255 } 256 _, err = ArrayVal(nil) 257 if err == nil { 258 t.Error("xx") 259 return 260 } 261 _, err = ArrayVal(snil) 262 if err == nil { 263 t.Error("xx") 264 return 265 } 266 _, err = ArrayVal(t) 267 if err == nil { 268 t.Error("xx") 269 return 270 } 271 } 272 273 func TestArrayHaving(t *testing.T) { 274 iary := []int{1, 2, 3, 4, 5, 6} 275 if !ArrayHaving(iary, 2) { 276 t.Error("value exis in array.") 277 return 278 } 279 if ArrayHaving(iary, 8) { 280 t.Error("value not exis in array.") 281 return 282 } 283 // 284 fary := []float32{1.0, 2.0, 3.0, 4.0, 5.0} 285 if !ArrayHaving(fary, float32(1.0)) { 286 t.Error("value exis in array.") 287 return 288 } 289 if ArrayHaving(fary, float32(8.0)) { 290 t.Error("value not exis in array.") 291 return 292 } 293 // 294 sary := []string{"a", "b", "c", "d", "e", "f"} 295 if !ArrayHaving(sary, "c") { 296 t.Error("value exis in array.") 297 return 298 } 299 if ArrayHaving(sary, "g") { 300 t.Error("value not exis in array.") 301 return 302 } 303 ab := "" 304 if ArrayHaving(ab, 8) { 305 t.Error("value exis in array.") 306 return 307 } 308 } 309 310 func TestJSON(t *testing.T) { 311 v1 := JSON("v") 312 if v1 != "\"v\"" { 313 t.Error(v1) 314 return 315 } 316 v2 := JSON(TestJSON) 317 if !strings.Contains(v2, "unsupported") { 318 t.Error(v2) 319 return 320 } 321 } 322 323 func TestXML(t *testing.T) { 324 v1 := XML("v") 325 if v1 != "<string>v</string>" { 326 t.Error(v1) 327 return 328 } 329 v2 := XML(TestJSON) 330 if !strings.Contains(v2, "unsupported") { 331 t.Error(v2) 332 return 333 } 334 } 335 336 type xmlObj struct { 337 } 338 339 func TestUnmarshal(t *testing.T) { 340 var err error 341 _, err = UnmarshalJSON(bytes.NewBufferString("{}"), &map[string]interface{}{}) 342 if err != nil { 343 t.Error(err) 344 return 345 } 346 _, err = UnmarshalXML(bytes.NewBufferString("<xml></xml>"), &xmlObj{}) 347 if err != nil { 348 t.Error(err) 349 return 350 } 351 } 352 353 func TestPtr(t *testing.T) { 354 Int8Ptr(1) 355 Uint8Ptr(1) 356 Int16Ptr(1) 357 Uint16Ptr(1) 358 Int32Ptr(1) 359 Uint32Ptr(1) 360 IntPtr(1) 361 UintPtr(1) 362 Int64Ptr(1) 363 Uint64Ptr(1) 364 Float32Ptr(1) 365 Float64Ptr(1) 366 StringPtr("ss") 367 } 368 369 func TestJoin(t *testing.T) { 370 if Join([]int{}, ",") != "" { 371 t.Error("error") 372 return 373 } 374 if Join([]int{1, 2, 3}, ",") != "1,2,3" { 375 t.Error("error") 376 return 377 } 378 if Join([]*int{IntPtr(1), IntPtr(2), IntPtr(3)}, ",") != "1,2,3" { 379 t.Error("error") 380 return 381 } 382 if Join([]*string{StringPtr("1"), StringPtr("2"), StringPtr("3")}, ",") != "1,2,3" { 383 t.Error("error") 384 return 385 } 386 func() { 387 defer func() { 388 recover() 389 }() 390 Join("xx", ",") 391 }() 392 } 393 394 func TestJoinSafe(t *testing.T) { 395 if JoinSafe([]int{}, ",", JoinPolicyDefault) != "" { 396 t.Error("error") 397 return 398 } 399 if JoinSafe([]int{1, 2, 3}, ",", JoinPolicyDefault) != "1,2,3" { 400 t.Error("error") 401 return 402 } 403 if JoinSafe([]*int{IntPtr(1), IntPtr(2), IntPtr(3)}, ",", JoinPolicyDefault) != "1,2,3" { 404 t.Error("error") 405 return 406 } 407 if JoinSafe([]*int{IntPtr(1), IntPtr(2), nil, IntPtr(3)}, ",", JoinPolicyDefault) != "1,2,3" { 408 t.Error("error") 409 return 410 } 411 if JoinSafe([]*int{IntPtr(1), IntPtr(2), nil, IntPtr(3)}, ",", JoinPolicyDefault) != "1,2,3" { 412 t.Error("error") 413 return 414 } 415 if JoinSafe([]*int{IntPtr(1), IntPtr(2), nil, IntPtr(3)}, ",", JoinPolicyNilString) != "1,2,<nil>,3" { 416 t.Error(JoinSafe([]*int{IntPtr(1), IntPtr(2), nil, IntPtr(3)}, ",", JoinPolicyNilString)) 417 return 418 } 419 if JoinSafe([]*string{StringPtr("1"), StringPtr("2"), StringPtr("3")}, ",", JoinPolicyDefault) != "1,2,3" { 420 t.Error("error") 421 return 422 } 423 if JoinSafe([]*string{StringPtr("1"), StringPtr("2"), nil, StringPtr("3")}, ",", JoinPolicyDefault) != "1,2,3" { 424 t.Error("error") 425 return 426 } 427 if JoinSafe([]*string{StringPtr("1"), StringPtr("2"), nil, StringPtr("3")}, ",", JoinPolicyNilString) != "1,2,<nil>,3" { 428 t.Error("error") 429 return 430 } 431 if JoinSafe("xx", ",", JoinPolicyDefault) != "" { 432 t.Error("error") 433 return 434 } 435 if JoinSafe("xx", ",", JoinPolicyNotSliceString) != "xx" { 436 t.Error("error") 437 return 438 } 439 } 440 441 func TestIndirectString(t *testing.T) { 442 var x *int 443 fmt.Println(IndirectString(x)) 444 fmt.Println(IndirectString(nil)) 445 fmt.Println(IndirectString(1)) 446 }