Skip to content

Commit f8b6d4f

Browse files
committed
Merge branch 'fix-spinner'
2 parents 8134752 + 9a3f7f2 commit f8b6d4f

File tree

3 files changed

+146
-2
lines changed

3 files changed

+146
-2
lines changed

codecov.yml

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
component_management:
2+
individual_components:
3+
- component_id: cache
4+
name: Cache
5+
paths:
6+
- "src/Toolkit/Cache/**"
7+
- component_id: cli
8+
name: Cli
9+
paths:
10+
- "src/Toolkit/Cli/**"
11+
- component_id: collections
12+
name: Collections
13+
paths:
14+
- "src/Toolkit/Collection/**"
15+
- component_id: console
16+
name: Console
17+
paths:
18+
- "src/Toolkit/Console/**"
19+
- component_id: container
20+
name: Container
21+
paths:
22+
- "src/Toolkit/Container/**"
23+
- component_id: contracts
24+
name: Contracts
25+
paths:
26+
- "src/Toolkit/Contract/**"
27+
- component_id: core
28+
name: Core
29+
paths:
30+
- "src/Toolkit/Core/**"
31+
- component_id: curler
32+
name: Curler
33+
paths:
34+
- "src/Toolkit/Curler/**"
35+
- component_id: db
36+
name: Db
37+
paths:
38+
- "src/Toolkit/Db/**"
39+
- component_id: http
40+
name: Http
41+
paths:
42+
- "src/Toolkit/Http/**"
43+
- component_id: iterators
44+
name: Iterators
45+
paths:
46+
- "src/Toolkit/Iterator/**"
47+
- component_id: phpdoc
48+
name: PHPDoc
49+
paths:
50+
- "src/Toolkit/PHPDoc/**"
51+
- component_id: phpstan
52+
name: PHPStan
53+
paths:
54+
- "src/Toolkit/PHPStan/**"
55+
- component_id: polyfills
56+
name: Polyfills
57+
paths:
58+
- "src/Toolkit/Polyfill/**"
59+
- component_id: sli
60+
name: Sli
61+
paths:
62+
- "src/Toolkit/Sli/**"
63+
- component_id: sync
64+
name: Sync
65+
paths:
66+
- "src/Toolkit/Sync/**"
67+
- component_id: utils
68+
name: Utils
69+
paths:
70+
- "src/Toolkit/Utility/**"
71+
72+
comment:
73+
layout: "condensed_header, condensed_files, condensed_footer, components"

src/Toolkit/Console/Support/ConsoleWriterState.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ final class ConsoleWriterState
3636
public array $Written = [];
3737
/** @var string[] */
3838
public array $LastWritten = [];
39-
/** @var array{int<0,max>,float} */
40-
public array $SpinnerState;
39+
/** @var array{int<0,max>,float}|null */
40+
public ?array $SpinnerState;
4141
public LoggerInterface $Logger;
4242
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Salient\Tests\Console;
4+
5+
use Salient\Console\Support\ConsoleWriterState;
6+
use Salient\Console\Target\MockTarget;
7+
use Salient\Console\ConsoleWriter;
8+
use Salient\Contract\Core\MessageLevel;
9+
use Salient\Core\Facade\Console;
10+
use Salient\Tests\TestCase;
11+
12+
/**
13+
* @covers \Salient\Console\ConsoleWriter
14+
* @covers \Salient\Console\ConsoleFormatter
15+
*/
16+
final class ConsoleWriterTest extends TestCase
17+
{
18+
private ConsoleWriter $Writer;
19+
private MockTarget $Target;
20+
21+
protected function setUp(): void
22+
{
23+
$this->Writer = new ConsoleWriter();
24+
$this->Target = new MockTarget();
25+
$this->Writer->registerTarget($this->Target);
26+
27+
Console::load($this->Writer);
28+
}
29+
30+
protected function tearDown(): void
31+
{
32+
Console::unload();
33+
}
34+
35+
public function testLogProgress(): void
36+
{
37+
$state = $this->getState();
38+
for ($i = 0; $i < 11; $i++) {
39+
if (isset($state->SpinnerState)) {
40+
$state->SpinnerState = [
41+
$state->SpinnerState[0] + 1,
42+
(float) (hrtime(true) / 1000),
43+
];
44+
}
45+
Console::logProgress('Complete:', sprintf('%d%%', ($i + 1) * 100 / 11));
46+
}
47+
48+
$this->assertSameConsoleMessages([
49+
[MessageLevel::INFO, "⠋ Complete: 9%\r"],
50+
[MessageLevel::INFO, "⠙ Complete: 18%\r"],
51+
[MessageLevel::INFO, "⠹ Complete: 27%\r"],
52+
[MessageLevel::INFO, "⠸ Complete: 36%\r"],
53+
[MessageLevel::INFO, "⠼ Complete: 45%\r"],
54+
[MessageLevel::INFO, "⠴ Complete: 54%\r"],
55+
[MessageLevel::INFO, "⠦ Complete: 63%\r"],
56+
[MessageLevel::INFO, "⠧ Complete: 72%\r"],
57+
[MessageLevel::INFO, "⠇ Complete: 81%\r"],
58+
[MessageLevel::INFO, "⠏ Complete: 90%\r"],
59+
[MessageLevel::INFO, "⠋ Complete: 100%\r"],
60+
], $this->Target->getMessages());
61+
}
62+
63+
private function getState(): ConsoleWriterState
64+
{
65+
return (function () {
66+
/** @var ConsoleWriter $this */
67+
// @phpstan-ignore property.private
68+
return $this->State;
69+
})->bindTo($this->Writer, $this->Writer)();
70+
}
71+
}

0 commit comments

Comments
 (0)