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  }