44 "errors"
55 "fmt"
66 "github.com/stretchr/testify/require"
7+ "runtime"
78 "strings"
89 "testing"
910)
@@ -25,6 +26,7 @@ func TestWrap(t *testing.T) {
2526 defer func () {
2627 DefaultPackageName = ""
2728 }()
29+ ln := lineNumber () + 1
2830 e := Wrap (errors .New ("cause" ), "fooey" )
2931 require .Error (t , e )
3032 require .Equal (t , "fooey" , e .Error ())
@@ -34,7 +36,7 @@ func TestWrap(t *testing.T) {
3436
3537 si := e .StackInfo ()
3638 require .Len (t , si , 1 )
37- require .Equal (t , 28 , si [0 ].Line )
39+ require .Equal (t , ln , si [0 ].Line )
3840
3941 require .NoError (t , Wrap (nil , "fooey" ))
4042}
@@ -67,39 +69,42 @@ func TestError_StackInfo(t *testing.T) {
6769 defer func () {
6870 DefaultPackageName = ""
6971 }()
72+ ln := lineNumber () + 1
7073 e := New ("fooey" )
7174 require .Error (t , e )
7275 si := e .StackInfo ()
7376 require .Len (t , si , 1 )
7477 require .True (t , strings .HasPrefix (si [0 ].Function , "github.com/go-andiamo/stackerr" ))
7578 require .Contains (t , si [0 ].Function , "TestError_StackInfo" )
76- require .Equal (t , 70 , si [0 ].Line )
79+ require .Equal (t , ln , si [0 ].Line )
7780 })
7881 t .Run ("with DefaultPackageFilter" , func (t * testing.T ) {
7982 DefaultPackageFilter = & testPackageFilter {}
8083 defer func () {
8184 DefaultPackageFilter = nil
8285 }()
86+ ln := lineNumber () + 1
8387 e := New ("fooey" )
8488 require .Error (t , e )
8589 si := e .StackInfo ()
8690 require .Len (t , si , 1 )
8791 require .True (t , strings .HasPrefix (si [0 ].Function , "github.com/go-andiamo/stackerr" ))
8892 require .Contains (t , si [0 ].Function , "TestError_StackInfo" )
89- require .Equal (t , 83 , si [0 ].Line )
93+ require .Equal (t , ln , si [0 ].Line )
9094 })
9195 t .Run ("with SetDefaultPackageFilter" , func (t * testing.T ) {
9296 SetDefaultPackageFilter ("github.com/go-andiamo/stackerr" )
9397 defer func () {
9498 DefaultPackageFilter = nil
9599 }()
100+ ln := lineNumber () + 1
96101 e := New ("fooey" )
97102 require .Error (t , e )
98103 si := e .StackInfo ()
99104 require .Len (t , si , 1 )
100105 require .True (t , strings .HasPrefix (si [0 ].Function , "github.com/go-andiamo/stackerr" ))
101106 require .Contains (t , si [0 ].Function , "TestError_StackInfo" )
102- require .Equal (t , 96 , si [0 ].Line )
107+ require .Equal (t , ln , si [0 ].Line )
103108 })
104109}
105110
@@ -127,6 +132,7 @@ func TestError_Format(t *testing.T) {
127132 defer func () {
128133 DefaultPackageName = ""
129134 }()
135+ ln := lineNumber () + 1
130136 e := New ("fooey" )
131137 require .Error (t , e )
132138 out := fmt .Sprintf ("%+v" , e )
@@ -136,13 +142,14 @@ func TestError_Format(t *testing.T) {
136142 require .Equal (t , "Stack:" , lines [1 ])
137143 require .True (t , strings .HasPrefix (lines [2 ], "\t github.com/go-andiamo/stackerr." ))
138144 require .Contains (t , lines [2 ], ".TestError_Format." )
139- require .True (t , strings .HasSuffix (lines [2 ], ":130" ))
145+ require .True (t , strings .HasSuffix (lines [2 ], fmt . Sprintf ( ":%d" , ln ) ))
140146 })
141147 t .Run ("+v with cause" , func (t * testing.T ) {
142148 DefaultPackageName = "stackerr"
143149 defer func () {
144150 DefaultPackageName = ""
145151 }()
152+ ln := lineNumber () + 1
146153 e := New ("fooey" ).WithCause (errors .New ("cause" ))
147154 require .Error (t , e )
148155 out := fmt .Sprintf ("%+v" , e )
@@ -152,7 +159,7 @@ func TestError_Format(t *testing.T) {
152159 require .Equal (t , "Stack:" , lines [1 ])
153160 require .True (t , strings .HasPrefix (lines [2 ], "\t github.com/go-andiamo/stackerr." ))
154161 require .Contains (t , lines [2 ], ".TestError_Format." )
155- require .True (t , strings .HasSuffix (lines [2 ], ":146" ))
162+ require .True (t , strings .HasSuffix (lines [2 ], fmt . Sprintf ( ":%d" , ln ) ))
156163 })
157164 t .Run ("s" , func (t * testing.T ) {
158165 e := New ("fooey" )
@@ -180,3 +187,11 @@ func TestPackageFromFunction(t *testing.T) {
180187 require .Equal (t , "stackerr" , full )
181188 require .Equal (t , "stackerr" , short )
182189}
190+
191+ func lineNumber () int {
192+ const skip = 2
193+ pc := make ([]uintptr , 1 )
194+ n := runtime .Callers (skip , pc )
195+ frame , _ := runtime .CallersFrames (pc [:n ]).Next ()
196+ return frame .Line
197+ }
0 commit comments