7 "github.com/onsi/gomega/types"
10 type Assertion struct {
11 actualInput interface{}
12 fail types.GomegaFailHandler
17 func New(actualInput interface{}, fail types.GomegaFailHandler, offset int, extra ...interface{}) *Assertion {
19 actualInput: actualInput,
26 func (assertion *Assertion) Should(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
27 return assertion.vetExtras(optionalDescription...) && assertion.match(matcher, true, optionalDescription...)
30 func (assertion *Assertion) ShouldNot(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
31 return assertion.vetExtras(optionalDescription...) && assertion.match(matcher, false, optionalDescription...)
34 func (assertion *Assertion) To(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
35 return assertion.vetExtras(optionalDescription...) && assertion.match(matcher, true, optionalDescription...)
38 func (assertion *Assertion) ToNot(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
39 return assertion.vetExtras(optionalDescription...) && assertion.match(matcher, false, optionalDescription...)
42 func (assertion *Assertion) NotTo(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
43 return assertion.vetExtras(optionalDescription...) && assertion.match(matcher, false, optionalDescription...)
46 func (assertion *Assertion) buildDescription(optionalDescription ...interface{}) string {
47 switch len(optionalDescription) {
51 return fmt.Sprintf(optionalDescription[0].(string), optionalDescription[1:]...) + "\n"
55 func (assertion *Assertion) match(matcher types.GomegaMatcher, desiredMatch bool, optionalDescription ...interface{}) bool {
56 matches, err := matcher.Match(assertion.actualInput)
57 description := assertion.buildDescription(optionalDescription...)
59 assertion.fail(description+err.Error(), 2+assertion.offset)
62 if matches != desiredMatch {
65 message = matcher.FailureMessage(assertion.actualInput)
67 message = matcher.NegatedFailureMessage(assertion.actualInput)
69 assertion.fail(description+message, 2+assertion.offset)
76 func (assertion *Assertion) vetExtras(optionalDescription ...interface{}) bool {
77 success, message := vetExtras(assertion.extra)
82 description := assertion.buildDescription(optionalDescription...)
83 assertion.fail(description+message, 2+assertion.offset)
87 func vetExtras(extras []interface{}) (bool, string) {
88 for i, extra := range extras {
90 zeroValue := reflect.Zero(reflect.TypeOf(extra)).Interface()
91 if !reflect.DeepEqual(zeroValue, extra) {
92 message := fmt.Sprintf("Unexpected non-nil/non-zero extra argument at index %d:\n\t<%T>: %#v", i+1, extra, extra)