| package org.testng.internal; |
| |
| import org.testng.IExpectedExceptionsHolder; |
| import org.testng.ITestNGMethod; |
| import org.testng.annotations.IExpectedExceptionsAnnotation; |
| import org.testng.annotations.ITestAnnotation; |
| import org.testng.internal.annotations.IAnnotationFinder; |
| |
| import java.util.regex.Pattern; |
| |
| /** |
| * A class that contains the expected exceptions and the message regular expression. |
| * @author cbeust |
| */ |
| public class RegexpExpectedExceptionsHolder implements IExpectedExceptionsHolder { |
| public static final String DEFAULT_REGEXP = ".*"; |
| |
| private final IAnnotationFinder finder; |
| private final ITestNGMethod method; |
| |
| public RegexpExpectedExceptionsHolder(IAnnotationFinder finder, ITestNGMethod method) { |
| this.finder = finder; |
| this.method = method; |
| } |
| |
| /** |
| * message / regEx .* other |
| * null true false |
| * non-null true match |
| */ |
| @Override |
| public boolean isThrowableMatching(Throwable ite) { |
| String messageRegExp = getRegExp(); |
| |
| if (DEFAULT_REGEXP.equals(messageRegExp)) { |
| return true; |
| } |
| |
| final String message = ite.getMessage(); |
| return message != null && Pattern.compile(messageRegExp, Pattern.DOTALL).matcher(message).matches(); |
| } |
| |
| public String getWrongExceptionMessage(Throwable ite) { |
| return "The exception was thrown with the wrong message:" + |
| " expected \"" + getRegExp() + "\"" + |
| " but got \"" + ite.getMessage() + "\""; |
| } |
| |
| private String getRegExp() { |
| IExpectedExceptionsAnnotation expectedExceptions = |
| finder.findAnnotation(method, IExpectedExceptionsAnnotation.class); |
| if (expectedExceptions != null) { |
| // Old syntax => default value |
| return DEFAULT_REGEXP; |
| } |
| |
| // New syntax |
| ITestAnnotation testAnnotation = finder.findAnnotation(method, ITestAnnotation.class); |
| if (testAnnotation != null) { |
| return testAnnotation.getExpectedExceptionsMessageRegExp(); |
| } |
| |
| return DEFAULT_REGEXP; |
| } |
| } |