1
0
mirror of https://github.com/golang/go synced 2024-11-12 08:20:22 -07:00

os: add ExitCode method to ProcessState

This commit is contained in:
Guoliang Wang 2018-07-23 16:30:58 +08:00
parent 48c79734ff
commit 0b5262df5d
3 changed files with 63 additions and 0 deletions

View File

@ -168,6 +168,49 @@ func TestExitStatus(t *testing.T) {
}
}
func TestExitCode(t *testing.T) {
// Test that exit code are returned correctly
cmd := helperCommand(t, "exit", "42")
cmd.Run()
want := 42
got := cmd.ProcessState.ExitCode()
if want != got {
t.Errorf("ExitCode got %d, want %d", got, want)
}
cmd = helperCommand(t, "/no-exist-executable")
cmd.Run()
want = 2
got = cmd.ProcessState.ExitCode()
if want != got {
t.Errorf("ExitCode got %d, want %d", got, want)
}
cmd = helperCommand(t, "exit", "255")
cmd.Run()
want = 255
got = cmd.ProcessState.ExitCode()
if want != got {
t.Errorf("ExitCode got %d, want %d", got, want)
}
cmd = helperCommand(t, "cat")
cmd.Run()
want = 0
got = cmd.ProcessState.ExitCode()
if want != got {
t.Errorf("ExitCode got %d, want %d", got, want)
}
// Test when command does not call Run().
cmd = helperCommand(t, "cat")
want = -1
got = cmd.ProcessState.ExitCode()
if want != got {
t.Errorf("ExitCode got %d, want %d", got, want)
}
}
func TestPipes(t *testing.T) {
check := func(what string, err error) {
if err != nil {

View File

@ -136,3 +136,13 @@ func (p *ProcessState) String() string {
}
return "exit status: " + p.status.Msg
}
// ExitCode returns the exit code of the exited process, or -1
// if the process hasn't exited or was terminated by a signal.
func (p *ProcessState) ExitCode() int {
// return -1 if the process hasn't started.
if p == nil {
return -1
}
return p.status.ExitStatus()
}

View File

@ -106,3 +106,13 @@ func (p *ProcessState) String() string {
}
return res
}
// ExitCode returns the exit code of the exited process, or -1
// if the process hasn't exited or was terminated by a signal.
func (p *ProcessState) ExitCode() int {
// return -1 if the process hasn't started.
if p == nil {
return -1
}
return p.status.ExitStatus()
}