github.com/raarceoml/godog@v0.7.9/stacktrace_test.go (about) 1 package godog 2 3 import ( 4 "fmt" 5 "runtime" 6 "strings" 7 "testing" 8 ) 9 10 func trimLineSpaces(s string) string { 11 var res []string 12 for _, ln := range strings.Split(s, "\n") { 13 res = append(res, strings.TrimSpace(ln)) 14 } 15 return strings.Join(res, "\n") 16 } 17 18 func callstack1() *stack { 19 return callstack2() 20 } 21 22 func callstack2() *stack { 23 return callstack3() 24 } 25 26 func callstack3() *stack { 27 const depth = 4 28 var pcs [depth]uintptr 29 n := runtime.Callers(1, pcs[:]) 30 var st stack = pcs[0:n] 31 return &st 32 } 33 34 func TestStacktrace(t *testing.T) { 35 err := &traceError{ 36 msg: "err msg", 37 stack: callstack1(), 38 } 39 40 expect := "err msg" 41 actual := fmt.Sprintf("%s", err) 42 if expect != actual { 43 t.Fatalf("expected formatted trace error message to be: %s, but got %s", expect, actual) 44 } 45 46 expect = trimLineSpaces(`err msg 47 github.com/DATA-DOG/godog.callstack3 48 github.com/DATA-DOG/godog/stacktrace_test.go:29 49 github.com/DATA-DOG/godog.callstack2 50 github.com/DATA-DOG/godog/stacktrace_test.go:23 51 github.com/DATA-DOG/godog.callstack1 52 github.com/DATA-DOG/godog/stacktrace_test.go:19 53 github.com/DATA-DOG/godog.TestStacktrace 54 github.com/DATA-DOG/godog/stacktrace_test.go:37`) 55 56 actual = trimLineSpaces(fmt.Sprintf("%+v", err)) 57 if expect != actual { 58 t.Fatalf("detaily formatted actual: %s", actual) 59 } 60 }