コード例 #1
0
ファイル: AbstractGenerator.php プロジェクト: ulabox/bus-spec
 /**
  * @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()));
 }
コード例 #2
0
 /**
  * @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();
         }
     }
 }
コード例 #3
0
 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();
         }
     }
 }
コード例 #4
0
 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();
 }
コード例 #5
0
 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);
 }
コード例 #6
0
 /**
  * @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();
             }
         }
     }
 }
コード例 #7
0
ファイル: PromptingGenerator.php プロジェクト: mawaha/tracker
 /**
  * @param string $filepath
  *
  * @return bool
  */
 private function userAborts($filepath)
 {
     $message = sprintf('File "%s" already exists. Overwrite?', basename($filepath));
     return !$this->io->askConfirmation($message, false);
 }
コード例 #8
0
 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();
 }
コード例 #9
0
 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();
 }
コード例 #10
0
 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);
 }