c8530c4109
PR go/89168 libgo: change gotest to run examples with output Change the gotest script to act like "go test" and run examples that have "output" comments. This is not done with full generality, but just enough to run the libgo tests. Other packages should be tested with "go test" as usual. While we're here clean up some old bits of gotest, and only run TestXXX functions that are actually in *_test.go files. The latter change should fix https://gcc.gnu.org/PR89168. Reviewed-on: https://go-review.googlesource.com/c/162139 From-SVN: r268922
55 lines
1.4 KiB
Go
55 lines
1.4 KiB
Go
// Copyright 2017 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package runtime_test
|
|
|
|
import (
|
|
"fmt"
|
|
"runtime"
|
|
"strings"
|
|
)
|
|
|
|
func ExampleFrames() {
|
|
c := func() {
|
|
// Ask runtime.Callers for up to 10 pcs, including runtime.Callers itself.
|
|
pc := make([]uintptr, 10)
|
|
n := runtime.Callers(0, pc)
|
|
if n == 0 {
|
|
// No pcs available. Stop now.
|
|
// This can happen if the first argument to runtime.Callers is large.
|
|
return
|
|
}
|
|
|
|
pc = pc[:n] // pass only valid pcs to runtime.CallersFrames
|
|
frames := runtime.CallersFrames(pc)
|
|
|
|
// Loop to get frames.
|
|
// A fixed number of pcs can expand to an indefinite number of Frames.
|
|
for {
|
|
frame, more := frames.Next()
|
|
// To keep this example's output stable
|
|
// even if there are changes in the testing package,
|
|
// stop unwinding when we leave package runtime.
|
|
if !strings.Contains(frame.File, "runtime/") && !strings.Contains(frame.File, "/test/") {
|
|
break
|
|
}
|
|
fmt.Printf("- more:%v | %s\n", more, frame.Function)
|
|
if !more {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
b := func() { c() }
|
|
a := func() { b() }
|
|
|
|
a()
|
|
// Output:
|
|
// - more:true | runtime.Callers
|
|
// - more:true | runtime_test.ExampleFrames..func1
|
|
// - more:true | runtime_test.ExampleFrames..func2
|
|
// - more:true | runtime_test.ExampleFrames..func3
|
|
// - more:true | runtime_test.ExampleFrames
|
|
}
|