From 9d3b626567b3ae737290f002dfc58714c3180007 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Fri, 17 May 2019 14:24:55 -0400 Subject: [PATCH] Fix ScalaTest issue with ScalaLibrary classloader Ref #4689 Ref #4671 --- .../main/scala/sbt/internal/ClassLoaders.scala | 5 +++-- .../classloader-cache/scalatest/build.sbt | 2 +- .../changes/{ScalatestTest.scala => bad.scala} | 0 .../sbt-test/classloader-cache/scalatest/test | 18 ++++++++++++++++-- .../scala/sbt/scriptedtest/ScriptedTests.scala | 17 +++++++---------- 5 files changed, 27 insertions(+), 15 deletions(-) rename sbt/src/sbt-test/classloader-cache/scalatest/changes/{ScalatestTest.scala => bad.scala} (100%) diff --git a/main/src/main/scala/sbt/internal/ClassLoaders.scala b/main/src/main/scala/sbt/internal/ClassLoaders.scala index d45c1e89e..d56290d1e 100644 --- a/main/src/main/scala/sbt/internal/ClassLoaders.scala +++ b/main/src/main/scala/sbt/internal/ClassLoaders.scala @@ -146,8 +146,9 @@ private[sbt] object ClassLoaders { val allTestDependencies = if (layerTestDependencies) allDependenciesSet else Set.empty[File] val allRuntimeDependencies = (if (layerDependencies) rawRuntimeDependencies else Nil).toSet + val scalaLibrarySet = Set(si.libraryJar) val scalaLibraryLayer = - globalCache.get((List(si.libraryJar), interfaceLoader, resources, tmp)) + globalCache.get((scalaLibrarySet.toList, interfaceLoader, resources, tmp)) // layer 2 val runtimeDependencySet = allDependenciesSet intersect allRuntimeDependencies val runtimeDependencies = rawRuntimeDependencies.filter(runtimeDependencySet) @@ -163,7 +164,7 @@ private[sbt] object ClassLoaders { // layer 4 val dynamicClasspath = - fullCP.filterNot(testDependencySet ++ runtimeDependencies ++ si.allJars) + fullCP.filterNot(testDependencySet ++ runtimeDependencies ++ scalaLibrarySet) if (dynamicClasspath.nonEmpty) new LayeredClassLoader(dynamicClasspath, testLayer, resources, tmp) else testLayer diff --git a/sbt/src/sbt-test/classloader-cache/scalatest/build.sbt b/sbt/src/sbt-test/classloader-cache/scalatest/build.sbt index 9f62ac7ad..b32a1cd0b 100644 --- a/sbt/src/sbt-test/classloader-cache/scalatest/build.sbt +++ b/sbt/src/sbt-test/classloader-cache/scalatest/build.sbt @@ -1,3 +1,3 @@ val test = (project in file(".")).settings( - libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.4" % "test" + libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.7" % Test ) \ No newline at end of file diff --git a/sbt/src/sbt-test/classloader-cache/scalatest/changes/ScalatestTest.scala b/sbt/src/sbt-test/classloader-cache/scalatest/changes/bad.scala similarity index 100% rename from sbt/src/sbt-test/classloader-cache/scalatest/changes/ScalatestTest.scala rename to sbt/src/sbt-test/classloader-cache/scalatest/changes/bad.scala diff --git a/sbt/src/sbt-test/classloader-cache/scalatest/test b/sbt/src/sbt-test/classloader-cache/scalatest/test index 5ad5d9538..2fb0d98cd 100644 --- a/sbt/src/sbt-test/classloader-cache/scalatest/test +++ b/sbt/src/sbt-test/classloader-cache/scalatest/test @@ -1,5 +1,19 @@ > test -$ copy-file changes/ScalatestTest.scala src/test/scala/sbt/ScalatestTest.scala +> set Test / classLoaderLayeringStrategy := ClassLoaderLayeringStrategy.ShareRuntimeDependenciesLayerWithTestDependencies --> test \ No newline at end of file +> test + +> set Test / classLoaderLayeringStrategy := ClassLoaderLayeringStrategy.Flat + +> test + +> set Test / classLoaderLayeringStrategy := ClassLoaderLayeringStrategy.ScalaLibrary + +> test + +> set Test / classLoaderLayeringStrategy := ClassLoaderLayeringStrategy.TestDependencies + +$ copy-file changes/bad.scala src/test/scala/sbt/ScalatestTest.scala + +-> test diff --git a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala index 37937e060..bd28fa6d3 100644 --- a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala +++ b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala @@ -181,16 +181,13 @@ final class ScriptedTests( import RemoteSbtCreatorKind._ val (group, name) = testName s"$group/$name" match { - case "actions/add-alias" => LauncherBased // sbt/Package$ - case "actions/cross-multiproject" => LauncherBased // tbd - case "actions/external-doc" => LauncherBased // sbt/Package$ - case "actions/input-task" => LauncherBased // sbt/Package$ - case "actions/input-task-dyn" => LauncherBased // sbt/Package$ - case "classloader-cache/akka-actor-system" => LauncherBased // sbt/Package$ - case "classloader-cache/jni" => LauncherBased // sbt/Package$ - case "classloader-cache/library-mismatch" => LauncherBased // sbt/Package$ - case "classloader-cache/runtime-layers" => LauncherBased // sbt/Package$ - case "classloader-cache/package-private" => LauncherBased // sbt/Package$ + case "actions/add-alias" => LauncherBased // sbt/Package$ + case "actions/cross-multiproject" => LauncherBased // tbd + case "actions/external-doc" => LauncherBased // sbt/Package$ + case "actions/input-task" => LauncherBased // sbt/Package$ + case "actions/input-task-dyn" => LauncherBased // sbt/Package$ + case gn if gn.startsWith("classloader-cache/") => + LauncherBased // This should be tested using launcher case "compiler-project/dotty-compiler-plugin" => LauncherBased // sbt/Package$ case "compiler-project/run-test" => LauncherBased // sbt/Package$ case "compiler-project/src-dep-plugin" => LauncherBased // sbt/Package$