| package oraclematcher |
| |
| import "github.com/onsi/gomega/types" |
| |
| /* |
| 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 types.GomegaMatcher, value interface{}) bool { |
| oracleMatcher, ok := matcher.(OracleMatcher) |
| if !ok { |
| return true |
| } |
| |
| return oracleMatcher.MatchMayChangeInTheFuture(value) |
| } |