Skip to content

Commit d1cde74

Browse files
committed
Title
1 parent 284bf2c commit d1cde74

File tree

4 files changed

+69
-2
lines changed

4 files changed

+69
-2
lines changed

lib/Extension/Console/ConsoleExtension.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use PhpBench\Pipeline\Extension\Console\Stage\Redraw;
88
use PhpBench\Pipeline\Extension\Console\Stage\Table;
99
use PhpBench\Pipeline\Extension\Console\Stage\BarChart;
10+
use PhpBench\Pipeline\Extension\Console\Stage\Title;
1011

1112
class ConsoleExtension implements PipelineExtension
1213
{
@@ -20,6 +21,7 @@ public function __construct()
2021
$this->stages = [
2122
'console/redraw' => new Redraw(),
2223
'console/table' => new Table(),
24+
'console/title' => new Title(),
2325
'console/bar-chart' => new BarChart(),
2426
];
2527
}

lib/Extension/Console/Stage/Redraw.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,13 @@ public function __invoke(): Generator
3232
break;
3333
}
3434

35-
$text = self::ANSI_RESTORE_CURSOR_POS.$text;
35+
if ($firstLine) {
36+
$text = self::ANSI_RESTORE_CURSOR_POS.$text;
37+
$firstLine = false;
38+
}
39+
3640
$lineLength = $this->maxLineLength($text, $lineLength);
3741
$text = $this->maximizeLines($text, $lineLength);
38-
break;
3942
}
4043

4144
list($config, $data) = yield $data;

lib/Extension/Console/Stage/Title.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
namespace PhpBench\Pipeline\Extension\Console\Stage;
4+
5+
use PhpBench\Pipeline\Core\Stage;
6+
use Generator;
7+
use PhpBench\Pipeline\Core\Schema;
8+
9+
class Title implements Stage
10+
{
11+
public function __invoke(): Generator
12+
{
13+
list($config, $data) = yield;
14+
while (true) {
15+
list($config, $data) = yield [
16+
$this->title($config['text']),
17+
];
18+
}
19+
}
20+
21+
public function configure(Schema $schema)
22+
{
23+
$schema->setRequired([
24+
'text'
25+
]);
26+
$schema->setTypes([
27+
'text' => 'string'
28+
]);
29+
}
30+
31+
private function title(string $text): string
32+
{
33+
return implode(PHP_EOL, [
34+
$text,
35+
str_repeat('=', mb_strlen($text))
36+
]);
37+
}
38+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
namespace PhpBench\Pipeline\Tests\Unit\Extension\Console\Stage;
4+
5+
use PhpBench\Pipeline\Tests\Unit\Extension\Console\ConsoleTestCase;
6+
7+
class TitleTest extends ConsoleTestCase
8+
{
9+
public function testUnderlinedTitleText()
10+
{
11+
$pipeline = $this->pipeline()
12+
->stage('console/title', [
13+
'text' => 'Hello World',
14+
]);
15+
16+
$output = $pipeline->build()->generator([])->current();
17+
18+
$this->assertEquals([ <<<EOT
19+
Hello World
20+
===========
21+
EOT
22+
], $output);
23+
}
24+
}

0 commit comments

Comments
 (0)