github.com/data-DOG/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  }