From 9986fb6eed08e2438233a750dcad219e8dfabdab Mon Sep 17 00:00:00 2001 From: Igal Tabachnik Date: Fri, 10 Sep 2021 01:02:26 +0300 Subject: [PATCH] Adding a test verifying task progress reports (task start/progress/finish) --- main/src/main/scala/sbt/Defaults.scala | 4 +-- .../internal/server/BspCompileProgress.scala | 18 ++++++++++-- .../test/scala/testpkg/BuildServerTest.scala | 29 +++++++++++++++++++ 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 6246970f4..75954a04c 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -2353,9 +2353,7 @@ object Defaults extends BuildCommon { ) } def onProgress(s: Setup) = { - val cp: BspCompileProgress = s.progress.asScala - .map(p => new BspCompileProgress(task, Some(p))) - .getOrElse(new BspCompileProgress(task, None)) + val cp = new BspCompileProgress(task, s.progress.asScala) s.withProgress(cp) } val compilers: Compilers = ci.compilers diff --git a/main/src/main/scala/sbt/internal/server/BspCompileProgress.scala b/main/src/main/scala/sbt/internal/server/BspCompileProgress.scala index 7b882e2a1..c445a9fe4 100644 --- a/main/src/main/scala/sbt/internal/server/BspCompileProgress.scala +++ b/main/src/main/scala/sbt/internal/server/BspCompileProgress.scala @@ -1,3 +1,10 @@ +/* + * sbt + * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * Licensed under Apache License 2.0 (see LICENSE) + */ + package sbt.internal.server import xsbti.compile.CompileProgress @@ -18,7 +25,14 @@ private[sbt] final class BspCompileProgress( if (shouldReportPercentage) { task.notifyProgress(percentage, total) } - underlying.foreach(_.advance(current, total, prevPhase, nextPhase)) - true + underlying.fold(true)(_.advance(current, total, prevPhase, nextPhase)) + } + + override def startUnit(phase: String, unitPath: String): Unit = { + underlying.foreach(_.startUnit(phase, unitPath)) + } + + override def afterEarlyOutput(success: Boolean): Unit = { + underlying.foreach(_.afterEarlyOutput(success)) } } diff --git a/server-test/src/test/scala/testpkg/BuildServerTest.scala b/server-test/src/test/scala/testpkg/BuildServerTest.scala index d54659038..c485373f4 100644 --- a/server-test/src/test/scala/testpkg/BuildServerTest.scala +++ b/server-test/src/test/scala/testpkg/BuildServerTest.scala @@ -94,6 +94,35 @@ object BuildServerTest extends AbstractServerTest { assert(res.statusCode == StatusCode.Success) } + test("buildTarget/compile - reports compilation progress") { _ => + val buildTarget = buildTargetUri("runAndTest", "Compile") + svr.sendJsonRpc( + s"""{ "jsonrpc": "2.0", "id": "33", "method": "buildTarget/compile", "params": { + | "targets": [{ "uri": "$buildTarget" }] + |} }""".stripMargin + ) + + assert(svr.waitForString(10.seconds) { s => + s.contains("build/taskStart") && + s.contains(""""message":"Compiling runAndTest"""") + }) + + assert(svr.waitForString(10.seconds) { s => + s.contains("build/taskProgress") && + s.contains(""""message":"Compiling runAndTest (15%)"""") + }) + + assert(svr.waitForString(10.seconds) { s => + s.contains("build/taskProgress") && + s.contains(""""message":"Compiling runAndTest (100%)"""") + }) + + assert(svr.waitForString(10.seconds) { s => + s.contains("build/taskFinish") && + s.contains(""""message":"Compiled runAndTest"""") + }) + } + test("buildTarget/scalacOptions") { _ => val buildTarget = buildTargetUri("util", "Compile") val badBuildTarget = buildTargetUri("badBuildTarget", "Compile")