From b1217d442bb0fa39444b3971c89ba85ecbf65141 Mon Sep 17 00:00:00 2001 From: Jeff Shaw Date: Fri, 14 Apr 2023 12:48:17 -0400 Subject: [PATCH] fix "SuiteAborted.this.message was null" https://github.com/scalatest/scalatest/issues/1445 --- .../org/scalatest/tools/SuiteRunner.scala | 2 +- .../org/scalatest/tools/SuiteRunnerSpec.scala | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/jvm/core/src/main/scala/org/scalatest/tools/SuiteRunner.scala b/jvm/core/src/main/scala/org/scalatest/tools/SuiteRunner.scala index 12e7e2c2bf..abb13d1a30 100644 --- a/jvm/core/src/main/scala/org/scalatest/tools/SuiteRunner.scala +++ b/jvm/core/src/main/scala/org/scalatest/tools/SuiteRunner.scala @@ -62,7 +62,7 @@ private[scalatest] class SuiteRunner(suite: Suite, args: Args, status: ScalaTest case Failure(ue) => status.setFailed() // Don't forward the unreportedException to the returned status, because reporting it here in this SuiteAborted if (!suite.isInstanceOf[DistributedTestRunnerSuite]) - dispatch(SuiteAborted(tracker.nextOrdinal(), ue.getMessage, suite.suiteName, suite.suiteId, Some(suiteClassName), Some(ue), Some(duration), formatter, Some(SeeStackDepthException), suite.rerunner)) + dispatch(SuiteAborted(tracker.nextOrdinal(), String.valueOf(ue.getMessage), suite.suiteName, suite.suiteId, Some(suiteClassName), Some(ue), Some(duration), formatter, Some(SeeStackDepthException), suite.rerunner)) } } finally status.setCompleted() diff --git a/jvm/scalatest-test/src/test/scala/org/scalatest/tools/SuiteRunnerSpec.scala b/jvm/scalatest-test/src/test/scala/org/scalatest/tools/SuiteRunnerSpec.scala index 08c61a5ada..c89c2b3fe7 100644 --- a/jvm/scalatest-test/src/test/scala/org/scalatest/tools/SuiteRunnerSpec.scala +++ b/jvm/scalatest-test/src/test/scala/org/scalatest/tools/SuiteRunnerSpec.scala @@ -129,6 +129,27 @@ class SuiteRunnerSpec extends AnyFunSpec { assert(rep.suiteAbortedEventsReceived.length == 1) } + it("should fire SuiteAborted event when afterEach function in BeforeAndAfterEachTestData throws RuntimeException with a null message") { + + class ExampleSuite extends AnyFunSuite with BeforeAndAfterEachTestData { + + test("test 1") {} + + override protected def afterEach(testData: TestData): Unit = { + throw new RuntimeException(null: String) + } + + } + + val suite = new ExampleSuite + val rep = new EventRecordingReporter + val runner = new SuiteRunner(suite, Args(rep), new ScalaTestStatefulStatus) + runner.run() + assert(rep.suiteStartingEventsReceived.length == 1) + assert(rep.suiteCompletedEventsReceived.length == 0) + assert(rep.suiteAbortedEventsReceived.length == 1) + } + } } \ No newline at end of file