You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
garble/testdata/script/tiny.txtar

75 lines
2.1 KiB
Plaintext

# Tiny mode
exec garble -tiny build
! binsubstr main$exe 'garble_main.go' 'fmt/print.go'
env GODEBUG='allocfreetrace=1,gcpacertrace=1,gctrace=1,inittrace=1,scavenge=1,scavtrace=1,scheddetail=1,schedtrace=10'
! exec ./main$exe
env GODEBUG='' # Ensure further commands don't have weirdness due to GODEBUG.
stderr '^\(0x[\d\w]{4,8},0x[\d\w]{4,8}\)' # interfaces/pointers print correctly
# With -tiny, all line numbers are reset to 1.
# Unfortunately, line comment directives don't allow erasing line numbers entirely.
stderr '^caller: \?\? 1$' # position info is removed
stderr '^recovered: ya like jazz?'
! stderr '^init runtime' # GODEBUG prints are hidden, like inittrace=1
! stderr 'panic: oh noes' # panics are hidden
stderr 'funcExported false funcUnexported true'
stderr 'funcStructExported false funcStructUnexported true'
[short] stop # no need to verify this with -short
# Default mode
exec garble build
! exec ./main$exe
stderr '^caller: [0-9a-zA-Z_]+\.go [1-9]'
stderr '^recovered: ya like jazz?'
stderr 'panic: oh noes'
stderr 'funcExported false funcUnexported false'
stderr 'funcStructExported false funcStructUnexported false'
-- go.mod --
module test/main
go 1.22
-- garble_main.go --
package main
import (
"reflect"
"runtime"
)
type testStruct struct {}
func (testStruct) unexportedFunc() { println("dummy") }
func (testStruct) ExportedFunc() { println("dummy") }
func ExportedFunc() { println("dummy") }
func unexportedFunc() { println("dummy") }
func isEmptyFuncName(i interface{}) bool {
name := runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name()
return len(name) == 0
}
func main() {
println("funcExported", isEmptyFuncName(ExportedFunc), "funcUnexported", isEmptyFuncName(unexportedFunc))
var s testStruct
println("funcStructExported", isEmptyFuncName(s.ExportedFunc), "funcStructUnexported", isEmptyFuncName(s.unexportedFunc))
var v any = "tada"
println(v)
defer func() {
if r := recover(); r != nil {
println("recovered:", r.(string))
panic("oh noes")
}
}()
_, file, line, _ := runtime.Caller(0)
println("caller:", file, line)
panic("ya like jazz?")
}