forked from phpstan/phpstan-src
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathErrorsConsoleStyleTest.php
More file actions
92 lines (76 loc) · 2.2 KB
/
ErrorsConsoleStyleTest.php
File metadata and controls
92 lines (76 loc) · 2.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php declare(strict_types = 1);
namespace PHPStan\Command;
use Override;
use PHPStan\Internal\AgentDetector;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Console\Input\StringInput;
use Symfony\Component\Console\Output\StreamOutput;
use function fclose;
use function fopen;
use function getenv;
use function putenv;
use function rewind;
use function rtrim;
use function str_replace;
use function stream_get_contents;
class ErrorsConsoleStyleTest extends TestCase
{
/** @var array<string, string|false> */
private array $originalEnvVars = [];
#[Override]
protected function setUp(): void
{
foreach ([...AgentDetector::ENV_VARS, 'GITHUB_ACTIONS'] as $var) {
$this->originalEnvVars[$var] = getenv($var);
putenv($var);
}
}
#[Override]
protected function tearDown(): void
{
foreach ($this->originalEnvVars as $var => $value) {
putenv($var . ($value !== false ? '=' . $value : ''));
}
}
public function testProgressOutputInAgentDoesNotOverwrite(): void
{
$agentOutput = $this->renderProgressOutput(true);
$regularOutput = $this->renderProgressOutput(false);
self::assertSame(
rtrim(<<<'EOT'
0/2 [>---------------------------] 0%
2/2 [============================] 100%
EOT),
$agentOutput,
);
self::assertSame(
" 0/2 [>---------------------------] 0%\033[1G\033[2K 2/2 [============================] 100%",
$regularOutput,
);
}
private function renderProgressOutput(bool $isAgent): string
{
if ($isAgent) {
putenv('AI_AGENT=1');
} else {
putenv('AI_AGENT');
}
$stream = fopen('php://memory', 'w+');
self::assertNotFalse($stream);
$output = new StreamOutput($stream, StreamOutput::VERBOSITY_NORMAL, true);
$errorStyle = new ErrorsConsoleStyle(new StringInput(''), $output);
$progressBar = $errorStyle->createProgressBar(2);
$progressBar->setBarCharacter('=');
$progressBar->setEmptyBarCharacter('-');
$progressBar->setProgressCharacter('>');
$progressBar->setProgress(0);
$progressBar->display();
$progressBar->setProgress(2);
$progressBar->display();
rewind($stream);
$contents = stream_get_contents($stream);
fclose($stream);
self::assertIsString($contents);
return str_replace(["\r\n", "\r"], "\n", $contents);
}
}