github.com/wangyougui/gf/v2@v2.6.5/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/wangyougui/gf. 6 7 package gerror_test 8 9 import ( 10 "errors" 11 "fmt" 12 "testing" 13 14 "github.com/wangyougui/gf/v2/errors/gcode" 15 "github.com/wangyougui/gf/v2/errors/gerror" 16 "github.com/wangyougui/gf/v2/internal/json" 17 "github.com/wangyougui/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 } 419 420 func Test_HashError(t *testing.T) { 421 gtest.C(t, func(t *gtest.T) { 422 err1 := errors.New("1") 423 err2 := gerror.Wrap(err1, "2") 424 err2 = gerror.Wrap(err2, "3") 425 t.Assert(gerror.HasError(err2, err1), true) 426 }) 427 } 428 429 func Test_HashCode(t *testing.T) { 430 gtest.C(t, func(t *gtest.T) { 431 t.Assert(gerror.HasCode(nil, gcode.CodeNotAuthorized), false) 432 err1 := errors.New("1") 433 err2 := gerror.WrapCode(gcode.CodeNotAuthorized, err1, "2") 434 err3 := gerror.Wrap(err2, "3") 435 err4 := gerror.Wrap(err3, "4") 436 err5 := gerror.WrapCode(gcode.CodeInvalidParameter, err4, "5") 437 t.Assert(gerror.HasCode(err1, gcode.CodeNotAuthorized), false) 438 t.Assert(gerror.HasCode(err2, gcode.CodeNotAuthorized), true) 439 t.Assert(gerror.HasCode(err3, gcode.CodeNotAuthorized), true) 440 t.Assert(gerror.HasCode(err4, gcode.CodeNotAuthorized), true) 441 t.Assert(gerror.HasCode(err5, gcode.CodeNotAuthorized), true) 442 t.Assert(gerror.HasCode(err5, gcode.CodeInvalidParameter), true) 443 t.Assert(gerror.HasCode(err5, gcode.CodeInternalError), false) 444 }) 445 } 446 447 func Test_NewOption(t *testing.T) { 448 gtest.C(t, func(t *gtest.T) { 449 t.AssertNE(gerror.NewWithOption(gerror.Option{ 450 Error: errors.New("NewOptionError"), 451 Stack: true, 452 Text: "Text", 453 Code: gcode.CodeNotAuthorized, 454 }), gerror.New("NewOptionError")) 455 }) 456 }