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 }