diff --git a/lib/Core/Command/ClosureCommand.php b/lib/Core/Command/ClosureCommand.php index 1d22e13..bd74507 100644 --- a/lib/Core/Command/ClosureCommand.php +++ b/lib/Core/Command/ClosureCommand.php @@ -20,7 +20,8 @@ public function __construct(Closure $closure) * @param mixed[] $args * @return mixed */ - public function __invoke(...$args) { + public function __invoke(...$args) + { $closure = $this->closure; return $closure(...$args); } diff --git a/lib/WorkDoneProgress/MessageProgressNotifier.php b/lib/WorkDoneProgress/MessageProgressNotifier.php index d7dccf4..0dfa888 100644 --- a/lib/WorkDoneProgress/MessageProgressNotifier.php +++ b/lib/WorkDoneProgress/MessageProgressNotifier.php @@ -42,7 +42,17 @@ public function begin( ?int $percentage = null, ?bool $cancellable = null ): void { - $this->api->info($message); + $progress = [ + $title + ]; + + if ($message) { + $progress[] = sprintf(': %s', $message); + } + if ($percentage) { + $progress[] = sprintf(', %d%% done', $percentage); + } + $this->api->info(implode('', $progress)); } /** diff --git a/tests/Unit/WorkDoneProgress/ClientCapabilityDependentProgressNotifierTest.php b/tests/Unit/WorkDoneProgress/ClientCapabilityDependentProgressNotifierTest.php index 4f7d7c9..3e220ab 100644 --- a/tests/Unit/WorkDoneProgress/ClientCapabilityDependentProgressNotifierTest.php +++ b/tests/Unit/WorkDoneProgress/ClientCapabilityDependentProgressNotifierTest.php @@ -81,7 +81,7 @@ public function testNotifyWithoutWorkDoneProgressCapability(): void $message = $this->transmitter->shiftNotification(); self::assertEquals('window/showMessage', $message->method); self::assertEquals(MessageType::INFO, $message->params['type']); - self::assertEquals('begin message', $message->params['message']); + self::assertEquals('title: begin message', $message->params['message']); $notifier->report($token, 'report message', 30); $message = $this->transmitter->shiftNotification(); diff --git a/tests/Unit/WorkDoneProgress/MessageProgressNotifierTest.php b/tests/Unit/WorkDoneProgress/MessageProgressNotifierTest.php new file mode 100644 index 0000000..96e8317 --- /dev/null +++ b/tests/Unit/WorkDoneProgress/MessageProgressNotifierTest.php @@ -0,0 +1,51 @@ +transmitter = new TestMessageTransmitter(); + $this->api = new TestRpcClient($this->transmitter, new TestResponseWatcher()); + } + + public function testBegin(): void + { + $token = WorkDoneToken::generate(); + $this->createNotifier()->begin($token, 'Hello'); + self::assertEquals(1, $this->transmitter->count()); + self::assertEquals('Hello', $this->transmitter->shiftNotification()->params['message']); + } + + public function testBeginMessageAndPercentage(): void + { + $token = WorkDoneToken::generate(); + $this->createNotifier()->begin($token, 'Indexer', 'this may take some time', 50); + self::assertEquals(1, $this->transmitter->count()); + self::assertEquals('Indexer: this may take some time, 50% done', $this->transmitter->shiftNotification()->params['message']); + } + + private function createNotifier(): ProgressNotifier + { + return new MessageProgressNotifier(new ClientApi($this->api)); + } +}