package matchers import ( "fmt" "regexp" "github.com/onsi/gomega/format" ) type MatchRegexpMatcher struct { Regexp string Args []interface{} } func (matcher *MatchRegexpMatcher) Match(actual interface{}) (success bool, err error) { actualString, ok := toString(actual) if !ok { return false, fmt.Errorf("RegExp matcher requires a string or stringer.\nGot:%s", format.Object(actual, 1)) } match, err := regexp.Match(matcher.regexp(), []byte(actualString)) if err != nil { return false, fmt.Errorf("RegExp match failed to compile with error:\n\t%s", err.Error()) } return match, nil } func (matcher *MatchRegexpMatcher) FailureMessage(actual interface{}) (message string) { return format.Message(actual, "to match regular expression", matcher.regexp()) } func (matcher *MatchRegexpMatcher) NegatedFailureMessage(actual interface{}) (message string) { return format.Message(actual, "not to match regular expression", matcher.regexp()) } func (matcher *MatchRegexpMatcher) regexp() string { re := matcher.Regexp if len(matcher.Args) > 0 { re = fmt.Sprintf(matcher.Regexp, matcher.Args...) } return re }