Merge pull request #69 from jmtuley/master

Allow MatchError to take a submatcher
diff --git a/matchers/match_error_matcher.go b/matchers/match_error_matcher.go
index ad00fef..03cdf04 100644
--- a/matchers/match_error_matcher.go
+++ b/matchers/match_error_matcher.go
@@ -29,7 +29,16 @@
 		return reflect.DeepEqual(actualErr, matcher.Expected), nil
 	}
 
-	return false, fmt.Errorf("MatchError must be passed an error or string.  Got:\n%s", format.Object(matcher.Expected, 1))
+	var subMatcher omegaMatcher
+	var hasSubMatcher bool
+	if matcher.Expected != nil {
+		subMatcher, hasSubMatcher = (matcher.Expected).(omegaMatcher)
+		if hasSubMatcher {
+			return subMatcher.Match(actualErr.Error())
+		}
+	}
+
+	return false, fmt.Errorf("MatchError must be passed an error, string, or Matcher that can match on strings.  Got:\n%s", format.Object(matcher.Expected, 1))
 }
 
 func (matcher *MatchErrorMatcher) FailureMessage(actual interface{}) (message string) {
diff --git a/matchers/match_error_matcher_test.go b/matchers/match_error_matcher_test.go
index b331e2f..338b512 100644
--- a/matchers/match_error_matcher_test.go
+++ b/matchers/match_error_matcher_test.go
@@ -41,6 +41,19 @@
 			Ω(customErr).Should(MatchError("an error"))
 		})
 
+		Context("when passed a matcher", func() {
+			It("should pass if the matcher passes against the error string", func() {
+				err := errors.New("error 123 abc")
+
+				Ω(err).Should(MatchError(MatchRegexp(`\d{3}`)))
+			})
+
+			It("should fail if the matcher fails against the error string", func() {
+				err := errors.New("no digits")
+				Ω(err).ShouldNot(MatchError(MatchRegexp(`\d`)))
+			})
+		})
+
 		It("should fail when passed anything else", func() {
 			actualErr := errors.New("an error")
 			_, err := (&MatchErrorMatcher{