github.com/gogf/gf/v2@v2.7.4/errors/gerror/gerror_z_unit_test.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/gogf/gf. 6 7 package gerror_test 8 9 import ( 10 "errors" 11 "fmt" 12 "testing" 13 14 "github.com/gogf/gf/v2/errors/gcode" 15 "github.com/gogf/gf/v2/errors/gerror" 16 "github.com/gogf/gf/v2/internal/json" 17 "github.com/gogf/gf/v2/test/gtest" 18 ) 19 20 func nilError() error { 21 return nil 22 } 23 24 func Test_Nil(t *testing.T) { 25 gtest.C(t, func(t *gtest.T) { 26 t.Assert(gerror.New(""), nil) 27 t.Assert(gerror.Wrap(nilError(), "test"), nil) 28 }) 29 } 30 31 func Test_New(t *testing.T) { 32 gtest.C(t, func(t *gtest.T) { 33 err := gerror.New("1") 34 t.AssertNE(err, nil) 35 t.Assert(err.Error(), "1") 36 }) 37 gtest.C(t, func(t *gtest.T) { 38 err := gerror.Newf("%d", 1) 39 t.AssertNE(err, nil) 40 t.Assert(err.Error(), "1") 41 }) 42 gtest.C(t, func(t *gtest.T) { 43 err := gerror.NewSkip(1, "1") 44 t.AssertNE(err, nil) 45 t.Assert(err.Error(), "1") 46 }) 47 gtest.C(t, func(t *gtest.T) { 48 err := gerror.NewSkipf(1, "%d", 1) 49 t.AssertNE(err, nil) 50 t.Assert(err.Error(), "1") 51 }) 52 } 53 54 func Test_Wrap(t *testing.T) { 55 gtest.C(t, func(t *gtest.T) { 56 err := errors.New("1") 57 err = gerror.Wrap(err, "2") 58 err = gerror.Wrap(err, "3") 59 t.AssertNE(err, nil) 60 t.Assert(err.Error(), "3: 2: 1") 61 }) 62 gtest.C(t, func(t *gtest.T) { 63 err := gerror.New("1") 64 err = gerror.Wrap(err, "2") 65 err = gerror.Wrap(err, "3") 66 t.AssertNE(err, nil) 67 t.Assert(err.Error(), "3: 2: 1") 68 }) 69 gtest.C(t, func(t *gtest.T) { 70 err := gerror.New("1") 71 err = gerror.Wrap(err, "") 72 t.AssertNE(err, nil) 73 t.Assert(err.Error(), "1") 74 }) 75 } 76 77 func Test_Wrapf(t *testing.T) { 78 gtest.C(t, func(t *gtest.T) { 79 err := errors.New("1") 80 err = gerror.Wrapf(err, "%d", 2) 81 err = gerror.Wrapf(err, "%d", 3) 82 t.AssertNE(err, nil) 83 t.Assert(err.Error(), "3: 2: 1") 84 }) 85 gtest.C(t, func(t *gtest.T) { 86 err := gerror.New("1") 87 err = gerror.Wrapf(err, "%d", 2) 88 err = gerror.Wrapf(err, "%d", 3) 89 t.AssertNE(err, nil) 90 t.Assert(err.Error(), "3: 2: 1") 91 }) 92 gtest.C(t, func(t *gtest.T) { 93 err := gerror.New("1") 94 err = gerror.Wrapf(err, "") 95 t.AssertNE(err, nil) 96 t.Assert(err.Error(), "1") 97 }) 98 gtest.C(t, func(t *gtest.T) { 99 t.Assert(gerror.Wrapf(nil, ""), nil) 100 }) 101 } 102 103 func Test_WrapSkip(t *testing.T) { 104 gtest.C(t, func(t *gtest.T) { 105 t.Assert(gerror.WrapSkip(1, nil, "2"), nil) 106 err := errors.New("1") 107 err = gerror.WrapSkip(1, err, "2") 108 err = gerror.WrapSkip(1, err, "3") 109 t.AssertNE(err, nil) 110 t.Assert(err.Error(), "3: 2: 1") 111 }) 112 gtest.C(t, func(t *gtest.T) { 113 err := gerror.New("1") 114 err = gerror.WrapSkip(1, err, "2") 115 err = gerror.WrapSkip(1, err, "3") 116 t.AssertNE(err, nil) 117 t.Assert(err.Error(), "3: 2: 1") 118 }) 119 gtest.C(t, func(t *gtest.T) { 120 err := gerror.New("1") 121 err = gerror.WrapSkip(1, err, "") 122 t.AssertNE(err, nil) 123 t.Assert(err.Error(), "1") 124 }) 125 } 126 127 func Test_WrapSkipf(t *testing.T) { 128 gtest.C(t, func(t *gtest.T) { 129 t.Assert(gerror.WrapSkipf(1, nil, "2"), nil) 130 err := errors.New("1") 131 err = gerror.WrapSkipf(1, err, "2") 132 err = gerror.WrapSkipf(1, err, "3") 133 t.AssertNE(err, nil) 134 t.Assert(err.Error(), "3: 2: 1") 135 }) 136 gtest.C(t, func(t *gtest.T) { 137 err := gerror.New("1") 138 err = gerror.WrapSkipf(1, err, "2") 139 err = gerror.WrapSkipf(1, err, "3") 140 t.AssertNE(err, nil) 141 t.Assert(err.Error(), "3: 2: 1") 142 }) 143 gtest.C(t, func(t *gtest.T) { 144 err := gerror.New("1") 145 err = gerror.WrapSkipf(1, err, "") 146 t.AssertNE(err, nil) 147 t.Assert(err.Error(), "1") 148 }) 149 } 150 151 func Test_Cause(t *testing.T) { 152 gtest.C(t, func(t *gtest.T) { 153 t.Assert(gerror.Cause(nil), nil) 154 err := errors.New("1") 155 t.Assert(gerror.Cause(err), err) 156 }) 157 158 gtest.C(t, func(t *gtest.T) { 159 err := errors.New("1") 160 err = gerror.Wrap(err, "2") 161 err = gerror.Wrap(err, "3") 162 t.Assert(gerror.Cause(err), "1") 163 }) 164 165 gtest.C(t, func(t *gtest.T) { 166 err := gerror.New("1") 167 t.Assert(gerror.Cause(err), "1") 168 }) 169 170 gtest.C(t, func(t *gtest.T) { 171 err := gerror.New("1") 172 err = gerror.Wrap(err, "2") 173 err = gerror.Wrap(err, "3") 174 t.Assert(gerror.Cause(err), "1") 175 }) 176 177 gtest.C(t, func(t *gtest.T) { 178 t.Assert(gerror.Stack(nil), "") 179 err := errors.New("1") 180 t.Assert(gerror.Stack(err), err) 181 }) 182 183 gtest.C(t, func(t *gtest.T) { 184 var e *gerror.Error = nil 185 t.Assert(e.Cause(), nil) 186 }) 187 } 188 189 func Test_Format(t *testing.T) { 190 gtest.C(t, func(t *gtest.T) { 191 err := errors.New("1") 192 err = gerror.Wrap(err, "2") 193 err = gerror.Wrap(err, "3") 194 t.AssertNE(err, nil) 195 t.Assert(fmt.Sprintf("%s", err), "3: 2: 1") 196 t.Assert(fmt.Sprintf("%v", err), "3: 2: 1") 197 }) 198 199 gtest.C(t, func(t *gtest.T) { 200 err := gerror.New("1") 201 err = gerror.Wrap(err, "2") 202 err = gerror.Wrap(err, "3") 203 t.AssertNE(err, nil) 204 t.Assert(fmt.Sprintf("%s", err), "3: 2: 1") 205 t.Assert(fmt.Sprintf("%v", err), "3: 2: 1") 206 }) 207 208 gtest.C(t, func(t *gtest.T) { 209 err := gerror.New("1") 210 err = gerror.Wrap(err, "2") 211 err = gerror.Wrap(err, "3") 212 t.AssertNE(err, nil) 213 t.Assert(fmt.Sprintf("%-s", err), "3") 214 t.Assert(fmt.Sprintf("%-v", err), "3") 215 }) 216 } 217 218 func Test_Stack(t *testing.T) { 219 gtest.C(t, func(t *gtest.T) { 220 err := errors.New("1") 221 t.Assert(fmt.Sprintf("%+v", err), "1") 222 }) 223 224 gtest.C(t, func(t *gtest.T) { 225 err := errors.New("1") 226 err = gerror.Wrap(err, "2") 227 err = gerror.Wrap(err, "3") 228 t.AssertNE(err, nil) 229 // fmt.Printf("%+v", err) 230 }) 231 232 gtest.C(t, func(t *gtest.T) { 233 err := gerror.New("1") 234 t.AssertNE(fmt.Sprintf("%+v", err), "1") 235 // fmt.Printf("%+v", err) 236 }) 237 238 gtest.C(t, func(t *gtest.T) { 239 err := gerror.New("1") 240 err = gerror.Wrap(err, "2") 241 err = gerror.Wrap(err, "3") 242 t.AssertNE(err, nil) 243 // fmt.Printf("%+v", err) 244 }) 245 } 246 247 func Test_Current(t *testing.T) { 248 gtest.C(t, func(t *gtest.T) { 249 t.Assert(gerror.Current(nil), nil) 250 err := errors.New("1") 251 err = gerror.Wrap(err, "2") 252 err = gerror.Wrap(err, "3") 253 t.Assert(err.Error(), "3: 2: 1") 254 t.Assert(gerror.Current(err).Error(), "3") 255 }) 256 gtest.C(t, func(t *gtest.T) { 257 var e *gerror.Error = nil 258 t.Assert(e.Current(), nil) 259 }) 260 } 261 262 func Test_Unwrap(t *testing.T) { 263 gtest.C(t, func(t *gtest.T) { 264 t.Assert(gerror.Unwrap(nil), nil) 265 err := errors.New("1") 266 err = gerror.Wrap(err, "2") 267 err = gerror.Wrap(err, "3") 268 t.Assert(err.Error(), "3: 2: 1") 269 270 err = gerror.Unwrap(err) 271 t.Assert(err.Error(), "2: 1") 272 273 err = gerror.Unwrap(err) 274 t.Assert(err.Error(), "1") 275 276 err = gerror.Unwrap(err) 277 t.AssertNil(err) 278 }) 279 gtest.C(t, func(t *gtest.T) { 280 var e *gerror.Error = nil 281 t.Assert(e.Unwrap(), nil) 282 }) 283 } 284 285 func Test_Code(t *testing.T) { 286 gtest.C(t, func(t *gtest.T) { 287 err := errors.New("123") 288 t.Assert(gerror.Code(err), -1) 289 t.Assert(err.Error(), "123") 290 }) 291 gtest.C(t, func(t *gtest.T) { 292 err := gerror.NewCode(gcode.CodeUnknown, "123") 293 t.Assert(gerror.Code(err), gcode.CodeUnknown) 294 t.Assert(err.Error(), "123") 295 }) 296 gtest.C(t, func(t *gtest.T) { 297 err := gerror.NewCodef(gcode.New(1, "", nil), "%s", "123") 298 t.Assert(gerror.Code(err).Code(), 1) 299 t.Assert(err.Error(), "123") 300 }) 301 gtest.C(t, func(t *gtest.T) { 302 err := gerror.NewCodeSkip(gcode.New(1, "", nil), 0, "123") 303 t.Assert(gerror.Code(err).Code(), 1) 304 t.Assert(err.Error(), "123") 305 }) 306 gtest.C(t, func(t *gtest.T) { 307 err := gerror.NewCodeSkipf(gcode.New(1, "", nil), 0, "%s", "123") 308 t.Assert(gerror.Code(err).Code(), 1) 309 t.Assert(err.Error(), "123") 310 }) 311 gtest.C(t, func(t *gtest.T) { 312 t.Assert(gerror.WrapCode(gcode.New(1, "", nil), nil, "3"), nil) 313 err := errors.New("1") 314 err = gerror.Wrap(err, "2") 315 err = gerror.WrapCode(gcode.New(1, "", nil), err, "3") 316 t.Assert(gerror.Code(err).Code(), 1) 317 t.Assert(err.Error(), "3: 2: 1") 318 }) 319 gtest.C(t, func(t *gtest.T) { 320 t.Assert(gerror.WrapCodef(gcode.New(1, "", nil), nil, "%s", "3"), nil) 321 err := errors.New("1") 322 err = gerror.Wrap(err, "2") 323 err = gerror.WrapCodef(gcode.New(1, "", nil), err, "%s", "3") 324 t.Assert(gerror.Code(err).Code(), 1) 325 t.Assert(err.Error(), "3: 2: 1") 326 }) 327 gtest.C(t, func(t *gtest.T) { 328 t.Assert(gerror.WrapCodeSkip(gcode.New(1, "", nil), 100, nil, "3"), nil) 329 err := errors.New("1") 330 err = gerror.Wrap(err, "2") 331 err = gerror.WrapCodeSkip(gcode.New(1, "", nil), 100, err, "3") 332 t.Assert(gerror.Code(err).Code(), 1) 333 t.Assert(err.Error(), "3: 2: 1") 334 }) 335 gtest.C(t, func(t *gtest.T) { 336 t.Assert(gerror.WrapCodeSkipf(gcode.New(1, "", nil), 100, nil, "%s", "3"), nil) 337 err := errors.New("1") 338 err = gerror.Wrap(err, "2") 339 err = gerror.WrapCodeSkipf(gcode.New(1, "", nil), 100, err, "%s", "3") 340 t.Assert(gerror.Code(err).Code(), 1) 341 t.Assert(err.Error(), "3: 2: 1") 342 }) 343 } 344 345 func TestError_Error(t *testing.T) { 346 gtest.C(t, func(t *gtest.T) { 347 var e *gerror.Error = nil 348 t.Assert(e.Error(), nil) 349 }) 350 } 351 352 func TestError_Code(t *testing.T) { 353 gtest.C(t, func(t *gtest.T) { 354 var e *gerror.Error = nil 355 t.Assert(e.Code(), gcode.CodeNil) 356 }) 357 } 358 359 func Test_SetCode(t *testing.T) { 360 gtest.C(t, func(t *gtest.T) { 361 err := gerror.New("123") 362 t.Assert(gerror.Code(err), -1) 363 t.Assert(err.Error(), "123") 364 365 err.(*gerror.Error).SetCode(gcode.CodeValidationFailed) 366 t.Assert(gerror.Code(err), gcode.CodeValidationFailed) 367 t.Assert(err.Error(), "123") 368 }) 369 gtest.C(t, func(t *gtest.T) { 370 var err *gerror.Error = nil 371 err.SetCode(gcode.CodeValidationFailed) 372 }) 373 } 374 375 func Test_Json(t *testing.T) { 376 gtest.C(t, func(t *gtest.T) { 377 err := gerror.Wrap(gerror.New("1"), "2") 378 b, e := json.Marshal(err) 379 t.Assert(e, nil) 380 t.Assert(string(b), `"2: 1"`) 381 }) 382 } 383 384 func Test_HasStack(t *testing.T) { 385 gtest.C(t, func(t *gtest.T) { 386 err1 := errors.New("1") 387 err2 := gerror.New("1") 388 t.Assert(gerror.HasStack(err1), false) 389 t.Assert(gerror.HasStack(err2), true) 390 }) 391 } 392 393 func Test_Equal(t *testing.T) { 394 gtest.C(t, func(t *gtest.T) { 395 err1 := errors.New("1") 396 err2 := errors.New("1") 397 err3 := gerror.New("1") 398 err4 := gerror.New("4") 399 t.Assert(gerror.Equal(err1, err2), false) 400 t.Assert(gerror.Equal(err1, err3), true) 401 t.Assert(gerror.Equal(err2, err3), true) 402 t.Assert(gerror.Equal(err3, err4), false) 403 t.Assert(gerror.Equal(err1, err4), false) 404 }) 405 gtest.C(t, func(t *gtest.T) { 406 var e = new(gerror.Error) 407 t.Assert(e.Equal(e), true) 408 }) 409 } 410 411 func Test_Is(t *testing.T) { 412 gtest.C(t, func(t *gtest.T) { 413 err1 := errors.New("1") 414 err2 := gerror.Wrap(err1, "2") 415 err2 = gerror.Wrap(err2, "3") 416 t.Assert(gerror.Is(err2, err1), true) 417 418 var ( 419 errNotFound = errors.New("not found") 420 gerror1 = gerror.Wrap(errNotFound, "wrapped") 421 gerror2 = gerror.New("not found") 422 ) 423 t.Assert(errors.Is(errNotFound, errNotFound), true) 424 t.Assert(errors.Is(nil, errNotFound), false) 425 t.Assert(errors.Is(nil, nil), true) 426 427 t.Assert(gerror.Is(errNotFound, errNotFound), true) 428 t.Assert(gerror.Is(nil, errNotFound), false) 429 t.Assert(gerror.Is(nil, nil), true) 430 431 t.Assert(errors.Is(gerror1, errNotFound), true) 432 t.Assert(errors.Is(gerror2, errNotFound), false) 433 t.Assert(gerror.Is(gerror1, errNotFound), true) 434 t.Assert(gerror.Is(gerror2, errNotFound), false) 435 }) 436 } 437 438 func Test_HasError(t *testing.T) { 439 gtest.C(t, func(t *gtest.T) { 440 err1 := errors.New("1") 441 err2 := gerror.Wrap(err1, "2") 442 err2 = gerror.Wrap(err2, "3") 443 t.Assert(gerror.HasError(err2, err1), true) 444 }) 445 } 446 447 func Test_HasCode(t *testing.T) { 448 gtest.C(t, func(t *gtest.T) { 449 t.Assert(gerror.HasCode(nil, gcode.CodeNotAuthorized), false) 450 err1 := errors.New("1") 451 err2 := gerror.WrapCode(gcode.CodeNotAuthorized, err1, "2") 452 err3 := gerror.Wrap(err2, "3") 453 err4 := gerror.Wrap(err3, "4") 454 err5 := gerror.WrapCode(gcode.CodeInvalidParameter, err4, "5") 455 t.Assert(gerror.HasCode(err1, gcode.CodeNotAuthorized), false) 456 t.Assert(gerror.HasCode(err2, gcode.CodeNotAuthorized), true) 457 t.Assert(gerror.HasCode(err3, gcode.CodeNotAuthorized), true) 458 t.Assert(gerror.HasCode(err4, gcode.CodeNotAuthorized), true) 459 t.Assert(gerror.HasCode(err5, gcode.CodeNotAuthorized), true) 460 t.Assert(gerror.HasCode(err5, gcode.CodeInvalidParameter), true) 461 t.Assert(gerror.HasCode(err5, gcode.CodeInternalError), false) 462 }) 463 } 464 465 func Test_NewOption(t *testing.T) { 466 gtest.C(t, func(t *gtest.T) { 467 t.AssertNE(gerror.NewWithOption(gerror.Option{ 468 Error: errors.New("NewOptionError"), 469 Stack: true, 470 Text: "Text", 471 Code: gcode.CodeNotAuthorized, 472 }), gerror.New("NewOptionError")) 473 }) 474 }