github.com/gogf/gf@v1.16.9/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  	"github.com/gogf/gf/errors/gcode"
    13  	"github.com/gogf/gf/internal/json"
    14  	"testing"
    15  
    16  	"github.com/gogf/gf/errors/gerror"
    17  	"github.com/gogf/gf/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  }
    99  
   100  func Test_WrapSkip(t *testing.T) {
   101  	gtest.C(t, func(t *gtest.T) {
   102  		err := errors.New("1")
   103  		err = gerror.WrapSkip(1, err, "2")
   104  		err = gerror.WrapSkip(1, err, "3")
   105  		t.AssertNE(err, nil)
   106  		t.Assert(err.Error(), "3: 2: 1")
   107  	})
   108  	gtest.C(t, func(t *gtest.T) {
   109  		err := gerror.New("1")
   110  		err = gerror.WrapSkip(1, err, "2")
   111  		err = gerror.WrapSkip(1, err, "3")
   112  		t.AssertNE(err, nil)
   113  		t.Assert(err.Error(), "3: 2: 1")
   114  	})
   115  	gtest.C(t, func(t *gtest.T) {
   116  		err := gerror.New("1")
   117  		err = gerror.WrapSkip(1, err, "")
   118  		t.AssertNE(err, nil)
   119  		t.Assert(err.Error(), "1")
   120  	})
   121  }
   122  
   123  func Test_WrapSkipf(t *testing.T) {
   124  	gtest.C(t, func(t *gtest.T) {
   125  		err := errors.New("1")
   126  		err = gerror.WrapSkipf(1, err, "2")
   127  		err = gerror.WrapSkipf(1, err, "3")
   128  		t.AssertNE(err, nil)
   129  		t.Assert(err.Error(), "3: 2: 1")
   130  	})
   131  	gtest.C(t, func(t *gtest.T) {
   132  		err := gerror.New("1")
   133  		err = gerror.WrapSkipf(1, err, "2")
   134  		err = gerror.WrapSkipf(1, err, "3")
   135  		t.AssertNE(err, nil)
   136  		t.Assert(err.Error(), "3: 2: 1")
   137  	})
   138  	gtest.C(t, func(t *gtest.T) {
   139  		err := gerror.New("1")
   140  		err = gerror.WrapSkipf(1, err, "")
   141  		t.AssertNE(err, nil)
   142  		t.Assert(err.Error(), "1")
   143  	})
   144  }
   145  
   146  func Test_Cause(t *testing.T) {
   147  	gtest.C(t, func(t *gtest.T) {
   148  		err := errors.New("1")
   149  		t.Assert(gerror.Cause(err), err)
   150  	})
   151  
   152  	gtest.C(t, func(t *gtest.T) {
   153  		err := errors.New("1")
   154  		err = gerror.Wrap(err, "2")
   155  		err = gerror.Wrap(err, "3")
   156  		t.Assert(gerror.Cause(err), "1")
   157  	})
   158  
   159  	gtest.C(t, func(t *gtest.T) {
   160  		err := gerror.New("1")
   161  		t.Assert(gerror.Cause(err), "1")
   162  	})
   163  
   164  	gtest.C(t, func(t *gtest.T) {
   165  		err := gerror.New("1")
   166  		err = gerror.Wrap(err, "2")
   167  		err = gerror.Wrap(err, "3")
   168  		t.Assert(gerror.Cause(err), "1")
   169  	})
   170  }
   171  
   172  func Test_Format(t *testing.T) {
   173  	gtest.C(t, func(t *gtest.T) {
   174  		err := errors.New("1")
   175  		err = gerror.Wrap(err, "2")
   176  		err = gerror.Wrap(err, "3")
   177  		t.AssertNE(err, nil)
   178  		t.Assert(fmt.Sprintf("%s", err), "3: 2: 1")
   179  		t.Assert(fmt.Sprintf("%v", err), "3: 2: 1")
   180  	})
   181  
   182  	gtest.C(t, func(t *gtest.T) {
   183  		err := gerror.New("1")
   184  		err = gerror.Wrap(err, "2")
   185  		err = gerror.Wrap(err, "3")
   186  		t.AssertNE(err, nil)
   187  		t.Assert(fmt.Sprintf("%s", err), "3: 2: 1")
   188  		t.Assert(fmt.Sprintf("%v", err), "3: 2: 1")
   189  	})
   190  
   191  	gtest.C(t, func(t *gtest.T) {
   192  		err := gerror.New("1")
   193  		err = gerror.Wrap(err, "2")
   194  		err = gerror.Wrap(err, "3")
   195  		t.AssertNE(err, nil)
   196  		t.Assert(fmt.Sprintf("%-s", err), "3")
   197  		t.Assert(fmt.Sprintf("%-v", err), "3")
   198  	})
   199  }
   200  
   201  func Test_Stack(t *testing.T) {
   202  	gtest.C(t, func(t *gtest.T) {
   203  		err := errors.New("1")
   204  		t.Assert(fmt.Sprintf("%+v", err), "1")
   205  	})
   206  
   207  	gtest.C(t, func(t *gtest.T) {
   208  		err := errors.New("1")
   209  		err = gerror.Wrap(err, "2")
   210  		err = gerror.Wrap(err, "3")
   211  		t.AssertNE(err, nil)
   212  		//fmt.Printf("%+v", err)
   213  	})
   214  
   215  	gtest.C(t, func(t *gtest.T) {
   216  		err := gerror.New("1")
   217  		t.AssertNE(fmt.Sprintf("%+v", err), "1")
   218  		//fmt.Printf("%+v", err)
   219  	})
   220  
   221  	gtest.C(t, func(t *gtest.T) {
   222  		err := gerror.New("1")
   223  		err = gerror.Wrap(err, "2")
   224  		err = gerror.Wrap(err, "3")
   225  		t.AssertNE(err, nil)
   226  		//fmt.Printf("%+v", err)
   227  	})
   228  }
   229  
   230  func Test_Current(t *testing.T) {
   231  	gtest.C(t, func(t *gtest.T) {
   232  		err := errors.New("1")
   233  		err = gerror.Wrap(err, "2")
   234  		err = gerror.Wrap(err, "3")
   235  		t.Assert(err.Error(), "3: 2: 1")
   236  		t.Assert(gerror.Current(err).Error(), "3")
   237  	})
   238  }
   239  
   240  func Test_Next(t *testing.T) {
   241  	gtest.C(t, func(t *gtest.T) {
   242  		err := errors.New("1")
   243  		err = gerror.Wrap(err, "2")
   244  		err = gerror.Wrap(err, "3")
   245  		t.Assert(err.Error(), "3: 2: 1")
   246  
   247  		err = gerror.Next(err)
   248  		t.Assert(err.Error(), "2: 1")
   249  
   250  		err = gerror.Next(err)
   251  		t.Assert(err.Error(), "1")
   252  
   253  		err = gerror.Next(err)
   254  		t.Assert(err, nil)
   255  	})
   256  }
   257  
   258  func Test_Code(t *testing.T) {
   259  	gtest.C(t, func(t *gtest.T) {
   260  		err := errors.New("123")
   261  		t.Assert(gerror.Code(err), -1)
   262  		t.Assert(err.Error(), "123")
   263  	})
   264  	gtest.C(t, func(t *gtest.T) {
   265  		err := gerror.NewCode(gcode.CodeUnknown, "123")
   266  		t.Assert(gerror.Code(err), gcode.CodeUnknown)
   267  		t.Assert(err.Error(), "123")
   268  	})
   269  	gtest.C(t, func(t *gtest.T) {
   270  		err := gerror.NewCodef(gcode.New(1, "", nil), "%s", "123")
   271  		t.Assert(gerror.Code(err).Code(), 1)
   272  		t.Assert(err.Error(), "123")
   273  	})
   274  	gtest.C(t, func(t *gtest.T) {
   275  		err := gerror.NewCodeSkip(gcode.New(1, "", nil), 0, "123")
   276  		t.Assert(gerror.Code(err).Code(), 1)
   277  		t.Assert(err.Error(), "123")
   278  	})
   279  	gtest.C(t, func(t *gtest.T) {
   280  		err := gerror.NewCodeSkipf(gcode.New(1, "", nil), 0, "%s", "123")
   281  		t.Assert(gerror.Code(err).Code(), 1)
   282  		t.Assert(err.Error(), "123")
   283  	})
   284  	gtest.C(t, func(t *gtest.T) {
   285  		err := errors.New("1")
   286  		err = gerror.Wrap(err, "2")
   287  		err = gerror.WrapCode(gcode.New(1, "", nil), err, "3")
   288  		t.Assert(gerror.Code(err).Code(), 1)
   289  		t.Assert(err.Error(), "3: 2: 1")
   290  	})
   291  	gtest.C(t, func(t *gtest.T) {
   292  		err := errors.New("1")
   293  		err = gerror.Wrap(err, "2")
   294  		err = gerror.WrapCodef(gcode.New(1, "", nil), err, "%s", "3")
   295  		t.Assert(gerror.Code(err).Code(), 1)
   296  		t.Assert(err.Error(), "3: 2: 1")
   297  	})
   298  	gtest.C(t, func(t *gtest.T) {
   299  		err := errors.New("1")
   300  		err = gerror.Wrap(err, "2")
   301  		err = gerror.WrapCodeSkip(gcode.New(1, "", nil), 100, err, "3")
   302  		t.Assert(gerror.Code(err).Code(), 1)
   303  		t.Assert(err.Error(), "3: 2: 1")
   304  	})
   305  	gtest.C(t, func(t *gtest.T) {
   306  		err := errors.New("1")
   307  		err = gerror.Wrap(err, "2")
   308  		err = gerror.WrapCodeSkipf(gcode.New(1, "", nil), 100, err, "%s", "3")
   309  		t.Assert(gerror.Code(err).Code(), 1)
   310  		t.Assert(err.Error(), "3: 2: 1")
   311  	})
   312  }
   313  
   314  func Test_Json(t *testing.T) {
   315  	gtest.C(t, func(t *gtest.T) {
   316  		err := gerror.Wrap(gerror.New("1"), "2")
   317  		b, e := json.Marshal(err)
   318  		t.Assert(e, nil)
   319  		t.Assert(string(b), `"2: 1"`)
   320  	})
   321  }