Skip to content

Commit

Permalink
bugfix: Include data arguments as part of debug parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
masonedmison authored and tgodzik committed Sep 5, 2024
1 parent f3657de commit f965ca8
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import scala.meta.internal.metals.BuildTargets
import scala.meta.internal.metals.DebugDiscoveryParams
import scala.meta.internal.metals.JavaBinary
import scala.meta.internal.metals.JsonParser._
import scala.meta.internal.metals.JvmOpts
import scala.meta.internal.metals.Messages
import scala.meta.internal.metals.MetalsBuildClient
import scala.meta.internal.metals.MetalsEnrichments._
Expand Down Expand Up @@ -273,13 +274,37 @@ class DebugDiscovery(
if (mains.nonEmpty) {
findMainToRun(Map(buildTarget -> mains.toList), params)
} else if (tests.nonEmpty) {
Future {
val params = new b.DebugSessionParams(singletonList(buildTarget))
params.setDataKind(b.TestParamsDataKind.SCALA_TEST_SUITES)
params.setData(tests.asJava.toJson)
params
DebugProvider.envFromFile(workspace, Option(params.envFile)).map {
envFromFile =>
val env =
Option(params.env).toList.flatMap(DebugProvider.createEnvList)

val jvmOpts =
JvmOpts.fromWorkspaceOrEnvForTest(workspace).getOrElse(Nil)
val scalaTestSuite = new b.ScalaTestSuites(
tests
.map(
new b.ScalaTestSuiteSelection(
_,
Nil.asJava,
)
)
.asJava,
Option(params.jvmOptions)
.map(jvmOpts ++ _.asScala)
.getOrElse(jvmOpts)
.asJava,
(envFromFile ::: env).asJava,
)
val debugParams = new b.DebugSessionParams(
singletonList(buildTarget)
)
debugParams.setDataKind(
b.TestParamsDataKind.SCALA_TEST_SUITES_SELECTION
)
debugParams.setData(scalaTestSuite.toJson)
debugParams
}

} else {
Future.failed(NoRunOptionException)
}
Expand Down
29 changes: 27 additions & 2 deletions tests/unit/src/test/scala/tests/DebugDiscoverySuite.scala
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
package tests

import java.nio.file.Files
import java.nio.file.Path
import java.util.concurrent.TimeUnit

import scala.jdk.CollectionConverters.MapHasAsJava
import scala.util.Random

import scala.meta.internal.metals.DebugDiscoveryParams
import scala.meta.internal.metals.JsonParser._
import scala.meta.internal.metals.ServerCommands
Expand Down Expand Up @@ -136,6 +141,13 @@ class DebugDiscoverySuite
}

test("run-file-test") {
val envFile: Path =
Files.write(
workspace
.resolve(Random.alphanumeric.take(10).mkString.toLowerCase + ".env")
.toNIO,
"BAR=BAZ".getBytes(),
)
for {
_ <- initialize(
s"""/metals.json
Expand All @@ -147,7 +159,11 @@ class DebugDiscoverySuite
|/${fooPath}
|package a
|class Foo extends org.scalatest.funsuite.AnyFunSuite {
| test("foo") {}
| test("foo") {
| val foo = sys.env("FOO")
| val bar = sys.env("BAR")
| print(s"$$foo $$bar")
|}
|}
|""".stripMargin
)
Expand All @@ -158,14 +174,23 @@ class DebugDiscoverySuite
new DebugDiscoveryParams(
server.toPath(fooPath).toURI.toString,
"runOrTestFile",
env = Map("FOO" -> "BAR").asJava,
envFile = envFile.getFileName.toString,
).toJson
)
_ <- debugger.initialize
_ <- debugger.launch
_ <- debugger.configurationDone
_ <- debugger.shutdown
output <- debugger.allOutput
} yield assert(output.contains("All tests in a.Foo passed"))
} yield assert(
output.contains(
"""|All tests in a.Foo passed
|
|BAR BAZ
|""".stripMargin
)
)
}

test("no-run-or-test") {
Expand Down

0 comments on commit f965ca8

Please sign in to comment.