github.com/kolbycrouch/elvish@v0.14.1-0.20210614162631-215b9ac1c423/pkg/eval/exception_unix_test.go (about)

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