public function testGetRunnerCallsCorrectFactory() { $exercise = new CliExerciseImpl(); $manager = new RunnerManager(); $factory1 = $this->prophesize(ExerciseRunnerFactoryInterface::class); $factory1->supports($exercise)->willReturn(false); $factory1->create($exercise)->shouldNotBeCalled(); $factory2 = $this->prophesize(ExerciseRunnerFactoryInterface::class); $factory2->supports($exercise)->willReturn(true); $factory2->create($exercise)->shouldBeCalled(); $manager->addFactory($factory1->reveal()); $manager->addFactory($factory2->reveal()); $manager->getRunner($exercise); }
public function setUp() { $results = new ResultAggregator(); $eventDispatcher = new EventDispatcher($results); $r = new \ReflectionClass(CliRunner::class); $rp = $r->getProperty('requiredChecks'); $rp->setAccessible(true); $rp->setValue([]); $runnerManager = new RunnerManager(); $runnerManager->addFactory(new CliRunnerFactory($eventDispatcher)); $this->exerciseDispatcher = new ExerciseDispatcher($runnerManager, $results, $eventDispatcher, new CheckRepository()); $this->exercise = new TimeServer(new TcpSocketFactory()); }
return new CheckRepository([$c->get(FileExistsCheck::class), $c->get(PhpLintCheck::class), $c->get(CodeParseCheck::class), $c->get(ComposerCheck::class), $c->get(FunctionRequirementsCheck::class), $c->get(DatabaseCheck::class)]); }, CommandRouter::class => function (ContainerInterface $c) { return new CommandRouter([new CommandDefinition('menu', [], MenuCommand::class), new CommandDefinition('help', [], HelpCommand::class), new CommandDefinition('print', [], PrintCommand::class), new CommandDefinition('verify', [], VerifyCommand::class), new CommandDefinition('run', [], RunCommand::class), new CommandDefinition('credits', [], CreditsCommand::class)], 'menu', $c->get(EventDispatcher::class), $c); }, Color::class => function () { $colors = new Color(); $colors->setForceStyle(true); return $colors; }, OutputInterface::class => function (ContainerInterface $c) { return new StdOutput($c->get(Color::class), $c->get(TerminalInterface::class)); }, ExerciseRepository::class => function (ContainerInterface $c) { return new ExerciseRepository(array_map(function ($exerciseClass) use($c) { return $c->get($exerciseClass); }, $c->get('exercises'))); }, EventDispatcher::class => factory(EventDispatcherFactory::class), EventDispatcherFactory::class => object(), RunnerManager::class => function (ContainerInterface $c) { $manager = new RunnerManager(); $manager->addFactory(new CliRunnerFactory($c->get(EventDispatcher::class))); $manager->addFactory(new CgiRunnerFactory($c->get(EventDispatcher::class), $c->get(RequestRenderer::class))); $manager->addFactory(new CustomVerifyingRunnerFactory()); return $manager; }, MenuCommand::class => function (ContainerInterface $c) { return new MenuCommand($c->get('menu')); }, PrintCommand::class => function (ContainerInterface $c) { return new PrintCommand($c->get('appName'), $c->get(ExerciseRepository::class), $c->get(UserState::class), $c->get(MarkdownRenderer::class), $c->get(OutputInterface::class)); }, VerifyCommand::class => function (ContainerInterface $c) { return new VerifyCommand($c->get(ExerciseRepository::class), $c->get(ExerciseDispatcher::class), $c->get(UserState::class), $c->get(UserStateSerializer::class), $c->get(OutputInterface::class), $c->get(ResultsRenderer::class)); }, RunCommand::class => function (ContainerInterface $c) { return new RunCommand($c->get(ExerciseRepository::class), $c->get(ExerciseDispatcher::class), $c->get(UserState::class), $c->get(OutputInterface::class)); }, CreditsCommand::class => function (ContainerInterface $c) { return new CreditsCommand($c->get('coreContributors'), $c->get('appContributors'), $c->get(OutputInterface::class), $c->get(Color::class)); }, HelpCommand::class => function (ContainerInterface $c) { return new HelpCommand($c->get('appName'), $c->get(OutputInterface::class), $c->get(Color::class));