Skip to content

Commit c27d9f4

Browse files
committed
Use more specific events for some listeners
1 parent 122174c commit c27d9f4

File tree

6 files changed

+55
-39
lines changed

6 files changed

+55
-39
lines changed

app/config.php

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@
197197
$c->get(RunnerManager::class)
198198
);
199199
},
200-
200+
201201
//checks
202202
FileExistsCheck::class => object(),
203203
PhpLintCheck::class => object(),
@@ -292,25 +292,43 @@
292292
],
293293
],
294294
'prepare-solution' => [
295-
'verify.start' => [
295+
'cli.verify.start' => [
296+
containerListener(PrepareSolutionListener::class),
297+
],
298+
'cli.run.start' => [
296299
containerListener(PrepareSolutionListener::class),
297300
],
298-
'run.start' => [
301+
'cgi.verify.start' => [
302+
containerListener(PrepareSolutionListener::class),
303+
],
304+
'cgi.run.start' => [
299305
containerListener(PrepareSolutionListener::class),
300306
],
301307
],
302308
'code-patcher' => [
303-
'run.start' => [
309+
'cli.verify.start' => [
310+
containerListener(CodePatchListener::class, 'patch'),
311+
],
312+
'cli.verify.finish' => [
304313
containerListener(CodePatchListener::class, 'patch'),
305314
],
306-
'verify.pre.execute' => [
315+
'cli.run.start' => [
307316
containerListener(CodePatchListener::class, 'patch'),
308317
],
309-
'verify.post.execute' => [
310-
containerListener(CodePatchListener::class, 'revert'),
318+
'cli.run.finish' => [
319+
containerListener(CodePatchListener::class, 'patch'),
320+
],
321+
'cgi.verify.start' => [
322+
containerListener(CodePatchListener::class, 'patch'),
323+
],
324+
'cgi.verify.finish' => [
325+
containerListener(CodePatchListener::class, 'patch'),
326+
],
327+
'cgi.run.start' => [
328+
containerListener(CodePatchListener::class, 'patch'),
311329
],
312-
'run.finish' => [
313-
containerListener(CodePatchListener::class, 'revert'),
330+
'cgi.run.finish' => [
331+
containerListener(CodePatchListener::class, 'patch'),
314332
],
315333
],
316334
'self-check' => [

src/Listener/CodePatchListener.php

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use PhpSchool\PhpWorkshop\CodePatcher;
66
use PhpSchool\PhpWorkshop\Event\Event;
7+
use PhpSchool\PhpWorkshop\Event\ExerciseRunnerEvent;
78
use PhpSchool\PhpWorkshop\Input\Input;
89
use RuntimeException;
910

@@ -34,34 +35,28 @@ public function __construct(CodePatcher $codePatcher)
3435
}
3536

3637
/**
37-
* @param Event $event
38+
* @param ExerciseRunnerEvent $event
3839
*/
39-
public function patch(Event $event)
40+
public function patch(ExerciseRunnerEvent $event)
4041
{
41-
/** @var Input $input */
42-
$input = $event->getParameter('input');
43-
$fileName = $input->getArgument('program');
42+
$fileName = $event->getInput()->getArgument('program');
4443

4544
$this->originalCode = file_get_contents($fileName);
4645
file_put_contents(
4746
$fileName,
48-
$this->codePatcher->patch($event->getParameter('exercise'), $this->originalCode)
47+
$this->codePatcher->patch($event->getExercise(), $this->originalCode)
4948
);
5049
}
5150

5251
/**
53-
* @param Event $event
52+
* @param ExerciseRunnerEvent $event
5453
*/
55-
public function revert(Event $event)
54+
public function revert(ExerciseRunnerEvent $event)
5655
{
5756
if (null === $this->originalCode) {
5857
throw new RuntimeException('Can only revert previously patched code');
5958
}
6059

61-
/** @var Input $input */
62-
$input = $event->getParameter('input');
63-
$fileName = $input->getArgument('program');
64-
65-
file_put_contents($fileName, $this->originalCode);
60+
file_put_contents($event->getInput()->getArgument('program'), $this->originalCode);
6661
}
6762
}

src/Listener/PrepareSolutionListener.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace PhpSchool\PhpWorkshop\Listener;
44

55
use PhpSchool\PhpWorkshop\Event\Event;
6+
use PhpSchool\PhpWorkshop\Event\ExerciseRunnerEvent;
67
use RuntimeException;
78
use Symfony\Component\Process\Process;
89

@@ -25,11 +26,11 @@ class PrepareSolutionListener
2526
];
2627

2728
/**
28-
* @param Event $event
29+
* @param ExerciseRunnerEvent $event
2930
*/
30-
public function __invoke(Event $event)
31+
public function __invoke(ExerciseRunnerEvent $event)
3132
{
32-
$solution = $event->getParameter('exercise')->getSolution();
33+
$solution = $event->getExercise()->getSolution();
3334

3435
if ($solution->hasComposerFile()) {
3536
//prepare composer deps

test/Factory/EventDispatcherFactoryTest.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -227,11 +227,10 @@ public function testDefaultListenersAreRegisteredFromConfig()
227227

228228
$listeners = $this->readAttribute($dispatcher, 'listeners');
229229

230-
$this->assertArrayHasKey('verify.start', $listeners);
231-
$this->assertArrayHasKey('run.start', $listeners);
232-
$this->assertArrayHasKey('verify.pre.execute', $listeners);
233-
$this->assertArrayHasKey('verify.post.execute', $listeners);
234-
$this->assertArrayHasKey('run.finish', $listeners);
230+
$this->assertArrayHasKey('cli.verify.start', $listeners);
231+
$this->assertArrayHasKey('cli.run.start', $listeners);
232+
$this->assertArrayHasKey('cgi.verify.start', $listeners);
233+
$this->assertArrayHasKey('cgi.run.start', $listeners);
235234
$this->assertArrayHasKey('verify.post.check', $listeners);
236235
}
237236
}

test/Listener/CodePatchListenerTest.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use PhpSchool\PhpWorkshop\CodePatcher;
66
use PhpSchool\PhpWorkshop\Event\Event;
7+
use PhpSchool\PhpWorkshop\Event\ExerciseRunnerEvent;
78
use PhpSchool\PhpWorkshop\Exercise\ExerciseInterface;
89
use PhpSchool\PhpWorkshop\Input\Input;
910
use PhpSchool\PhpWorkshop\Listener\CodePatchListener;
@@ -49,7 +50,7 @@ public function testRevertThrowsExceptionIfPatchNotPreviouslyCalled()
4950
$exercise = $this->createMock(ExerciseInterface::class);
5051

5152
$listener = new CodePatchListener($this->codePatcher);
52-
$event = new Event('event', compact('exercise', 'input'));
53+
$event = new ExerciseRunnerEvent('event', $exercise, $input);
5354

5455
$this->expectException(RuntimeException::class);
5556
$this->expectExceptionMessage('Can only revert previously patched code');
@@ -70,7 +71,7 @@ public function testPatchUpdatesCode()
7071
->will($this->returnValue('MODIFIED CONTENT'));
7172

7273
$listener = new CodePatchListener($this->codePatcher);
73-
$event = new Event('event', compact('exercise', 'input'));
74+
$event = new ExerciseRunnerEvent('event', $exercise, $input);
7475
$listener->patch($event);
7576

7677
$this->assertStringEqualsFile($this->file, 'MODIFIED CONTENT');
@@ -90,7 +91,7 @@ public function testRevertAfterPatch()
9091
->will($this->returnValue('MODIFIED CONTENT'));
9192

9293
$listener = new CodePatchListener($this->codePatcher);
93-
$event = new Event('event', compact('exercise', 'input'));
94+
$event = new ExerciseRunnerEvent('event', $exercise, $input);
9495
$listener->patch($event);
9596
$listener->revert($event);
9697

test/Listener/PrepareSolutionListenerTest.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
namespace PhpSchool\PhpWorkshopTest\Listener;
44

55
use PhpSchool\PhpWorkshop\Event\Event;
6+
use PhpSchool\PhpWorkshop\Event\ExerciseRunnerEvent;
67
use PhpSchool\PhpWorkshop\Exercise\CliExercise;
78
use PhpSchool\PhpWorkshop\Exercise\ExerciseInterface;
9+
use PhpSchool\PhpWorkshop\Input\Input;
810
use PhpSchool\PhpWorkshop\Listener\PrepareSolutionListener;
911
use PhpSchool\PhpWorkshop\Solution\SolutionInterface;
1012
use PHPUnit_Framework_TestCase;
@@ -63,8 +65,8 @@ public function testIfSolutionRequiresComposerButComposerCannotBeLocatedExceptio
6365

6466
$this->expectException(RuntimeException::class);
6567
$this->expectExceptionMessage('Composer could not be located on the system');
66-
$e = new Event('epic-event', ['exercise' => $exercise, 'file' => 'file.php']);
67-
$this->listener->__invoke($e);
68+
$event = new ExerciseRunnerEvent('event', $exercise, new Input('app'));
69+
$this->listener->__invoke($event);
6870
}
6971

7072
public function testIfSolutionRequiresComposerButVendorDirExistsNothingIsDone()
@@ -88,8 +90,8 @@ public function testIfSolutionRequiresComposerButVendorDirExistsNothingIsDone()
8890
->method('getBaseDirectory')
8991
->will($this->returnValue(dirname($this->file)));
9092

91-
$e = new Event('epic-event', ['exercise' => $exercise, 'file' => 'file.php']);
92-
$this->listener->__invoke($e);
93+
$event = new ExerciseRunnerEvent('event', $exercise, new Input('app'));
94+
$this->listener->__invoke($event);
9395

9496
$this->assertFileExists(sprintf('%s/vendor', dirname($this->file)));
9597
//check for non existence of lock file, composer generates this when updating if it doesn't exist
@@ -121,8 +123,8 @@ public function testIfSolutionRequiresComposerComposerInstallIsExecuted()
121123
->method('getBaseDirectory')
122124
->will($this->returnValue(dirname($this->file)));
123125

124-
$e = new Event('epic-event', ['exercise' => $exercise, 'file' => 'file.php']);
125-
$this->listener->__invoke($e);
126+
$event = new ExerciseRunnerEvent('event', $exercise, new Input('app'));
127+
$this->listener->__invoke($event);
126128

127129
$this->assertFileExists(sprintf('%s/vendor', dirname($this->file)));
128130
}

0 commit comments

Comments
 (0)