func NewStackFrame(pc uintptr) *StackFrame {
	fn := runtime.FuncForPC(pc)
	if fn == nil {
		return nil
	}
	pkg, funcName := extractPackageAndLine(fn.Name())
	file, line := fn.FileLine(pc - 1)
	s := &StackFrame{
		PC:       pc,
		File:     file,
		Line:     line,
		Package:  pkg,
		FuncName: funcName,
	}
	return s
}
NewStackFrame creates a new StackFrame instance
It extracts the File, Line, Package and Function name for the passed Program Counter
package htest
import (
	"bytes"
	"fmt"
	"runtime"
	"strings"
	"unicode"
	"unicode/utf8"
	"github.com/fatih/color"
)
type StackFrames []*StackFrame
func Trace() (frames StackFrames) {
	for i := 0; ; i++ {
		pc, file, _, ok := runtime.Caller(i)
		if !ok {
			return frames
		}
		if file == "<autogenerated>" {
			continue
		}
		frame := NewStackFrame(pc)
		if frame != nil {
			frames = append(frames, frame)
		}
	}
}
func (frames StackFrames) String() string {
	var buf bytes.Buffer
	for _, frame := range frames {
		buf.WriteString(frame.String() + "\n\r\t\t\t")
	}
	return buf.String()
}
func (frames StackFrames) OnlyTests() (out StackFrames) {
	for _, frame := range frames {
		if frame.IsTest() {
			out = append(out, frame)
		}
	}
	return out
}
type StackFrame struct {
	PC       uintptr
	File     string
	FuncName string
	Package  string
	Line     int
}