function it_asks_confirmation_if_spec_already_exists($io, $tpl, $fs, ResourceInterface $resource) { $resource->getSpecName()->willReturn('App'); $resource->getSpecFilename()->willReturn('/project/spec/Acme/App.php'); $resource->getSpecNamespace()->willReturn('spec\\Acme'); $resource->getSrcClassname()->willReturn('Acme\\App'); $fs->pathExists('/project/spec/Acme/App.php')->willReturn(true); $io->askConfirmation(Argument::type('string'), false)->willReturn(false); $fs->putFileContents(Argument::cetera())->shouldNotBeCalled(); $this->generate($resource); }
public function it_stages_files_created_as_a_result_of_delegation_of_generation($delegate, ResourceInterface $resource, $filesystem, $repository) { $srcFilePath = '/foo/bar.php'; $specFilePath = '/foo/barspec.php'; $resource->getSrcFilename()->willReturn($srcFilePath); $resource->getSpecFilename()->willReturn($specFilePath); $filesystem->pathExists($srcFilePath)->willReturn(false); $filesystem->pathExists($specFilePath)->willReturn(true); $delegate->generate(Argument::cetera())->will(function () use($filesystem, $srcFilePath) { $filesystem->pathExists($srcFilePath)->willReturn(true); }); $this->generate($resource, []); $repository->stageFile($srcFilePath)->shouldHaveBeenCalled(); $repository->stageFile($specFilePath)->shouldNotHaveBeenCalled(); }
public function generate(ResourceInterface $resource, array $data = array()) { $filepath = $resource->getSpecFilename(); if ($this->filesystem->pathExists($filepath)) { $message = sprintf('File "%s" already exists. Overwrite?', basename($filepath)); if (!$this->io->askConfirmation($message, false)) { return; } $this->io->writeln(); } $path = dirname($filepath); if (!$this->filesystem->isDirectory($path)) { $this->filesystem->makeDirectory($path); } $values = array('%filepath%' => $filepath, '%name%' => $resource->getSpecName(), '%namespace%' => $resource->getSpecNamespace(), '%subject%' => $resource->getSrcClassname()); if (!($content = $this->templates->render('controller_specification', $values))) { $content = $this->templates->renderString(file_get_contents(__DIR__ . '/templates/controller_spec.template'), $values); } $this->filesystem->putFileContents($filepath, $content); $this->io->writeln(sprintf("<info>ControllerSpecification for <value>%s</value> created in <value>'%s'</value>.</info>\n", $resource->getSrcClassname(), $filepath)); }
/** * @param ResourceInterface $resource * @return mixed */ protected function getFilePath(ResourceInterface $resource) { return $resource->getSpecFilename(); }
/** * @param ResourceInterface $resource * @return string[] */ private function getFilePathsFromResource(ResourceInterface $resource) { return [$resource->getSrcFilename(), $resource->getSpecFilename()]; }
/** * @param ResourceInterface $oldResource * @param ResourceInterface $newResource */ private function relocateSpec(ResourceInterface $oldResource, ResourceInterface $newResource) { $this->relocateResource($oldResource->getSpecFilename(), $newResource->getSpecFilename(), $this->modifySpecContent($oldResource, $newResource)); }
private function importResource(Suite $suite, ResourceInterface $resource, $line = null) { if (!class_exists($resource->getSpecClassname()) && is_file($resource->getSpecFilename())) { require_once $resource->getSpecFilename(); } if (!class_exists($resource->getSpecClassname())) { return; } $reflection = new ReflectionClass($resource->getSpecClassname()); if ($reflection->isAbstract()) { return; } if (!$reflection->implementsInterface('PhpSpec\\SpecificationInterface')) { return; } $spec = new SpecificationNode($resource->getSrcClassname(), $reflection, $resource); foreach ($reflection->getMethods(ReflectionMethod::IS_PUBLIC) as $method) { if (!preg_match('/^(it|its)[^a-zA-Z]/', $method->getName())) { continue; } if (null !== $line && !$this->lineIsInsideMethod($line, $method)) { continue; } $example = new ExampleNode(str_replace('_', ' ', $method->getName()), $method); if ($this->methodIsEmpty($method)) { $example->markAsPending(); } $spec->addExample($example); } $suite->addSpecification($spec); }