pkg.re/essentialkaos/ek.10@v12.41.0+incompatible/errutil/errutil_test.go (about)

     1  package errutil
     2  
     3  // ////////////////////////////////////////////////////////////////////////////////// //
     4  //                                                                                    //
     5  //                         Copyright (c) 2022 ESSENTIAL KAOS                          //
     6  //      Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0>     //
     7  //                                                                                    //
     8  // ////////////////////////////////////////////////////////////////////////////////// //
     9  
    10  import (
    11  	"errors"
    12  	"testing"
    13  
    14  	. "pkg.re/essentialkaos/check.v1"
    15  )
    16  
    17  // ////////////////////////////////////////////////////////////////////////////////// //
    18  
    19  func Test(t *testing.T) { TestingT(t) }
    20  
    21  type ErrSuite struct{}
    22  
    23  // ////////////////////////////////////////////////////////////////////////////////// //
    24  
    25  var _ = Suite(&ErrSuite{})
    26  
    27  // ////////////////////////////////////////////////////////////////////////////////// //
    28  
    29  func (s *ErrSuite) TestPositive(c *C) {
    30  	var nilErrs *Errors
    31  
    32  	errs := NewErrors()
    33  
    34  	errs.Add()
    35  	errs.Add(nil)
    36  	errs.Add(nilErrs)
    37  	errs.Add(errors.New("1"))
    38  	errs.Add(errors.New("2"))
    39  	errs.Add(errors.New("3"))
    40  	errs.Add(errors.New("4"))
    41  	errs.Add(errors.New("5"))
    42  
    43  	c.Assert(errs.Num(), Equals, 5)
    44  	c.Assert(errs.All(), HasLen, 5)
    45  	c.Assert(errs.HasErrors(), Equals, true)
    46  	c.Assert(errs.Last(), DeepEquals, errors.New("5"))
    47  	c.Assert(errs.All(), DeepEquals,
    48  		[]error{
    49  			errors.New("1"),
    50  			errors.New("2"),
    51  			errors.New("3"),
    52  			errors.New("4"),
    53  			errors.New("5"),
    54  		},
    55  	)
    56  	c.Assert(errs.Add(nil), NotNil)
    57  	c.Assert(errs.Error(), Equals, "  1\n  2\n  3\n  4\n  5\n")
    58  
    59  	errs.Reset()
    60  
    61  	c.Assert(errs.Num(), Equals, 0)
    62  }
    63  
    64  func (s *ErrSuite) TestSizeLimit(c *C) {
    65  	errs := NewErrors(3)
    66  
    67  	errs.Add(errors.New("1"))
    68  	errs.Add(errors.New("2"))
    69  
    70  	c.Assert(errs.HasErrors(), Equals, true)
    71  	c.Assert(errs.Num(), Equals, 2)
    72  	c.Assert(errs.All(), HasLen, 2)
    73  
    74  	errs.Add(errors.New("3"))
    75  	errs.Add(errors.New("4"))
    76  	errs.Add(errors.New("5"))
    77  	errs.Add(errors.New("6"))
    78  
    79  	c.Assert(errs.HasErrors(), Equals, true)
    80  	c.Assert(errs.Num(), Equals, 3)
    81  	c.Assert(errs.Cap(), Equals, 3)
    82  	c.Assert(errs.All(), HasLen, 3)
    83  
    84  	errList := errs.All()
    85  
    86  	c.Assert(errList[0].Error(), Equals, "4")
    87  	c.Assert(errList[2].Error(), Equals, "6")
    88  
    89  	errs = NewErrors(-10)
    90  
    91  	c.Assert(errs.capacity, Equals, 0)
    92  }
    93  
    94  func (s *ErrSuite) TestAdd(c *C) {
    95  	errs1 := NewErrors()
    96  	errs2 := NewErrors()
    97  
    98  	var errs3 Errors
    99  
   100  	errs1.Add(errors.New("1"))
   101  	errs1.Add(errors.New("2"))
   102  
   103  	errs2.Add(errors.New("3"))
   104  	errs2.Add(errors.New("4"))
   105  
   106  	errs3.Add(errors.New("5"))
   107  	errs3.Add(errors.New("6"))
   108  
   109  	errs1.Add(errs2)
   110  	errs1.Add(errs3)
   111  
   112  	errs1.Add([]error{errors.New("7"), errors.New("8")})
   113  	errs1.Add([]string{"9", "10"})
   114  	errs1.Add("11")
   115  
   116  	c.Assert(errs1.HasErrors(), Equals, true)
   117  	c.Assert(errs1.Num(), Equals, 11)
   118  	c.Assert(errs1.All(), HasLen, 11)
   119  }
   120  
   121  func (s *ErrSuite) TestNegative(c *C) {
   122  	errs := NewErrors()
   123  
   124  	c.Assert(errs.All(), HasLen, 0)
   125  	c.Assert(errs.HasErrors(), Equals, false)
   126  	c.Assert(errs.Last(), IsNil)
   127  	c.Assert(errs.Error(), Equals, "")
   128  }
   129  
   130  func (s *ErrSuite) TestNil(c *C) {
   131  	var errs *Errors
   132  
   133  	c.Assert(errs.Num(), Equals, 0)
   134  	c.Assert(errs.Cap(), Equals, 0)
   135  	c.Assert(errs.All(), HasLen, 0)
   136  	c.Assert(errs.HasErrors(), Equals, false)
   137  	c.Assert(errs.Last(), IsNil)
   138  	c.Assert(errs.Error(), Equals, "")
   139  }
   140  
   141  func (s *ErrSuite) TestNoInit(c *C) {
   142  	var errs Errors
   143  
   144  	c.Assert(errs.Num(), Equals, 0)
   145  	c.Assert(errs.Cap(), Equals, 0)
   146  	c.Assert(errs.All(), HasLen, 0)
   147  	c.Assert(errs.HasErrors(), Equals, false)
   148  	c.Assert(errs.Last(), IsNil)
   149  	c.Assert(errs.Error(), Equals, "")
   150  
   151  	c.Assert(errs.Add(errors.New("1")), NotNil)
   152  	c.Assert(errs.Last(), DeepEquals, errors.New("1"))
   153  }
   154  
   155  func (s *ErrSuite) TestChain(c *C) {
   156  	f1 := func() error {
   157  		return nil
   158  	}
   159  
   160  	f2 := func() error {
   161  		return errors.New("Error #2")
   162  	}
   163  
   164  	f3 := func() error {
   165  		return nil
   166  	}
   167  
   168  	c.Assert(Chain(f1, f2, f3), NotNil)
   169  	c.Assert(Chain(f1, f3), IsNil)
   170  }