/** * @param ResourceInterface $resource * @param array $data */ public function generate(ResourceInterface $resource, array $data) { $destination = $this->getSavePath($resource); if (file_exists($destination) && !$this->io->askConfirmation(sprintf('File "%s" already exists. Overwrite?', basename($destination)), false)) { return; } $directory = dirname($destination); if (!file_exists($directory)) { $this->createDir($directory); } $code = $this->generateCodeForResource($resource, $data); $this->filesystem->putFileContents($destination, $code); $this->io->writeln($this->getPromptMessage($resource, $resource->getSrcFilename())); }
/** * @param SuiteEvent $event */ public function afterSuite(SuiteEvent $event) { if (!$this->io->isCodeGenerationEnabled()) { return; } foreach ($this->exceptions as $exception) { $resource = $this->resources->createResource($exception->getCollaboratorName()); if ($this->resourceIsInSpecNamespace($exception, $resource)) { continue; } if ($this->io->askConfirmation(sprintf('Would you like me to generate an interface `%s` for you?', $exception->getCollaboratorName()))) { $this->generator->generate($resource, 'interface'); $event->markAsWorthRerunning(); } } }
public function afterSuite(SuiteEvent $event) { if (!$this->io->isCodeGenerationEnabled()) { return; } if (!$this->io->isFakingEnabled()) { return; } foreach ($this->nullMethods as $methodString => $failedCall) { $failedCall['expected'] = array_unique($failedCall['expected']); if (count($failedCall['expected']) > 1) { continue; } $expected = current($failedCall['expected']); $class = $failedCall['class']; $message = sprintf('Do you want me to make `%s()` always return %s for you?', $methodString, var_export($expected, true)); try { $resource = $this->resources->createResource($class); } catch (\RuntimeException $exception) { continue; } if ($this->io->askConfirmation($message)) { $this->generator->generate($resource, 'returnConstant', array('method' => $failedCall['method'], 'expected' => $expected)); $event->markAsWorthRerunning(); } } }
function it_does_not_generate_interface_when_prompt_is_answered_with_no(IO $io, ExampleEvent $exampleEvent, SuiteEvent $suiteEvent, GeneratorManager $generator) { $io->askConfirmation('Would you like me to generate an interface `Example\\ExampleClass` for you?')->willReturn(false); $this->afterExample($exampleEvent); $this->afterSuite($suiteEvent); $generator->generate(Argument::cetera())->shouldNotHaveBeenCalled(); $suiteEvent->markAsWorthRerunning()->shouldNotHaveBeenCalled(); }
function it_prompts_and_warns_when_one_method_name_is_correct_but_other_reserved($exampleEvent, SuiteEvent $suiteEvent, IO $io, NameCheckerInterface $nameChecker) { $this->callAfterExample($exampleEvent, $nameChecker, 'throw', false); $this->callAfterExample($exampleEvent, $nameChecker, 'foo'); $io->writeBrokenCodeBlock("I cannot generate the method 'throw' for you because it is a reserved keyword", 2)->shouldBeCalled(); $io->askConfirmation('Do you want me to create `stdClass::foo()` for you?')->shouldBeCalled(); $suiteEvent->markAsNotWorthRerunning()->shouldBeCalled(); $this->afterSuite($suiteEvent); }
/** * @param SuiteEvent $event */ public function afterSuite(SuiteEvent $event) { foreach ($this->interfaces as $interface => $methods) { try { $resource = $this->resources->createResource($interface); } catch (ResourceCreationException $e) { continue; } foreach ($methods as $method => $arguments) { if ($this->io->askConfirmation(sprintf(self::PROMPT, $interface, $method))) { $this->generator->generate($resource, 'method-signature', array('name' => $method, 'arguments' => $this->getRealArguments($arguments))); $event->markAsWorthRerunning(); } } } }
/** * @param string $filepath * * @return bool */ private function userAborts($filepath) { $message = sprintf('File "%s" already exists. Overwrite?', basename($filepath)); return !$this->io->askConfirmation($message, false); }
function it_marks_the_suite_as_being_worth_rerunning_when_generation_happens(IO $io, ExampleEvent $event, SuiteEvent $suiteEvent, MethodNotFoundException $exception) { $io->askConfirmation(Argument::any())->willReturn(true); $exception->getClassname()->willReturn('spec\\PhpSpec\\Listener\\DoubleOfInterface'); $exception->getMethodName()->willReturn('aMethod'); $this->afterExample($event); $this->afterSuite($suiteEvent); $suiteEvent->markAsWorthRerunning()->shouldHaveBeenCalled(); }
function it_invokes_method_body_generation_when_prompt_is_answered_yes(MethodCallEvent $methodCallEvent, ExampleEvent $exampleEvent, IO $io, GeneratorManager $generatorManager, ResourceManager $resourceManager, ResourceInterface $resource, SuiteEvent $event) { $io->askConfirmation(Argument::any())->willReturn(true); $resourceManager->createResource(Argument::any())->willReturn($resource); $methodCallEvent->getSubject()->willReturn(new \StdClass()); $methodCallEvent->getMethod()->willReturn('myMethod'); $this->afterMethodCall($methodCallEvent); $this->afterExample($exampleEvent); $this->afterSuite($event); $generatorManager->generate($resource, 'returnConstant', array('method' => 'myMethod', 'expected' => 100))->shouldHaveBeenCalled(); }
function let(IO $io, ResourceManager $resourceManager, GeneratorManager $generatorManager, SuiteEvent $suiteEvent, ExampleEvent $exampleEvent) { $io->writeln(Argument::any())->willReturn(); $io->askConfirmation(Argument::any())->willReturn(); $this->beConstructedWith($io, $resourceManager, $generatorManager); }