| package gexec_test | 
 |  | 
 | import ( | 
 | 	"os/exec" | 
 | 	"time" | 
 | 	. "github.com/onsi/gomega/gexec" | 
 |  | 
 | 	. "github.com/onsi/ginkgo" | 
 | 	. "github.com/onsi/gomega" | 
 | ) | 
 |  | 
 | type NeverExits struct{} | 
 |  | 
 | func (e NeverExits) ExitCode() int { | 
 | 	return -1 | 
 | } | 
 |  | 
 | var _ = Describe("ExitMatcher", func() { | 
 | 	var command *exec.Cmd | 
 | 	var session *Session | 
 |  | 
 | 	BeforeEach(func() { | 
 | 		var err error | 
 | 		command = exec.Command(fireflyPath, "0") | 
 | 		session, err = Start(command, nil, nil) | 
 | 		Ω(err).ShouldNot(HaveOccurred()) | 
 | 	}) | 
 |  | 
 | 	Describe("when passed something that is an Exiter", func() { | 
 | 		It("should act normally", func() { | 
 | 			failures := InterceptGomegaFailures(func() { | 
 | 				Ω(NeverExits{}).Should(Exit()) | 
 | 			}) | 
 |  | 
 | 			Ω(failures[0]).Should(ContainSubstring("Expected process to exit.  It did not.")) | 
 | 		}) | 
 | 	}) | 
 |  | 
 | 	Describe("when passed something that is not an Exiter", func() { | 
 | 		It("should error", func() { | 
 | 			failures := InterceptGomegaFailures(func() { | 
 | 				Ω("aardvark").Should(Exit()) | 
 | 			}) | 
 |  | 
 | 			Ω(failures[0]).Should(ContainSubstring("Exit must be passed a gexec.Exiter")) | 
 | 		}) | 
 | 	}) | 
 |  | 
 | 	Context("with no exit code", func() { | 
 | 		It("should say the right things when it fails", func() { | 
 | 			Ω(session).ShouldNot(Exit()) | 
 |  | 
 | 			failures := InterceptGomegaFailures(func() { | 
 | 				Ω(session).Should(Exit()) | 
 | 			}) | 
 |  | 
 | 			Ω(failures[0]).Should(ContainSubstring("Expected process to exit.  It did not.")) | 
 |  | 
 | 			Eventually(session).Should(Exit()) | 
 |  | 
 | 			Ω(session).Should(Exit()) | 
 |  | 
 | 			failures = InterceptGomegaFailures(func() { | 
 | 				Ω(session).ShouldNot(Exit()) | 
 | 			}) | 
 |  | 
 | 			Ω(failures[0]).Should(ContainSubstring("Expected process not to exit.  It did.")) | 
 | 		}) | 
 | 	}) | 
 |  | 
 | 	Context("with an exit code", func() { | 
 | 		It("should say the right things when it fails", func() { | 
 | 			Ω(session).ShouldNot(Exit(0)) | 
 | 			Ω(session).ShouldNot(Exit(1)) | 
 |  | 
 | 			failures := InterceptGomegaFailures(func() { | 
 | 				Ω(session).Should(Exit(0)) | 
 | 			}) | 
 |  | 
 | 			Ω(failures[0]).Should(ContainSubstring("Expected process to exit.  It did not.")) | 
 |  | 
 | 			Eventually(session).Should(Exit(0)) | 
 |  | 
 | 			Ω(session).Should(Exit(0)) | 
 |  | 
 | 			failures = InterceptGomegaFailures(func() { | 
 | 				Ω(session).Should(Exit(1)) | 
 | 			}) | 
 |  | 
 | 			Ω(failures[0]).Should(ContainSubstring("to match exit code:")) | 
 |  | 
 | 			Ω(session).ShouldNot(Exit(1)) | 
 |  | 
 | 			failures = InterceptGomegaFailures(func() { | 
 | 				Ω(session).ShouldNot(Exit(0)) | 
 | 			}) | 
 |  | 
 | 			Ω(failures[0]).Should(ContainSubstring("not to match exit code:")) | 
 | 		}) | 
 | 	}) | 
 |  | 
 | 	Describe("bailing out early", func() { | 
 | 		It("should bail out early once the process exits", func() { | 
 | 			t := time.Now() | 
 |  | 
 | 			failures := InterceptGomegaFailures(func() { | 
 | 				Eventually(session).Should(Exit(1)) | 
 | 			}) | 
 | 			Ω(time.Since(t)).Should(BeNumerically("<=", 500*time.Millisecond)) | 
 | 			Ω(failures).Should(HaveLen(1)) | 
 | 		}) | 
 | 	}) | 
 | }) |