Skip to content

Commit 48c7975

Browse files
committed
Add SummaryTheme
1 parent 6596161 commit 48c7975

File tree

13 files changed

+342
-27
lines changed

13 files changed

+342
-27
lines changed

changelog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
### master
22

33
- Fix `StartCondition::isCanceled()` when a previous process has been canceled
4+
- Add `SummaryTheme`
45

56
### [0.7.2](../../compare/0.7.1...0.7.2) - 2022-03-08
67

src/Console/Application/ParallelProcessesApplication.php

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -153,18 +153,13 @@ protected function isCanceled(): bool
153153

154154
protected function runProcessesInParallel(InputInterface $input, OutputInterface $output): int
155155
{
156-
$this
157-
->getTheme()
158-
->outputProcessesState($output, $this->getProcesses());
156+
$this->getTheme()->outputStart($output, $this->getProcesses());
159157

160158
$this
161159
->startProcesses()
162160
->waitProcessesTermination($output);
163161

164-
$this
165-
->getTheme()
166-
->resetOutput($output, $this->getProcesses())
167-
->outputSummary($output, $this->getProcesses());
162+
$this->getTheme()->outputSummary($output, $this->getProcesses());
168163

169164
return $this->getExitCode();
170165
}
@@ -194,10 +189,7 @@ protected function waitProcessesTermination(OutputInterface $output): self
194189
}
195190
}
196191

197-
$this
198-
->getTheme()
199-
->resetOutput($output, $this->getProcesses())
200-
->outputProcessesState($output, $this->getProcesses());
192+
$this->getTheme()->outputProcessesState($output, $this->getProcesses());
201193

202194
if ($terminated < $this->getProcesses()->count()) {
203195
usleep($this->getRefreshInterval());

src/Console/Application/Theme/DefaultTheme.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,21 @@ public function resetOutput(OutputInterface $output, ProcessArray $processes): s
191191
return $this;
192192
}
193193

194+
public function outputStart(OutputInterface $output, ProcessArray $processes): ThemeInterface
195+
{
196+
foreach ($processes->toArray() as $process) {
197+
$this->outputProcessState($output, $process);
198+
}
199+
200+
$this->writeBufferedLines($output);
201+
202+
return $this;
203+
}
204+
194205
public function outputProcessesState(OutputInterface $output, ProcessArray $processes): self
195206
{
207+
$this->resetOutput($output, $processes);
208+
196209
foreach ($processes->toArray() as $process) {
197210
$this->outputProcessState($output, $process);
198211
}
@@ -204,6 +217,8 @@ public function outputProcessesState(OutputInterface $output, ProcessArray $proc
204217

205218
public function outputSummary(OutputInterface $output, ProcessArray $processes): self
206219
{
220+
$this->resetOutput($output, $processes);
221+
207222
foreach ($processes->toArray() as $process) {
208223
$this
209224
->outputProcessState($output, $process, true)
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Steevanb\ParallelProcess\Console\Application\Theme;
6+
7+
use Steevanb\ParallelProcess\Process\ProcessArray;
8+
use Symfony\Component\Console\Output\OutputInterface;
9+
10+
class SummaryTheme extends DefaultTheme
11+
{
12+
public function outputStart(OutputInterface $output, ProcessArray $processes): ThemeInterface
13+
{
14+
$output->writeln(
15+
'Starting <info></info>'
16+
. $processes->count()
17+
. ' processe'
18+
. ($processes->count() !== 1 ? 's' : null)
19+
. '...'
20+
);
21+
$this->writeBufferedLines($output);
22+
23+
return $this;
24+
}
25+
26+
public function outputProcessesState(OutputInterface $output, ProcessArray $processes): self
27+
{
28+
return $this;
29+
}
30+
31+
public function resetOutput(OutputInterface $output, ProcessArray $processes): self
32+
{
33+
return $this;
34+
}
35+
}

src/Console/Application/Theme/ThemeInterface.php

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,9 @@
99

1010
interface ThemeInterface
1111
{
12-
public function resetOutput(OutputInterface $output, ProcessArray $processes): self;
12+
public function outputStart(OutputInterface $output, ProcessArray $processes): self;
1313

14-
public function outputProcessesState(
15-
OutputInterface $output,
16-
ProcessArray $processes
17-
): self;
14+
public function outputProcessesState(OutputInterface $output, ProcessArray $processes): self;
1815

1916
public function outputSummary(OutputInterface $output, ProcessArray $processes): self;
2017
}

tests/Console/Application/Theme/DefaultTheme/OutputProcessStateTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public function testNotStarted(): void
3737
);
3838

3939
static::assertSame(
40-
"\e[37;45m > \e[39;49m ls\n",
40+
"\e[1A\e[K\e[37;45m > \e[39;49m ls\n",
4141
$output->getOutputed()
4242
);
4343
}
@@ -57,7 +57,7 @@ public function testStarted(): void
5757
(new DefaultTheme())->outputProcessesState($output, $processes);
5858

5959
static::assertSame(
60-
"\e[37;42m ✓ \e[39;49m ls\n\e[37;42m ✓ \e[39;49m ls\n",
60+
"\e[1A\e[K\e[1A\e[K\e[37;42m ✓ \e[39;49m ls\n\e[37;42m ✓ \e[39;49m ls\n",
6161
$output->getOutputed()
6262
);
6363
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Steevanb\ParallelProcess\Tests\Console\Application\Theme\DefaultTheme;
6+
7+
use PHPUnit\Framework\TestCase;
8+
use Steevanb\ParallelProcess\{
9+
Console\Application\Theme\DefaultTheme,
10+
Process\ProcessArray,
11+
Tests\Console\Output\TestOutput,
12+
Tests\CreateLsProcessTrait
13+
};
14+
15+
/** @covers \Steevanb\ParallelProcess\Console\Application\Theme\DefaultTheme::outputStart */
16+
final class OutputStartTest extends TestCase
17+
{
18+
use CreateLsProcessTrait;
19+
20+
public function testEmptyNotStarted(): void
21+
{
22+
$output = new TestOutput();
23+
(new DefaultTheme())->outputStart(
24+
$output,
25+
new ProcessArray()
26+
);
27+
28+
static::assertSame('', $output->getOutputed());
29+
}
30+
31+
public function testNotStarted(): void
32+
{
33+
$output = new TestOutput();
34+
(new DefaultTheme())->outputStart(
35+
$output,
36+
new ProcessArray([$this->createLsProcess()])
37+
);
38+
39+
static::assertSame(
40+
"\e[37;45m > \e[39;49m ls\n",
41+
$output->getOutputed()
42+
);
43+
}
44+
45+
public function testStarted(): void
46+
{
47+
$process1 = $this->createLsProcess();
48+
$process1->mustRun();
49+
50+
$process2 = $this->createLsProcess();
51+
$process2->mustRun();
52+
53+
$processes = new ProcessArray([$process1, $process2]);
54+
55+
$output = new TestOutput();
56+
57+
(new DefaultTheme())->outputStart($output, $processes);
58+
59+
static::assertSame(
60+
"\e[37;42m ✓ \e[39;49m ls\n\e[37;42m ✓ \e[39;49m ls\n",
61+
$output->getOutputed()
62+
);
63+
}
64+
}

tests/Console/Application/Theme/DefaultTheme/OutputSummaryTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public function testStarted(): void
5656
(new DefaultTheme())->outputSummary($output, $processes);
5757

5858
static::assertSame(
59-
"\e[37;42m ✓ \e[39;49m ls\n\e[37;42m ✓ \e[39;49m ls\n",
59+
"\e[1A\e[K\e[1A\e[K\e[37;42m ✓ \e[39;49m ls\n\e[37;42m ✓ \e[39;49m ls\n",
6060
$output->getOutputed()
6161
);
6262
}

tests/Console/Application/Theme/DefaultTheme/ResetOutputTest.php

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,12 @@ public function testEmptyNotStarted(): void
3030

3131
public function testNotStarted(): void
3232
{
33+
$processes = new ProcessArray([$this->createLsProcess(), $this->createLsProcess()]);
3334
$output = new TestOutput();
34-
(new DefaultTheme())->outputProcessesState(
35-
$output,
36-
new ProcessArray([$this->createLsProcess()])
37-
);
3835

39-
static::assertSame(
40-
"\e[37;45m > \e[39;49m ls\n",
41-
$output->getOutputed()
42-
);
36+
(new DefaultTheme())->resetOutput($output, $processes);
37+
38+
static::assertSame("\e[1A\e[K\e[1A\e[K", $output->getOutputed());
4339
}
4440

4541
public function testStarted(): void
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Steevanb\ParallelProcess\Tests\Console\Application\Theme\SummaryTheme;
6+
7+
use PHPUnit\Framework\TestCase;
8+
use Steevanb\ParallelProcess\{
9+
Console\Application\Theme\SummaryTheme,
10+
Process\ProcessArray,
11+
Tests\Console\Output\TestOutput,
12+
Tests\CreateLsProcessTrait
13+
};
14+
15+
/** @covers \Steevanb\ParallelProcess\Console\Application\Theme\SummaryTheme::outputProcessesState */
16+
final class OutputProcessStateTest extends TestCase
17+
{
18+
use CreateLsProcessTrait;
19+
20+
public function testEmptyNotStarted(): void
21+
{
22+
$output = new TestOutput();
23+
(new SummaryTheme())->outputProcessesState(
24+
$output,
25+
new ProcessArray()
26+
);
27+
28+
static::assertSame('', $output->getOutputed());
29+
}
30+
31+
public function testNotStarted(): void
32+
{
33+
$output = new TestOutput();
34+
(new SummaryTheme())->outputProcessesState(
35+
$output,
36+
new ProcessArray([$this->createLsProcess()])
37+
);
38+
39+
static::assertSame('', $output->getOutputed());
40+
}
41+
42+
public function testStarted(): void
43+
{
44+
$process1 = $this->createLsProcess();
45+
$process1->mustRun();
46+
47+
$process2 = $this->createLsProcess();
48+
$process2->mustRun();
49+
50+
$processes = new ProcessArray([$process1, $process2]);
51+
52+
$output = new TestOutput();
53+
54+
(new SummaryTheme())->outputProcessesState($output, $processes);
55+
56+
static::assertSame('', $output->getOutputed());
57+
}
58+
}

0 commit comments

Comments
 (0)