1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package gexec
- import (
- "fmt"
- "github.com/onsi/gomega/format"
- )
- /*
- The Exit matcher operates on a session:
- Expect(session).Should(Exit(<optional status code>))
- Exit passes if the session has already exited.
- If no status code is provided, then Exit will succeed if the session has exited regardless of exit code.
- Otherwise, Exit will only succeed if the process has exited with the provided status code.
- Note that the process must have already exited. To wait for a process to exit, use Eventually:
- Eventually(session, 3).Should(Exit(0))
- */
- func Exit(optionalExitCode ...int) *exitMatcher {
- exitCode := -1
- if len(optionalExitCode) > 0 {
- exitCode = optionalExitCode[0]
- }
- return &exitMatcher{
- exitCode: exitCode,
- }
- }
- type exitMatcher struct {
- exitCode int
- didExit bool
- actualExitCode int
- }
- type Exiter interface {
- ExitCode() int
- }
- func (m *exitMatcher) Match(actual interface{}) (success bool, err error) {
- exiter, ok := actual.(Exiter)
- if !ok {
- return false, fmt.Errorf("Exit must be passed a gexec.Exiter (Missing method ExitCode() int) Got:\n%s", format.Object(actual, 1))
- }
- m.actualExitCode = exiter.ExitCode()
- if m.actualExitCode == -1 {
- return false, nil
- }
- if m.exitCode == -1 {
- return true, nil
- }
- return m.exitCode == m.actualExitCode, nil
- }
- func (m *exitMatcher) FailureMessage(actual interface{}) (message string) {
- if m.actualExitCode == -1 {
- return "Expected process to exit. It did not."
- }
- return format.Message(m.actualExitCode, "to match exit code:", m.exitCode)
- }
- func (m *exitMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- if m.actualExitCode == -1 {
- return "you really shouldn't be able to see this!"
- } else {
- if m.exitCode == -1 {
- return "Expected process not to exit. It did."
- }
- return format.Message(m.actualExitCode, "not to match exit code:", m.exitCode)
- }
- }
- func (m *exitMatcher) MatchMayChangeInTheFuture(actual interface{}) bool {
- session, ok := actual.(*Session)
- if ok {
- return session.ExitCode() == -1
- }
- return true
- }
|