diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/events/AfterTestEvent.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/events/AfterTestEvent.java index 7fdc0eded8ab..3ba2a15e7518 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/events/AfterTestEvent.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/events/AfterTestEvent.java @@ -16,7 +16,10 @@ package org.jetbrains.plugins.gradle.execution.test.runner.events; import com.intellij.execution.testframework.sm.runner.SMTestProxy; +import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Couple; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.util.ObjectUtils; import org.jetbrains.plugins.gradle.execution.test.runner.GradleTestsExecutionConsoleManager; import org.jetbrains.plugins.gradle.util.XmlXpathHelper; @@ -67,7 +70,17 @@ public class AfterTestEvent extends AbstractTestEvent { if ("comparison".equals(failureType)) { String actualText = eventXml.queryXml("/ijLog/event/test/result/actual"); String expectedText = eventXml.queryXml("/ijLog/event/test/result/expected"); - testProxy.setTestComparisonFailed(exceptionMsg, stackTrace, actualText, expectedText); + final Condition emptyString = new Condition() { + @Override + public boolean value(String s) { + return StringUtil.isEmpty(s); + } + }; + String filePath = ObjectUtils.nullizeByCondition( + eventXml.queryXml("/ijLog/event/test/result/filePath"), emptyString); + String actualFilePath = ObjectUtils.nullizeByCondition( + eventXml.queryXml("/ijLog/event/test/result/actualFilePath"), emptyString); + testProxy.setTestComparisonFailed(exceptionMsg, stackTrace, actualText, expectedText, filePath, actualFilePath); } else { Couple comparisonPair = diff --git a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/init/testFilterInit.gradle b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/init/testFilterInit.gradle index 031a8ebceecd..89611ade027d 100644 --- a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/init/testFilterInit.gradle +++ b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/init/testFilterInit.gradle @@ -53,6 +53,11 @@ gradle.taskGraph.beforeTask { Task task -> if (task instanceof Test) { try { + def urls = task.classpath.files.findAll{ + it.name.equals('idea_rt.jar') || it.name.startsWith('junit') + }.collect { it.toURI().toURL()} + Class.forName("org.gradle.launcher.daemon.bootstrap.DaemonMain").getClassLoader().addURLs(urls) + logTestReportLocation(task.reports?.html?.entryPoint?.path) task.beforeSuite { descriptor -> @@ -112,12 +117,33 @@ Object logTestEvent(def testEventType, TestDescriptorInternal testDescriptor, de failureType('comparison') xml.mkp.yieldUnescaped("$expected") xml.mkp.yieldUnescaped("$actual") - } else if('junit.framework.AssertionFailedError'.equals(testResult.exception?.class?.name) || + return + } + try { + if ('com.intellij.rt.execution.junit.FileComparisonFailure'.equals(testResult.exception?.class?.name)) { + def expected = escapeCdata(testResult.exception.expected) + def actual = escapeCdata(testResult.exception.actual) + def filePath = escapeCdata(testResult.exception.filePath) + def actualFilePath + if (testResult.exception.hasProperty('actualFilePath')) { + actualFilePath = escapeCdata(testResult.exception.actualFilePath) + } + failureType('comparison') + xml.mkp.yieldUnescaped("$expected") + xml.mkp.yieldUnescaped("$actual") + xml.mkp.yieldUnescaped("$filePath") + if (actualFilePath) xml.mkp.yieldUnescaped("$actualFilePath") + return + } + } + catch (ignore) { + } + if ('junit.framework.AssertionFailedError'.equals(testResult.exception?.class?.name) || testResult.exception instanceof AssertionError) { failureType('assertionFailed') - } else { - failureType('error') + return } + failureType('error') } } }