Skip to content

Commit 636757e

Browse files
authored
Fix HaveExactElements to work inside ContainElement or other collection matchers (#648)
1 parent dbd4cb5 commit 636757e

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

matchers/have_exact_elements.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ type HaveExactElementsMatcher struct {
1919
}
2020

2121
func (matcher *HaveExactElementsMatcher) Match(actual interface{}) (success bool, err error) {
22+
matcher.resetState()
23+
2224
if isMap(actual) {
2325
return false, fmt.Errorf("error")
2426
}
@@ -73,3 +75,9 @@ func (matcher *HaveExactElementsMatcher) FailureMessage(actual interface{}) (mes
7375
func (matcher *HaveExactElementsMatcher) NegatedFailureMessage(actual interface{}) (message string) {
7476
return format.Message(actual, "not to contain elements", presentable(matcher.Elements))
7577
}
78+
79+
func (matcher *HaveExactElementsMatcher) resetState() {
80+
matcher.mismatchFailures = nil
81+
matcher.missingIndex = 0
82+
matcher.extraIndex = 0
83+
}

matchers/have_exact_elements_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,14 @@ to equal
110110
})
111111
})
112112
})
113+
114+
When("matcher instance is reused", func() {
115+
// This is a regression test for https://github.com/onsi/gomega/issues/647.
116+
// Matcher instance may be reused, if placed inside ContainElement() or other collection matchers.
117+
It("should work properly", func() {
118+
matchSingleFalse := HaveExactElements(Equal(false))
119+
Expect([]bool{true}).ShouldNot(matchSingleFalse)
120+
Expect([]bool{false}).Should(matchSingleFalse)
121+
})
122+
})
113123
})

0 commit comments

Comments
 (0)