From 66f4032699d69f6b854d43fe0de92a190ede78da Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Thu, 22 Oct 2020 11:09:00 +0200 Subject: [PATCH] Fix BuildServerReporter and add tests --- .../internal/server/BuildServerReporter.scala | 16 +++--- .../src/server-test/buildserver/build.sbt | 12 +++-- .../foo/src/test/scala/foo/FooTest.scala | 9 ---- .../src/main/scala/reporterror/Error.scala | 5 ++ .../main/scala/reportwarning/Warning.scala | 7 +++ .../src/main/scala/main/Main.scala} | 4 +- .../src/test/scala/tests}/FailingTest.scala | 2 +- .../src/test/scala/tests/PassingTest.scala | 9 ++++ .../test/scala/testpkg/BuildServerTest.scala | 49 +++++++++++++++---- 9 files changed, 80 insertions(+), 33 deletions(-) delete mode 100644 server-test/src/server-test/buildserver/foo/src/test/scala/foo/FooTest.scala create mode 100644 server-test/src/server-test/buildserver/report-error/src/main/scala/reporterror/Error.scala create mode 100644 server-test/src/server-test/buildserver/report-warning/src/main/scala/reportwarning/Warning.scala rename server-test/src/server-test/buildserver/{foo/src/main/scala/foo/FooMain.scala => run-and-test/src/main/scala/main/Main.scala} (59%) rename server-test/src/server-test/buildserver/{foo/src/test/scala/foo => run-and-test/src/test/scala/tests}/FailingTest.scala (90%) create mode 100644 server-test/src/server-test/buildserver/run-and-test/src/test/scala/tests/PassingTest.scala diff --git a/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala b/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala index c6c95106c..164f03832 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala @@ -7,6 +7,8 @@ package sbt.internal.server +import java.nio.file.Path + import sbt.StandardMain import sbt.internal.bsp._ import sbt.internal.util.ManagedLogger @@ -69,7 +71,7 @@ final class BuildServerReporterImpl( import sbt.internal.inc.JavaInterfaceUtil._ private lazy val exchange = StandardMain.exchange - private val problemsByFile = mutable.Map[VirtualFileRef, Vector[Diagnostic]]() + private val problemsByFile = mutable.Map[Path, Vector[Diagnostic]]() override def sendSuccessReport(analysis: CompileAnalysis): Unit = { for { @@ -90,9 +92,8 @@ final class BuildServerReporterImpl( override def sendFailureReport(sources: Array[VirtualFile]): Unit = { for (source <- sources) { - val ref = VirtualFileRef.of(source.id()) - val diagnostics = problemsByFile.getOrElse(ref, Vector()) val filePath = converter.toPath(source) + val diagnostics = problemsByFile.getOrElse(filePath, Vector()) val params = PublishDiagnosticsParams( textDocument = TextDocumentIdentifier(filePath.toUri), buildTarget, @@ -106,14 +107,13 @@ final class BuildServerReporterImpl( protected override def publishDiagnostic(problem: Problem): Unit = { for { - path <- problem.position().sourcePath.toOption - source <- problem.position.sourceFile.toOption + id <- problem.position.sourcePath.toOption diagnostic <- toDiagnostic(problem) } { - val fileId = VirtualFileRef.of(path) - problemsByFile(fileId) = problemsByFile.getOrElse(fileId, Vector()) :+ diagnostic + val filePath = converter.toPath(VirtualFileRef.of(id)) + problemsByFile(filePath) = problemsByFile.getOrElse(filePath, Vector()) :+ diagnostic val params = PublishDiagnosticsParams( - TextDocumentIdentifier(source.toURI), + TextDocumentIdentifier(filePath.toUri), buildTarget, originId = None, Vector(diagnostic), diff --git a/server-test/src/server-test/buildserver/build.sbt b/server-test/src/server-test/buildserver/build.sbt index fbbfc556b..e1a151256 100644 --- a/server-test/src/server-test/buildserver/build.sbt +++ b/server-test/src/server-test/buildserver/build.sbt @@ -2,13 +2,17 @@ ThisBuild / scalaVersion := "2.13.1" Global / serverLog / logLevel := Level.Debug -lazy val root = (project in file(".")) - .aggregate(foo, util) - -lazy val foo = project.in(file("foo")) +lazy val runAndTest = project.in(file("run-and-test")) .settings( libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.8" % "test", ) .dependsOn(util) +lazy val reportError = project.in(file("report-error")) + +lazy val reportWarning = project.in(file("report-warning")) + .settings( + scalacOptions += "-deprecation" + ) + lazy val util = project diff --git a/server-test/src/server-test/buildserver/foo/src/test/scala/foo/FooTest.scala b/server-test/src/server-test/buildserver/foo/src/test/scala/foo/FooTest.scala deleted file mode 100644 index 1874da8c1..000000000 --- a/server-test/src/server-test/buildserver/foo/src/test/scala/foo/FooTest.scala +++ /dev/null @@ -1,9 +0,0 @@ -package foo - -import org.scalatest.FreeSpec - -class FooTest extends FreeSpec { - "test message" in { - assert(FooMain.message == "Hello World!") - } -} \ No newline at end of file diff --git a/server-test/src/server-test/buildserver/report-error/src/main/scala/reporterror/Error.scala b/server-test/src/server-test/buildserver/report-error/src/main/scala/reporterror/Error.scala new file mode 100644 index 000000000..496e48b8e --- /dev/null +++ b/server-test/src/server-test/buildserver/report-error/src/main/scala/reporterror/Error.scala @@ -0,0 +1,5 @@ +package reportertests + +object Error { + val version: String = 5 +} diff --git a/server-test/src/server-test/buildserver/report-warning/src/main/scala/reportwarning/Warning.scala b/server-test/src/server-test/buildserver/report-warning/src/main/scala/reportwarning/Warning.scala new file mode 100644 index 000000000..6a9554a70 --- /dev/null +++ b/server-test/src/server-test/buildserver/report-warning/src/main/scala/reportwarning/Warning.scala @@ -0,0 +1,7 @@ +package reportertests + +object Warning { + def print() { + prtinln("bar") + } +} diff --git a/server-test/src/server-test/buildserver/foo/src/main/scala/foo/FooMain.scala b/server-test/src/server-test/buildserver/run-and-test/src/main/scala/main/Main.scala similarity index 59% rename from server-test/src/server-test/buildserver/foo/src/main/scala/foo/FooMain.scala rename to server-test/src/server-test/buildserver/run-and-test/src/main/scala/main/Main.scala index 348be2497..8ccc2eb6c 100644 --- a/server-test/src/server-test/buildserver/foo/src/main/scala/foo/FooMain.scala +++ b/server-test/src/server-test/buildserver/run-and-test/src/main/scala/main/Main.scala @@ -1,6 +1,6 @@ -package foo +package main -object FooMain extends App { +object Main extends App { lazy val message = "Hello World!" println(message) diff --git a/server-test/src/server-test/buildserver/foo/src/test/scala/foo/FailingTest.scala b/server-test/src/server-test/buildserver/run-and-test/src/test/scala/tests/FailingTest.scala similarity index 90% rename from server-test/src/server-test/buildserver/foo/src/test/scala/foo/FailingTest.scala rename to server-test/src/server-test/buildserver/run-and-test/src/test/scala/tests/FailingTest.scala index 886d3d6aa..ee03bfbb4 100644 --- a/server-test/src/server-test/buildserver/foo/src/test/scala/foo/FailingTest.scala +++ b/server-test/src/server-test/buildserver/run-and-test/src/test/scala/tests/FailingTest.scala @@ -1,4 +1,4 @@ -package foo +package tests import org.scalatest.FreeSpec diff --git a/server-test/src/server-test/buildserver/run-and-test/src/test/scala/tests/PassingTest.scala b/server-test/src/server-test/buildserver/run-and-test/src/test/scala/tests/PassingTest.scala new file mode 100644 index 000000000..9dab63ca9 --- /dev/null +++ b/server-test/src/server-test/buildserver/run-and-test/src/test/scala/tests/PassingTest.scala @@ -0,0 +1,9 @@ +package tests + +import org.scalatest.FreeSpec + +class PassingTest extends FreeSpec { + "test message" in { + assert(main.Main.message == "Hello World!") + } +} \ No newline at end of file diff --git a/server-test/src/test/scala/testpkg/BuildServerTest.scala b/server-test/src/test/scala/testpkg/BuildServerTest.scala index c6d9c75ec..3f0a7acea 100644 --- a/server-test/src/test/scala/testpkg/BuildServerTest.scala +++ b/server-test/src/test/scala/testpkg/BuildServerTest.scala @@ -86,7 +86,7 @@ object BuildServerTest extends AbstractServerTest { } test("buildTarget/scalaMainClasses") { _ => - val x = s"${svr.baseDirectory.getAbsoluteFile.toURI}#foo/Compile" + val x = s"${svr.baseDirectory.getAbsoluteFile.toURI}#runAndTest/Compile" svr.sendJsonRpc( s"""{ "jsonrpc": "2.0", "id": "16", "method": "buildTarget/scalaMainClasses", "params": { | "targets": [{ "uri": "$x" }] @@ -95,17 +95,17 @@ object BuildServerTest extends AbstractServerTest { assert(svr.waitForString(30.seconds) { s => println(s) (s contains """"id":"16"""") && - (s contains """"class":"foo.FooMain"""") + (s contains """"class":"main.Main"""") }) } test("buildTarget/run") { _ => - val x = s"${svr.baseDirectory.getAbsoluteFile.toURI}#foo/Compile" + val x = s"${svr.baseDirectory.getAbsoluteFile.toURI}#runAndTest/Compile" svr.sendJsonRpc( s"""{ "jsonrpc": "2.0", "id": "17", "method": "buildTarget/run", "params": { | "target": { "uri": "$x" }, | "dataKind": "scala-main-class", - | "data": { "class": "foo.FooMain" } + | "data": { "class": "main.Main" } |} }""".stripMargin ) assert(svr.waitForString(10.seconds) { s => @@ -121,7 +121,7 @@ object BuildServerTest extends AbstractServerTest { } test("buildTarget/scalaTestClasses") { _ => - val x = s"${svr.baseDirectory.getAbsoluteFile.toURI}#foo/Test" + val x = s"${svr.baseDirectory.getAbsoluteFile.toURI}#runAndTest/Test" svr.sendJsonRpc( s"""{ "jsonrpc": "2.0", "id": "18", "method": "buildTarget/scalaTestClasses", "params": { | "targets": [{ "uri": "$x" }] @@ -130,12 +130,13 @@ object BuildServerTest extends AbstractServerTest { assert(svr.waitForString(10.seconds) { s => println(s) (s contains """"id":"18"""") && - (s contains """"classes":["foo.FailingTest","foo.FooTest"]""") + (s contains """"tests.FailingTest"""") && + (s contains """"tests.PassingTest"""") }) } test("buildTarget/test: run all tests") { _ => - val x = s"${svr.baseDirectory.getAbsoluteFile.toURI}#foo/Test" + val x = s"${svr.baseDirectory.getAbsoluteFile.toURI}#runAndTest/Test" svr.sendJsonRpc( s"""{ "jsonrpc": "2.0", "id": "19", "method": "buildTarget/test", "params": { | "targets": [{ "uri": "$x" }] @@ -149,7 +150,7 @@ object BuildServerTest extends AbstractServerTest { } test("buildTarget/test: run one test class") { _ => - val x = s"${svr.baseDirectory.getAbsoluteFile.toURI}#foo/Test" + val x = s"${svr.baseDirectory.getAbsoluteFile.toURI}#runAndTest/Test" svr.sendJsonRpc( s"""{ "jsonrpc": "2.0", "id": "20", "method": "buildTarget/test", "params": { | "targets": [{ "uri": "$x" }], @@ -158,7 +159,7 @@ object BuildServerTest extends AbstractServerTest { | "testClasses": [ | { | "target": { "uri": "$x" }, - | "classes": ["foo.FooTest"] + | "classes": ["tests.PassingTest"] | } | ] | } @@ -171,6 +172,36 @@ object BuildServerTest extends AbstractServerTest { }) } + test("buildTarget/compile: report error") { _ => + val x = s"${svr.baseDirectory.getAbsoluteFile.toURI}#reportError/Compile" + svr.sendJsonRpc( + s"""{ "jsonrpc": "2.0", "id": "21", "method": "buildTarget/compile", "params": { + | "targets": [{ "uri": "$x" }] + |} }""".stripMargin + ) + assert(svr.waitForString(10.seconds) { s => + println(s) + (s contains s""""buildTarget":{"uri":"$x"}""") && + (s contains """"severity":1""") && + (s contains """"reset":true""") + }) + } + + test("buildTarget/compile: report warning") { _ => + val x = s"${svr.baseDirectory.getAbsoluteFile.toURI}#reportWarning/Compile" + svr.sendJsonRpc( + s"""{ "jsonrpc": "2.0", "id": "22", "method": "buildTarget/compile", "params": { + | "targets": [{ "uri": "$x" }] + |} }""".stripMargin + ) + assert(svr.waitForString(10.seconds) { s => + println(s) + (s contains s""""buildTarget":{"uri":"$x"}""") && + (s contains """"severity":2""") && + (s contains """"reset":true""") + }) + } + def initializeRequest(): Unit = { svr.sendJsonRpc( """{ "jsonrpc": "2.0", "id": "10", "method": "build/initialize",