diff --git a/src/main/scala/org/scalatestplus/junit5/ScalaTestEngine.scala b/src/main/scala/org/scalatestplus/junit5/ScalaTestEngine.scala index be48c5f..fe23e3e 100644 --- a/src/main/scala/org/scalatestplus/junit5/ScalaTestEngine.scala +++ b/src/main/scala/org/scalatestplus/junit5/ScalaTestEngine.scala @@ -55,7 +55,7 @@ class ScalaTestEngine extends org.junit.platform.engine.TestEngine { val engineDesc = new EngineDescriptor(uniqueId, "ScalaTest EngineDescriptor") if (System.getProperty("org.scalatestplus.junit5.ScalaTestEngine.disabled") != "true") { - logger.info("Starting test discovery...") + logger.fine("Starting test discovery...") val alwaysTruePredicate = new java.util.function.Predicate[String]() { @@ -107,7 +107,11 @@ class ScalaTestEngine extends org.junit.platform.engine.TestEngine { .stream() .flatMap(addToParentFunction(context)) .collect(Collectors.toSet()) - Resolution.matches(matches) + if (matches.isEmpty) { + Resolution.unresolved() + } else { + Resolution.matches(matches) + } } override def resolve(selector: PackageSelector, context: SelectorResolver.Context): SelectorResolver.Resolution = { @@ -116,7 +120,11 @@ class ScalaTestEngine extends org.junit.platform.engine.TestEngine { .stream() .flatMap(addToParentFunction(context)) .collect(Collectors.toSet()) - Resolution.matches(matches) + if (matches.isEmpty) { + Resolution.unresolved() + } else { + Resolution.matches(matches) + } } override def resolve(selector: ModuleSelector, context: SelectorResolver.Context): SelectorResolver.Resolution = { @@ -125,7 +133,11 @@ class ScalaTestEngine extends org.junit.platform.engine.TestEngine { .stream() .flatMap(addToParentFunction(context)) .collect(Collectors.toSet()) - Resolution.matches(matches) + if (matches.isEmpty) { + Resolution.unresolved() + } else { + Resolution.matches(matches) + } } override def resolve(selector: ClassSelector, context: SelectorResolver.Context): SelectorResolver.Resolution = { @@ -234,7 +246,7 @@ class ScalaTestEngine extends org.junit.platform.engine.TestEngine { resolver.resolve(discoveryRequest, engineDesc) - logger.info("Completed test discovery, discovered suite count: " + engineDesc.getChildren.size()) + logger.config("Completed test discovery, discovered suite count: " + engineDesc.getChildren.size()) } engineDesc @@ -245,7 +257,7 @@ class ScalaTestEngine extends org.junit.platform.engine.TestEngine { */ def execute(request: ExecutionRequest): Unit = { if (System.getProperty("org.scalatestplus.junit5.ScalaTestEngine.disabled") != "true") { - logger.info("Start tests execution...") + logger.fine("Start tests execution...") val engineDesc = request.getRootTestDescriptor val listener = request.getEngineExecutionListener @@ -253,7 +265,7 @@ class ScalaTestEngine extends org.junit.platform.engine.TestEngine { engineDesc.getChildren.asScala.foreach { testDesc => testDesc match { case clzDesc: ScalaTestClassDescriptor => - logger.info("Start execution of suite class " + clzDesc.suiteClass.getName + "...") + logger.fine("Start execution of suite class " + clzDesc.suiteClass.getName + "...") listener.executionStarted(clzDesc) val suiteClass = clzDesc.suiteClass val canInstantiate = JUnitHelper.checkForPublicNoArgConstructor(suiteClass) && classOf[org.scalatest.Suite].isAssignableFrom(suiteClass) @@ -327,7 +339,7 @@ class ScalaTestEngine extends org.junit.platform.engine.TestEngine { listener.executionFinished(clzDesc, TestExecutionResult.successful()) - logger.info("Completed execution of suite class " + clzDesc.suiteClass.getName + ".") + logger.config("Completed execution of suite class " + clzDesc.suiteClass.getName + ".") case otherDesc => // Do nothing for other descriptor, just log it. @@ -335,7 +347,7 @@ class ScalaTestEngine extends org.junit.platform.engine.TestEngine { } } listener.executionFinished(engineDesc, TestExecutionResult.successful()) - logger.info("Completed tests execution.") + logger.fine("Completed tests execution.") } } } diff --git a/src/test/scala/org/scalatestplus/junit5/ScalaTestEngineSpec.scala b/src/test/scala/org/scalatestplus/junit5/ScalaTestEngineSpec.scala new file mode 100644 index 0000000..e8b00db --- /dev/null +++ b/src/test/scala/org/scalatestplus/junit5/ScalaTestEngineSpec.scala @@ -0,0 +1,58 @@ +package org.scalatestplus.junit5 + +import org.junit.platform.engine.UniqueId +import org.junit.platform.engine.discovery.ClasspathRootSelector +import org.junit.platform.engine.discovery.DiscoverySelectors.{selectClass, selectClasspathRoots, selectPackage} +import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder.request +import org.scalatest.funspec +import org.scalatestplus.junit5.helpers.HappySuite + +import java.nio.file.{Files, Path, Paths} +import scala.jdk.CollectionConverters.SetHasAsScala + +class ScalaTestEngineSpec extends funspec.AnyFunSpec { + val engine = new ScalaTestEngine + + describe("ScalaTestEngine") { + describe("discover method") { + it("should discover suites on classpath") { + val classPathRoot = classOf[ScalaTestEngineSpec].getProtectionDomain.getCodeSource.getLocation + val discoveryRequest = request.selectors( + selectClasspathRoots(java.util.Set.of(Paths.get(classPathRoot.toURI))) + ).build() + + val engineDescriptor = engine.discover(discoveryRequest, UniqueId.forEngine(engine.getId())) + assert(engineDescriptor.getChildren.asScala.exists(td => td.asInstanceOf[ScalaTestClassDescriptor].suiteClass == classOf[HappySuite])) + } + + it("should return unresolved for classpath without any tests") { + val emptyPath = Files.createTempDirectory(null) + val discoveryRequest = request.selectors( + selectClasspathRoots(java.util.Set.of(emptyPath)) + ).build() + + val engineDescriptor = engine.discover(discoveryRequest, UniqueId.forEngine(engine.getId())) + assert(engineDescriptor.getChildren.asScala.isEmpty) + } + + it("should discover suites in package") { + val classPathRoot = classOf[ScalaTestEngineSpec].getProtectionDomain.getCodeSource.getLocation + val discoveryRequest = request.selectors( + selectPackage("org.scalatestplus.junit5.helpers") + ).build() + + val engineDescriptor = engine.discover(discoveryRequest, UniqueId.forEngine(engine.getId())) + assert(engineDescriptor.getChildren.asScala.exists(td => td.asInstanceOf[ScalaTestClassDescriptor].suiteClass == classOf[HappySuite])) + } + + it("should return unresolved for package without any tests") { + val discoveryRequest = request.selectors( + selectPackage("org.scalatestplus.junit5.nonexistant") + ).build() + + val engineDescriptor = engine.discover(discoveryRequest, UniqueId.forEngine(engine.getId())) + assert(engineDescriptor.getChildren.asScala.isEmpty) + } + } + } +}