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  }