| // run |
| package main |
| |
| import ( |
| "fmt" |
| "runtime/debug" |
| "strings" |
| ) |
| |
| type Inner struct { |
| Err int |
| } |
| |
| func (i *Inner) NotExpectedInStackTrace() int { |
| if i == nil { |
| return 86 |
| } |
| return 17 + i.Err |
| } |
| |
| type Outer struct { |
| Inner |
| } |
| |
| func ExpectedInStackTrace() { |
| var o *Outer |
| println(o.NotExpectedInStackTrace()) |
| } |
| |
| func main() { |
| defer func() { |
| if r := recover(); r != nil { |
| stacktrace := string(debug.Stack()) |
| if strings.Contains(stacktrace, "NotExpectedInStackTrace") { |
| fmt.Println("FAIL, stacktrace contains NotExpectedInStackTrace") |
| } |
| if !strings.Contains(stacktrace, "ExpectedInStackTrace") { |
| fmt.Println("FAIL, stacktrace does not contain ExpectedInStackTrace") |
| } |
| } else { |
| fmt.Println("FAIL, should have panicked but did not") |
| } |
| }() |
| ExpectedInStackTrace() |
| } |