github.com/markusbkk/elvish@v0.0.0-20231204143114-91dc52438621/pkg/eval/exception_unix_test.go (about) 1 //go:build !windows && !plan9 && !js 2 // +build !windows,!plan9,!js 3 4 package eval_test 5 6 import ( 7 "fmt" 8 "runtime" 9 "syscall" 10 "testing" 11 12 . "github.com/markusbkk/elvish/pkg/eval" 13 14 "github.com/markusbkk/elvish/pkg/tt" 15 ) 16 17 func TestExternalCmdExit_Error(t *testing.T) { 18 tt.Test(t, tt.Fn("Error", error.Error), tt.Table{ 19 tt.Args(ExternalCmdExit{0x0, "ls", 1}).Rets("ls exited with 0"), 20 tt.Args(ExternalCmdExit{0x100, "ls", 1}).Rets("ls exited with 1"), 21 // Note: all Unix'es have SIGINT = 2, but syscall package has different 22 // string in gccgo("Interrupt") and gc("interrupt"). 23 tt.Args(ExternalCmdExit{0x2, "ls", 1}).Rets("ls killed by signal " + syscall.SIGINT.String()), 24 // 0x80 + signal for core dumped 25 tt.Args(ExternalCmdExit{0x82, "ls", 1}).Rets("ls killed by signal " + syscall.SIGINT.String() + " (core dumped)"), 26 // 0x7f + signal<<8 for stopped 27 tt.Args(ExternalCmdExit{0x27f, "ls", 1}).Rets("ls stopped by signal " + syscall.SIGINT.String() + " (pid=1)"), 28 }) 29 if runtime.GOOS == "linux" { 30 tt.Test(t, tt.Fn("Error", error.Error), tt.Table{ 31 // 0x057f + cause<<16 for trapped. SIGTRAP is 5 on all Unix'es but have 32 // different string representations on different OSes. 33 tt.Args(ExternalCmdExit{0x1057f, "ls", 1}).Rets(fmt.Sprintf( 34 "ls stopped by signal %s (pid=1) (trapped 1)", syscall.SIGTRAP)), 35 // 0xff is the only exit code that is not exited, signaled or stopped. 36 tt.Args(ExternalCmdExit{0xff, "ls", 1}).Rets("ls has unknown WaitStatus 255"), 37 }) 38 } 39 }