1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package ginkgowrapper
- import (
- "bufio"
- "bytes"
- "regexp"
- "runtime"
- "runtime/debug"
- "strings"
- "github.com/onsi/ginkgo"
- )
- type FailurePanic struct {
- Message string
- Filename string
- Line int
- FullStackTrace string
- }
- func (FailurePanic) String() string { return ginkgo.GINKGO_PANIC }
- func Fail(message string, callerSkip ...int) {
- skip := 1
- if len(callerSkip) > 0 {
- skip += callerSkip[0]
- }
- _, file, line, _ := runtime.Caller(skip)
- fp := FailurePanic{
- Message: message,
- Filename: file,
- Line: line,
- FullStackTrace: pruneStack(skip),
- }
- defer func() {
- e := recover()
- if e != nil {
- panic(fp)
- }
- }()
- ginkgo.Fail(message, skip)
- }
- var stackSkipPattern = regexp.MustCompile(`onsi/ginkgo`)
- func pruneStack(skip int) string {
- skip += 2
- stack := debug.Stack()
- scanner := bufio.NewScanner(bytes.NewBuffer(stack))
- var prunedStack []string
-
- for i := 0; i < 2*skip+1; i++ {
- scanner.Scan()
- }
- for scanner.Scan() {
- if stackSkipPattern.Match(scanner.Bytes()) {
- scanner.Scan()
- } else {
- prunedStack = append(prunedStack, scanner.Text())
- scanner.Scan()
- prunedStack = append(prunedStack, scanner.Text())
- }
- }
- return strings.Join(prunedStack, "\n")
- }
|