package matchers_test import ( "errors" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" . "github.com/onsi/gomega/matchers" ) type CustomErr struct { msg string } func (e *CustomErr) Error() string { return e.msg } var _ = Describe("HaveOccurred", func() { It("should succeed if matching an error", func() { Ω(errors.New("Foo")).Should(HaveOccurred()) }) It("should not succeed with nil", func() { Ω(nil).ShouldNot(HaveOccurred()) }) It("should only support errors and nil", func() { success, err := (&HaveOccurredMatcher{}).Match("foo") Ω(success).Should(BeFalse()) Ω(err).Should(HaveOccurred()) success, err = (&HaveOccurredMatcher{}).Match("") Ω(success).Should(BeFalse()) Ω(err).Should(HaveOccurred()) }) It("doesn't support non-error type", func() { success, err := (&HaveOccurredMatcher{}).Match(AnyType{}) Ω(success).Should(BeFalse()) Ω(err).Should(MatchError("Expected an error-type. Got:\n : {}")) }) It("doesn't support non-error pointer type", func() { success, err := (&HaveOccurredMatcher{}).Match(&AnyType{}) Ω(success).Should(BeFalse()) Ω(err).Should(MatchError(MatchRegexp(`Expected an error-type. Got:\n <*matchers_test.AnyType | 0x[[:xdigit:]]+>: {}`))) }) It("should succeed with pointer types that conform to error interface", func() { err := &CustomErr{"ohai"} Ω(err).Should(HaveOccurred()) }) It("should not succeed with nil pointers to types that conform to error interface", func() { var err *CustomErr = nil Ω(err).ShouldNot(HaveOccurred()) }) })