From ebd058b939a88679f796654f7b4cac7d6e2dcf6d Mon Sep 17 00:00:00 2001 From: Marios Trivyzas Date: Tue, 12 Feb 2019 18:49:51 +0200 Subject: [PATCH 1/2] Build: Fix issue with test status logging Handle the case of `Description` being null which is a valid case as described in the `HeartBeatEvent`'s javadoc, which previously resulted in exceptions that "pollute" the build output. Follows: #28563 --- .../gradle/junit4/TestProgressLogger.groovy | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/buildSrc/src/main/groovy/com/carrotsearch/gradle/junit4/TestProgressLogger.groovy b/buildSrc/src/main/groovy/com/carrotsearch/gradle/junit4/TestProgressLogger.groovy index 005e43b9db434..bfc218ff37528 100644 --- a/buildSrc/src/main/groovy/com/carrotsearch/gradle/junit4/TestProgressLogger.groovy +++ b/buildSrc/src/main/groovy/com/carrotsearch/gradle/junit4/TestProgressLogger.groovy @@ -32,6 +32,7 @@ import com.carrotsearch.ant.tasks.junit4.events.aggregated.HeartBeatEvent import com.carrotsearch.ant.tasks.junit4.listeners.AggregatedEventListener import org.gradle.internal.logging.progress.ProgressLogger import org.gradle.internal.logging.progress.ProgressLoggerFactory +import org.junit.runner.Description import static com.carrotsearch.ant.tasks.junit4.FormattingUtils.formatDurationInSeconds import static com.carrotsearch.ant.tasks.junit4.events.aggregated.TestStatus.ERROR @@ -113,7 +114,7 @@ class TestProgressLogger implements AggregatedEventListener { @Subscribe void onSuiteStart(AggregatedSuiteStartedEvent e) throws IOException { - String suiteName = simpleName(e.suiteStartedEvent.description.className) + String suiteName = simpleName(e.suiteStartedEvent.description) slaveLoggers[e.slave.id].progress("J${e.slave.id}: ${suiteName} - initializing") } @@ -146,31 +147,45 @@ class TestProgressLogger implements AggregatedEventListener { throw new IllegalArgumentException("Unknown test status: [${e.status}]") } testLogger.progress("Tests: completed: ${testsCompleted}, failed: ${testsFailed}, ignored: ${testsIgnored}") - String testName = simpleName(e.description.className) + '.' + e.description.methodName + String testName = testName(e.description) slaveLoggers[e.slave.id].progress("J${e.slave.id}: ${testName} ${statusMessage}") } @Subscribe void onTestStarted(TestStartedEvent e) throws IOException { - String testName = simpleName(e.description.className) + '.' + e.description.methodName + String testName = testName(e.description) slaveLoggers[e.slave.id].progress("J${e.slave.id}: ${testName} ...") } @Subscribe void onHeartbeat(HeartBeatEvent e) throws IOException { - String testName = simpleName(e.description.className) + '.' + e.description.methodName + String testName = testName(e.description) String time = formatDurationInSeconds(e.getNoEventDuration()) slaveLoggers[e.slave.id].progress("J${e.slave.id}: ${testName} stalled for ${time}") } + /** + * Build the test name in the format of . + */ + private static String testName(Description description) { + String className = simpleName(description) + if (description == null) { + return className + } + return className + "." + description.methodName + } + /** * Extract a Class#getSimpleName style name from Class#getName style * string. We can't just use Class#getSimpleName because junit descriptions * don't always set the class field but they always set the className * field. */ - private static String simpleName(String className) { - return className.substring(className.lastIndexOf('.') + 1) + private static String simpleName(Description description) { + if (description == null) { + return "" + } + return description.className.substring(description.className.lastIndexOf('.') + 1) } @Override From 5f560cc0efe16c3985e3f7c1f719f68040437994 Mon Sep 17 00:00:00 2001 From: Marios Trivyzas Date: Thu, 14 Feb 2019 23:37:59 +0200 Subject: [PATCH 2/2] Address comment --- .../com/carrotsearch/gradle/junit4/TestProgressLogger.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/groovy/com/carrotsearch/gradle/junit4/TestProgressLogger.groovy b/buildSrc/src/main/groovy/com/carrotsearch/gradle/junit4/TestProgressLogger.groovy index bfc218ff37528..05248fc581e96 100644 --- a/buildSrc/src/main/groovy/com/carrotsearch/gradle/junit4/TestProgressLogger.groovy +++ b/buildSrc/src/main/groovy/com/carrotsearch/gradle/junit4/TestProgressLogger.groovy @@ -170,7 +170,7 @@ class TestProgressLogger implements AggregatedEventListener { private static String testName(Description description) { String className = simpleName(description) if (description == null) { - return className + return className + "." + "" } return className + "." + description.methodName } @@ -183,7 +183,7 @@ class TestProgressLogger implements AggregatedEventListener { */ private static String simpleName(Description description) { if (description == null) { - return "" + return "" } return description.className.substring(description.className.lastIndexOf('.') + 1) }