github.com/lonnblad/godog@v0.7.14-0.20200306004719-1b0cb3259847/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 actual = trimLineSpaces(fmt.Sprintf("%+v", err)) 47 if strings.Index(actual, "stacktrace_test.go") == -1 { 48 t.Fatalf("does not have stacktrace in actual: %s", actual) 49 } 50 }