| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- package assertion_test
- import (
- "errors"
- . "github.com/onsi/ginkgo"
- . "github.com/onsi/gomega"
- . "github.com/onsi/gomega/internal/assertion"
- "github.com/onsi/gomega/internal/fakematcher"
- )
- var _ = Describe("Assertion", func() {
- var (
- a *Assertion
- failureMessage string
- failureCallerSkip int
- matcher *fakematcher.FakeMatcher
- )
- input := "The thing I'm testing"
- var fakeFailHandler = func(message string, callerSkip ...int) {
- failureMessage = message
- if len(callerSkip) == 1 {
- failureCallerSkip = callerSkip[0]
- }
- }
- BeforeEach(func() {
- matcher = &fakematcher.FakeMatcher{}
- failureMessage = ""
- failureCallerSkip = 0
- a = New(input, fakeFailHandler, 1)
- })
- Context("when called", func() {
- It("should pass the provided input value to the matcher", func() {
- a.Should(matcher)
- Ω(matcher.ReceivedActual).Should(Equal(input))
- matcher.ReceivedActual = ""
- a.ShouldNot(matcher)
- Ω(matcher.ReceivedActual).Should(Equal(input))
- matcher.ReceivedActual = ""
- a.To(matcher)
- Ω(matcher.ReceivedActual).Should(Equal(input))
- matcher.ReceivedActual = ""
- a.ToNot(matcher)
- Ω(matcher.ReceivedActual).Should(Equal(input))
- matcher.ReceivedActual = ""
- a.NotTo(matcher)
- Ω(matcher.ReceivedActual).Should(Equal(input))
- })
- })
- Context("when the matcher succeeds", func() {
- BeforeEach(func() {
- matcher.MatchesToReturn = true
- matcher.ErrToReturn = nil
- })
- Context("and a positive assertion is being made", func() {
- It("should not call the failure callback", func() {
- a.Should(matcher)
- Ω(failureMessage).Should(Equal(""))
- })
- It("should be true", func() {
- Ω(a.Should(matcher)).Should(BeTrue())
- })
- })
- Context("and a negative assertion is being made", func() {
- It("should call the failure callback", func() {
- a.ShouldNot(matcher)
- Ω(failureMessage).Should(Equal("negative: The thing I'm testing"))
- Ω(failureCallerSkip).Should(Equal(3))
- })
- It("should be false", func() {
- Ω(a.ShouldNot(matcher)).Should(BeFalse())
- })
- })
- })
- Context("when the matcher fails", func() {
- BeforeEach(func() {
- matcher.MatchesToReturn = false
- matcher.ErrToReturn = nil
- })
- Context("and a positive assertion is being made", func() {
- It("should call the failure callback", func() {
- a.Should(matcher)
- Ω(failureMessage).Should(Equal("positive: The thing I'm testing"))
- Ω(failureCallerSkip).Should(Equal(3))
- })
- It("should be false", func() {
- Ω(a.Should(matcher)).Should(BeFalse())
- })
- })
- Context("and a negative assertion is being made", func() {
- It("should not call the failure callback", func() {
- a.ShouldNot(matcher)
- Ω(failureMessage).Should(Equal(""))
- })
- It("should be true", func() {
- Ω(a.ShouldNot(matcher)).Should(BeTrue())
- })
- })
- })
- Context("When reporting a failure", func() {
- BeforeEach(func() {
- matcher.MatchesToReturn = false
- matcher.ErrToReturn = nil
- })
- Context("and there is an optional description", func() {
- It("should append the description to the failure message", func() {
- a.Should(matcher, "A description")
- Ω(failureMessage).Should(Equal("A description\npositive: The thing I'm testing"))
- Ω(failureCallerSkip).Should(Equal(3))
- })
- })
- Context("and there are multiple arguments to the optional description", func() {
- It("should append the formatted description to the failure message", func() {
- a.Should(matcher, "A description of [%d]", 3)
- Ω(failureMessage).Should(Equal("A description of [3]\npositive: The thing I'm testing"))
- Ω(failureCallerSkip).Should(Equal(3))
- })
- })
- })
- Context("When the matcher returns an error", func() {
- BeforeEach(func() {
- matcher.ErrToReturn = errors.New("Kaboom!")
- })
- Context("and a positive assertion is being made", func() {
- It("should call the failure callback", func() {
- matcher.MatchesToReturn = true
- a.Should(matcher)
- Ω(failureMessage).Should(Equal("Kaboom!"))
- Ω(failureCallerSkip).Should(Equal(3))
- })
- })
- Context("and a negative assertion is being made", func() {
- It("should call the failure callback", func() {
- matcher.MatchesToReturn = false
- a.ShouldNot(matcher)
- Ω(failureMessage).Should(Equal("Kaboom!"))
- Ω(failureCallerSkip).Should(Equal(3))
- })
- })
- It("should always be false", func() {
- Ω(a.Should(matcher)).Should(BeFalse())
- Ω(a.ShouldNot(matcher)).Should(BeFalse())
- })
- })
- Context("when there are extra parameters", func() {
- It("(a simple example)", func() {
- Ω(func() (string, int, error) {
- return "foo", 0, nil
- }()).Should(Equal("foo"))
- })
- Context("when the parameters are all nil or zero", func() {
- It("should invoke the matcher", func() {
- matcher.MatchesToReturn = true
- matcher.ErrToReturn = nil
- var typedNil []string
- a = New(input, fakeFailHandler, 1, 0, nil, typedNil)
- result := a.Should(matcher)
- Ω(result).Should(BeTrue())
- Ω(matcher.ReceivedActual).Should(Equal(input))
- Ω(failureMessage).Should(BeZero())
- })
- })
- Context("when any of the parameters are not nil or zero", func() {
- It("should call the failure callback", func() {
- matcher.MatchesToReturn = false
- matcher.ErrToReturn = nil
- a = New(input, fakeFailHandler, 1, errors.New("foo"))
- result := a.Should(matcher)
- Ω(result).Should(BeFalse())
- Ω(matcher.ReceivedActual).Should(BeZero(), "The matcher doesn't even get called")
- Ω(failureMessage).Should(ContainSubstring("foo"))
- failureMessage = ""
- a = New(input, fakeFailHandler, 1, nil, 1)
- result = a.ShouldNot(matcher)
- Ω(result).Should(BeFalse())
- Ω(failureMessage).Should(ContainSubstring("1"))
- failureMessage = ""
- a = New(input, fakeFailHandler, 1, nil, 0, []string{"foo"})
- result = a.To(matcher)
- Ω(result).Should(BeFalse())
- Ω(failureMessage).Should(ContainSubstring("foo"))
- failureMessage = ""
- a = New(input, fakeFailHandler, 1, nil, 0, []string{"foo"})
- result = a.ToNot(matcher)
- Ω(result).Should(BeFalse())
- Ω(failureMessage).Should(ContainSubstring("foo"))
- failureMessage = ""
- a = New(input, fakeFailHandler, 1, nil, 0, []string{"foo"})
- result = a.NotTo(matcher)
- Ω(result).Should(BeFalse())
- Ω(failureMessage).Should(ContainSubstring("foo"))
- Ω(failureCallerSkip).Should(Equal(3))
- })
- })
- })
- Context("Making an assertion without a registered fail handler", func() {
- It("should panic", func() {
- defer func() {
- e := recover()
- RegisterFailHandler(Fail)
- if e == nil {
- Fail("expected a panic to have occurred")
- }
- }()
- RegisterFailHandler(nil)
- Ω(true).Should(BeTrue())
- })
- })
- })
|