2019-05-31 09:45:11 +00:00
|
|
|
package types
|
|
|
|
|
2021-09-01 13:50:18 +00:00
|
|
|
import (
|
|
|
|
"time"
|
|
|
|
)
|
2019-05-31 09:45:11 +00:00
|
|
|
|
|
|
|
type GomegaFailHandler func(message string, callerSkip ...int)
|
|
|
|
|
|
|
|
//A simple *testing.T interface wrapper
|
|
|
|
type GomegaTestingT interface {
|
2021-09-01 13:50:18 +00:00
|
|
|
Helper()
|
2019-05-31 09:45:11 +00:00
|
|
|
Fatalf(format string, args ...interface{})
|
|
|
|
}
|
|
|
|
|
2021-09-01 13:50:18 +00:00
|
|
|
// Gomega represents an object that can perform synchronous and assynchronous assertions with Gomega matchers
|
|
|
|
type Gomega interface {
|
|
|
|
Ω(actual interface{}, extra ...interface{}) Assertion
|
|
|
|
Expect(actual interface{}, extra ...interface{}) Assertion
|
|
|
|
ExpectWithOffset(offset int, actual interface{}, extra ...interface{}) Assertion
|
|
|
|
|
|
|
|
Eventually(actual interface{}, intervals ...interface{}) AsyncAssertion
|
|
|
|
EventuallyWithOffset(offset int, actual interface{}, intervals ...interface{}) AsyncAssertion
|
|
|
|
|
|
|
|
Consistently(actual interface{}, intervals ...interface{}) AsyncAssertion
|
|
|
|
ConsistentlyWithOffset(offset int, actual interface{}, intervals ...interface{}) AsyncAssertion
|
|
|
|
|
|
|
|
SetDefaultEventuallyTimeout(time.Duration)
|
|
|
|
SetDefaultEventuallyPollingInterval(time.Duration)
|
|
|
|
SetDefaultConsistentlyDuration(time.Duration)
|
|
|
|
SetDefaultConsistentlyPollingInterval(time.Duration)
|
|
|
|
}
|
|
|
|
|
2019-05-31 09:45:11 +00:00
|
|
|
//All Gomega matchers must implement the GomegaMatcher interface
|
|
|
|
//
|
|
|
|
//For details on writing custom matchers, check out: http://onsi.github.io/gomega/#adding-your-own-matchers
|
|
|
|
type GomegaMatcher interface {
|
|
|
|
Match(actual interface{}) (success bool, err error)
|
|
|
|
FailureMessage(actual interface{}) (message string)
|
|
|
|
NegatedFailureMessage(actual interface{}) (message string)
|
|
|
|
}
|
2021-09-01 13:50:18 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
GomegaMatchers that also match the OracleMatcher interface can convey information about
|
|
|
|
whether or not their result will change upon future attempts.
|
|
|
|
|
|
|
|
This allows `Eventually` and `Consistently` to short circuit if success becomes impossible.
|
|
|
|
|
|
|
|
For example, a process' exit code can never change. So, gexec's Exit matcher returns `true`
|
|
|
|
for `MatchMayChangeInTheFuture` until the process exits, at which point it returns `false` forevermore.
|
|
|
|
*/
|
|
|
|
type OracleMatcher interface {
|
|
|
|
MatchMayChangeInTheFuture(actual interface{}) bool
|
|
|
|
}
|
|
|
|
|
|
|
|
func MatchMayChangeInTheFuture(matcher GomegaMatcher, value interface{}) bool {
|
|
|
|
oracleMatcher, ok := matcher.(OracleMatcher)
|
|
|
|
if !ok {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
return oracleMatcher.MatchMayChangeInTheFuture(value)
|
|
|
|
}
|
|
|
|
|
|
|
|
// AsyncAssertions are returned by Eventually and Consistently and enable matchers to be polled repeatedly to ensure
|
|
|
|
// they are eventually satisfied
|
|
|
|
type AsyncAssertion interface {
|
|
|
|
Should(matcher GomegaMatcher, optionalDescription ...interface{}) bool
|
|
|
|
ShouldNot(matcher GomegaMatcher, optionalDescription ...interface{}) bool
|
|
|
|
}
|
|
|
|
|
|
|
|
// Assertions are returned by Ω and Expect and enable assertions against Gomega matchers
|
|
|
|
type Assertion interface {
|
|
|
|
Should(matcher GomegaMatcher, optionalDescription ...interface{}) bool
|
|
|
|
ShouldNot(matcher GomegaMatcher, optionalDescription ...interface{}) bool
|
|
|
|
|
|
|
|
To(matcher GomegaMatcher, optionalDescription ...interface{}) bool
|
|
|
|
ToNot(matcher GomegaMatcher, optionalDescription ...interface{}) bool
|
|
|
|
NotTo(matcher GomegaMatcher, optionalDescription ...interface{}) bool
|
|
|
|
}
|