diff --git a/src/Event/CgiExecuteEvent.php b/src/Event/CgiExecuteEvent.php index 1ad970b6..6b78c370 100644 --- a/src/Event/CgiExecuteEvent.php +++ b/src/Event/CgiExecuteEvent.php @@ -21,10 +21,12 @@ class CgiExecuteEvent extends Event /** * @param string $name * @param RequestInterface $request + * @param array $parameters */ - public function __construct($name, RequestInterface $request) + public function __construct($name, RequestInterface $request, array $parameters = []) { - parent::__construct($name, ['request' => $request]); + $parameters['request'] = $request; + parent::__construct($name, $parameters); $this->request = $request; } diff --git a/src/Event/CliExecuteEvent.php b/src/Event/CliExecuteEvent.php index 202d2a72..0743519c 100644 --- a/src/Event/CliExecuteEvent.php +++ b/src/Event/CliExecuteEvent.php @@ -20,10 +20,12 @@ class CliExecuteEvent extends Event /** * @param string $name * @param ArrayObject $args + * @param array $parameters */ - public function __construct($name, ArrayObject $args) + public function __construct($name, ArrayObject $args, array $parameters = []) { - parent::__construct($name, ['args' => $args]); + $parameters['args'] = $args; + parent::__construct($name, $parameters); $this->args = $args; } diff --git a/src/ExerciseDispatcher.php b/src/ExerciseDispatcher.php index b1399aee..62fc9d3b 100644 --- a/src/ExerciseDispatcher.php +++ b/src/ExerciseDispatcher.php @@ -173,6 +173,7 @@ public function verify(ExerciseInterface $exercise, $fileName) */ public function run(ExerciseInterface $exercise, $fileName, OutputInterface $output) { + $exercise->configure($this); $this->eventDispatcher->dispatch(new Event('run.start', compact('exercise', 'fileName'))); $exitStatus = $this->runnerFactory diff --git a/src/ExerciseRunner/CgiRunner.php b/src/ExerciseRunner/CgiRunner.php index 7b265e50..7179322b 100644 --- a/src/ExerciseRunner/CgiRunner.php +++ b/src/ExerciseRunner/CgiRunner.php @@ -193,7 +193,7 @@ public function run($fileName, OutputInterface $output) { $success = true; foreach ($this->exercise->getRequests() as $i => $request) { - $event = $this->eventDispatcher->dispatch(new CgiExecuteEvent('cgi.run.usr-execute.pre', $request)); + $event = $this->eventDispatcher->dispatch(new CgiExecuteEvent('cgi.run.user-execute.pre', $request)); $process = $this->getProcess($fileName, $event->getRequest()); $output->writeTitle("Request"); @@ -202,7 +202,9 @@ public function run($fileName, OutputInterface $output) $output->writeTitle("Output"); $output->emptyLine(); - $process->run(function ($outputType, $outputBuffer) use ($output) { + $process->start(); + $this->eventDispatcher->dispatch(new CgiExecuteEvent('cgi.run.executing', $request, ['output' => $output])); + $process->wait(function ($outputType, $outputBuffer) use ($output) { $output->write($outputBuffer); }); $output->emptyLine(); diff --git a/src/ExerciseRunner/CliRunner.php b/src/ExerciseRunner/CliRunner.php index 7a24a30c..6fd03cac 100644 --- a/src/ExerciseRunner/CliRunner.php +++ b/src/ExerciseRunner/CliRunner.php @@ -143,9 +143,11 @@ public function run($fileName, OutputInterface $output) $output->write(implode($glue, $args->getArrayCopy())); } - $output->writeTitle("\nOutput"); + $output->writeTitle("Output"); $process = $this->getPhpProcess($fileName, $args); - $process->run(function ($outputType, $outputBuffer) use ($output) { + $process->start(); + $this->eventDispatcher->dispatch(new CliExecuteEvent('cli.run.executing', $args, ['output' => $output])); + $process->wait(function ($outputType, $outputBuffer) use ($output) { $output->writeLine($outputBuffer); }); diff --git a/test/ExerciseRunner/CliRunnerTest.php b/test/ExerciseRunner/CliRunnerTest.php index 487b070f..e967a27f 100644 --- a/test/ExerciseRunner/CliRunnerTest.php +++ b/test/ExerciseRunner/CliRunnerTest.php @@ -136,7 +136,7 @@ public function testRunPassesOutputAndReturnsSuccessIfScriptIsSuccessful() $exp = "\n\e[1m\e[4mArguments\e[0m\e[0m\n"; $exp .= "1, 2, 3\n"; - $exp .= "\e[1m\e[4m\n"; + $exp .= "\e[1m\e[4m"; $exp .= "Output\e[0m\e[0m\n"; $exp .= "6\n";