From 02cdec08bb1d08d2189e6bda99e525dde49f1ddc Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 10 Mar 2016 12:40:52 +0100 Subject: [PATCH] junit: move ComparisonFailure detection to some common place (to be used by junit5) --- .../com/intellij/junit4/ExpectedPatterns.java | 58 ++++++++++++++++++- .../intellij/junit4/JUnit4TestListener.java | 55 +----------------- .../junit4/JUnit4TestResultsSender.java | 2 +- 3 files changed, 59 insertions(+), 56 deletions(-) diff --git a/plugins/junit_rt/src/com/intellij/junit4/ExpectedPatterns.java b/plugins/junit_rt/src/com/intellij/junit4/ExpectedPatterns.java index 364577a2a028..ef879e7fa64f 100644 --- a/plugins/junit_rt/src/com/intellij/junit4/ExpectedPatterns.java +++ b/plugins/junit_rt/src/com/intellij/junit4/ExpectedPatterns.java @@ -15,8 +15,9 @@ */ package com.intellij.junit4; -import com.intellij.rt.execution.testFrameworks.AbstractExpectedPatterns; import com.intellij.rt.execution.junit.ComparisonFailureData; +import com.intellij.rt.execution.testFrameworks.AbstractExpectedPatterns; +import junit.framework.ComparisonFailure; import java.util.ArrayList; import java.util.List; @@ -35,6 +36,10 @@ public class ExpectedPatterns extends AbstractExpectedPatterns { ".*?\\s*expected: (.*)\\s*but was: (.*)" }; + private static final String MESSAGE_LENGTH_FOR_PATTERN_MATCHING = "idea.junit.message.length.threshold"; + private static final String JUNIT_FRAMEWORK_COMPARISON_NAME = ComparisonFailure.class.getName(); + private static final String ORG_JUNIT_COMPARISON_NAME = "org.junit.ComparisonFailure"; + static { registerPatterns(PATTERN_STRINGS, PATTERNS); } @@ -42,4 +47,55 @@ public class ExpectedPatterns extends AbstractExpectedPatterns { public static ComparisonFailureData createExceptionNotification(String message) { return createExceptionNotification(message, PATTERNS); } + + public static ComparisonFailureData createExceptionNotification(Throwable assertion) { + if (isComparisonFailure(assertion)) { + return ComparisonFailureData.create(assertion); + } + try { + final Throwable cause = assertion.getCause(); + if (isComparisonFailure(cause)) { + return ComparisonFailureData.create(cause); + } + } + catch (Throwable ignore) { + } + + final String message = assertion.getMessage(); + if (message != null && acceptedByThreshold(message.length())) { + try { + return createExceptionNotification(message); + } + catch (Throwable ignored) {} + } + return null; + } + + private static boolean isComparisonFailure(Throwable throwable) { + if (throwable == null) return false; + return isComparisonFailure(throwable.getClass()); + } + + private static boolean isComparisonFailure(Class aClass) { + if (aClass == null) return false; + final String throwableClassName = aClass.getName(); + if (throwableClassName.equals(JUNIT_FRAMEWORK_COMPARISON_NAME) || throwableClassName.equals(ORG_JUNIT_COMPARISON_NAME)) return true; + return isComparisonFailure(aClass.getSuperclass()); + } + + + private static boolean acceptedByThreshold(int messageLength) { + int threshold = 10000; + try { + final String property = System.getProperty(MESSAGE_LENGTH_FOR_PATTERN_MATCHING); + if (property != null) { + try { + threshold = Integer.parseInt(property); + } + catch (NumberFormatException ignore) {} + } + } + catch (SecurityException ignored) {} + return messageLength < threshold; + } } diff --git a/plugins/junit_rt/src/com/intellij/junit4/JUnit4TestListener.java b/plugins/junit_rt/src/com/intellij/junit4/JUnit4TestListener.java index bcb71b321c60..a8b978d18dde 100644 --- a/plugins/junit_rt/src/com/intellij/junit4/JUnit4TestListener.java +++ b/plugins/junit_rt/src/com/intellij/junit4/JUnit4TestListener.java @@ -22,7 +22,6 @@ package com.intellij.junit4; import com.intellij.rt.execution.junit.ComparisonFailureData; import com.intellij.rt.execution.junit.MapSerializerUtil; -import junit.framework.ComparisonFailure; import org.junit.Ignore; import org.junit.runner.Description; import org.junit.runner.Result; @@ -36,9 +35,6 @@ import java.lang.annotation.Annotation; import java.util.*; public class JUnit4TestListener extends RunListener { - private static final String MESSAGE_LENGTH_FOR_PATTERN_MATCHING = "idea.junit.message.length.threshold"; - private static final String JUNIT_FRAMEWORK_COMPARISON_NAME = ComparisonFailure.class.getName(); - private static final String ORG_JUNIT_COMPARISON_NAME = "org.junit.ComparisonFailure"; public static final String EMPTY_SUITE_NAME = "junit.framework.TestSuite$1"; public static final String EMPTY_SUITE_WARNING = "warning"; @@ -202,7 +198,7 @@ public class JUnit4TestListener extends RunListener { if (failure != null) { final String trace = getTrace(failure); final Throwable ex = failure.getException(); - final ComparisonFailureData notification = createExceptionNotification(ex); + final ComparisonFailureData notification = ExpectedPatterns.createExceptionNotification(ex); ComparisonFailureData.registerSMAttributes(notification, trace, failure.getMessage(), attrs, ex); } } @@ -283,55 +279,6 @@ public class JUnit4TestListener extends RunListener { testFinished(description); } - private static boolean isComparisonFailure(Throwable throwable) { - if (throwable == null) return false; - return isComparisonFailure(throwable.getClass()); - } - - private static boolean isComparisonFailure(Class aClass) { - if (aClass == null) return false; - final String throwableClassName = aClass.getName(); - if (throwableClassName.equals(JUNIT_FRAMEWORK_COMPARISON_NAME) || throwableClassName.equals(ORG_JUNIT_COMPARISON_NAME)) return true; - return isComparisonFailure(aClass.getSuperclass()); - } - - static ComparisonFailureData createExceptionNotification(Throwable assertion) { - if (isComparisonFailure(assertion)) { - return ComparisonFailureData.create(assertion); - } - try { - final Throwable cause = assertion.getCause(); - if (isComparisonFailure(cause)) { - return ComparisonFailureData.create(cause); - } - } - catch (Throwable ignore) { - } - final String message = assertion.getMessage(); - if (message != null && acceptedByThreshold(message.length())) { - try { - return ExpectedPatterns.createExceptionNotification(message); - } - catch (Throwable ignored) {} - } - return null; - } - - private static boolean acceptedByThreshold(int messageLength) { - int threshold = 10000; - try { - final String property = System.getProperty(MESSAGE_LENGTH_FOR_PATTERN_MATCHING); - if (property != null) { - try { - threshold = Integer.parseInt(property); - } - catch (NumberFormatException ignore) {} - } - } - catch (SecurityException ignored) {} - return messageLength < threshold; - } - private void sendTree(Description description, Description parent, List currentParents) { List pParents = new ArrayList(3); pParents.addAll(currentParents); diff --git a/plugins/junit_rt/src/com/intellij/junit4/JUnit4TestResultsSender.java b/plugins/junit_rt/src/com/intellij/junit4/JUnit4TestResultsSender.java index b15959fa499a..9f73562b18a4 100644 --- a/plugins/junit_rt/src/com/intellij/junit4/JUnit4TestResultsSender.java +++ b/plugins/junit_rt/src/com/intellij/junit4/JUnit4TestResultsSender.java @@ -98,7 +98,7 @@ public class JUnit4TestResultsSender extends RunListener { private static PacketFactory createExceptionNotification(Throwable assertion) { if (assertion instanceof KnownException) return ((KnownException)assertion).getPacketFactory(); - final ComparisonFailureData notification = JUnit4TestListener.createExceptionNotification(assertion); + final ComparisonFailureData notification = ExpectedPatterns.createExceptionNotification(assertion); if (notification != null) { return ComparisonDetailsExtractor.create(assertion, notification.getExpected(), notification.getActual()); }