From 5b2b32597016d5cbf4e4195fb2327fc83db8bfbe Mon Sep 17 00:00:00 2001 From: Daniel Leech Date: Sun, 19 Sep 2021 18:56:53 +0100 Subject: [PATCH 1/2] Fix begin interface Avoid calling info() with a NULL value --- .../MessageProgressNotifier.php | 12 ++++- ...apabilityDependentProgressNotifierTest.php | 2 +- .../MessageProgressNotifierTest.php | 51 +++++++++++++++++++ 3 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 tests/Unit/WorkDoneProgress/MessageProgressNotifierTest.php 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)); + } +} From d8e8f32bb8b50f21ee4fa3e5eae76a284a118eea Mon Sep 17 00:00:00 2001 From: Daniel Leech Date: Sun, 19 Sep 2021 18:57:28 +0100 Subject: [PATCH 2/2] Add closure command for testing --- lib/Core/Command/ClosureCommand.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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); }