github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/pingcap/tidb/terror/terror_test.go (about) 1 // Copyright 2015 PingCAP, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package terror 15 16 import ( 17 "strings" 18 "testing" 19 20 "github.com/insionng/yougam/libraries/juju/errors" 21 . "github.com/insionng/yougam/libraries/pingcap/check" 22 "github.com/insionng/yougam/libraries/pingcap/tidb/util/testleak" 23 ) 24 25 func TestT(t *testing.T) { 26 TestingT(t) 27 } 28 29 var _ = Suite(&testTErrorSuite{}) 30 31 type testTErrorSuite struct { 32 } 33 34 func (s *testTErrorSuite) TestTError(c *C) { 35 defer testleak.AfterTest(c)() 36 c.Assert(ClassParser.String(), Not(Equals), "") 37 c.Assert(ClassOptimizer.String(), Not(Equals), "") 38 c.Assert(ClassKV.String(), Not(Equals), "") 39 c.Assert(ClassServer.String(), Not(Equals), "") 40 41 parserErr := ClassParser.New(ErrCode(1), "error 1") 42 c.Assert(parserErr.Error(), Not(Equals), "") 43 c.Assert(ClassParser.EqualClass(parserErr), IsTrue) 44 c.Assert(ClassParser.NotEqualClass(parserErr), IsFalse) 45 46 c.Assert(ClassOptimizer.EqualClass(parserErr), IsFalse) 47 optimizerErr := ClassOptimizer.New(ErrCode(2), "abc") 48 c.Assert(ClassOptimizer.EqualClass(errors.New("abc")), IsFalse) 49 c.Assert(ClassOptimizer.EqualClass(nil), IsFalse) 50 c.Assert(optimizerErr.Equal(optimizerErr.Gen("def")), IsTrue) 51 c.Assert(optimizerErr.Equal(nil), IsFalse) 52 c.Assert(optimizerErr.Equal(errors.New("abc")), IsFalse) 53 } 54 55 var predefinedErr = ClassExecutor.New(ErrCode(123), "predefiend error") 56 57 func example() error { 58 err := call() 59 return errors.Trace(err) 60 } 61 62 func call() error { 63 return predefinedErr.Gen("error message:%s", "abc") 64 } 65 66 func (s *testTErrorSuite) TestTraceAndLocation(c *C) { 67 defer testleak.AfterTest(c)() 68 err := example() 69 stack := errors.ErrorStack(err) 70 lines := strings.Split(stack, "\n") 71 c.Assert(len(lines), Equals, 2) 72 for _, v := range lines { 73 c.Assert(strings.Contains(v, "terror_test.go"), IsTrue) 74 } 75 } 76 77 func (s *testTErrorSuite) TestErrorEqual(c *C) { 78 defer testleak.AfterTest(c)() 79 e1 := errors.New("test error") 80 c.Assert(e1, NotNil) 81 82 e2 := errors.Trace(e1) 83 c.Assert(e2, NotNil) 84 85 e3 := errors.Trace(e2) 86 c.Assert(e3, NotNil) 87 88 c.Assert(errors.Cause(e2), Equals, e1) 89 c.Assert(errors.Cause(e3), Equals, e1) 90 c.Assert(errors.Cause(e2), Equals, errors.Cause(e3)) 91 92 e4 := errors.New("test error") 93 c.Assert(errors.Cause(e4), Not(Equals), e1) 94 95 e5 := errors.Errorf("test error") 96 c.Assert(errors.Cause(e5), Not(Equals), e1) 97 98 c.Assert(ErrorEqual(e1, e2), IsTrue) 99 c.Assert(ErrorEqual(e1, e3), IsTrue) 100 c.Assert(ErrorEqual(e1, e4), IsTrue) 101 c.Assert(ErrorEqual(e1, e5), IsTrue) 102 103 var e6 error 104 105 c.Assert(ErrorEqual(nil, nil), IsTrue) 106 c.Assert(ErrorNotEqual(e1, e6), IsTrue) 107 code1 := ErrCode(1) 108 code2 := ErrCode(2) 109 te1 := ClassParser.New(code1, "abc") 110 te2 := ClassParser.New(code1, "def") 111 te3 := ClassKV.New(code1, "abc") 112 te4 := ClassKV.New(code2, "abc") 113 c.Assert(ErrorEqual(te1, te2), IsTrue) 114 c.Assert(ErrorEqual(te1, te3), IsFalse) 115 c.Assert(ErrorEqual(te3, te4), IsFalse) 116 }