/**
  * Replace variable of files.
  *
  * @param string $src     Target path.
  * @param array  $replace Replace array.
  *
  * @return  void
  */
 public function replace($src, $replace = array())
 {
     $replace = $replace ?: $this->replace;
     $src = Path::clean($src);
     if (is_file($src)) {
         $this->replaceFile(new \SplFileInfo($src, \FilesystemIterator::CURRENT_AS_FILEINFO), $replace);
     } else {
         $this->replaceDir($src, $replace);
     }
 }
Ejemplo n.º 2
0
 /**
  * Do copy action.
  *
  * @param string $src     Source path.
  * @param string $dest    Destination path.
  * @param array  $replace Replace array.
  *
  * @return  void
  */
 public function copy($src, $dest, $replace = array())
 {
     $replace = $replace ?: $this->replace;
     $src = Path::clean($src);
     $dest = Path::clean($dest);
     if (is_file($src)) {
         $this->copyFile($src, $dest, $replace);
     } elseif (is_dir($src)) {
         $this->copyDir($src, $dest, $replace);
     }
 }
 /**
  * Execute the controller.
  *
  * @return  boolean  True if controller finished execution, false if the controller did not
  *                   finish execution. A controller might return false if some precondition for
  *                   the controller to run has not been satisfied.
  *
  * @throws  \LogicException
  * @throws  \RuntimeException
  */
 public function execute()
 {
     $package = $this->io->getArgument(0, new ValidatePrompter('Enter package name: '));
     $class = $this->io->getArgument(1, new ValidatePrompter('Enter class name: '));
     $class = StringNormalise::toClassNamespace($class);
     $target = $this->io->getArgument(2, $package . '\\' . $class . 'Test');
     $target = StringNormalise::toClassNamespace($target);
     $package = ucfirst($package);
     if (!class_exists($class)) {
         $class = 'Windwalker\\' . $package . '\\' . $class;
     }
     if (!class_exists($class)) {
         $this->out('Class not exists: ' . $class);
         exit;
     }
     $replace = $this->replace;
     $ref = new \ReflectionClass($class);
     $replace['origin.class.dir'] = dirname($ref->getFileName());
     $replace['origin.class.file'] = $ref->getFileName();
     $replace['origin.class.name'] = $ref->getName();
     $replace['origin.class.shortname'] = $ref->getShortName();
     $replace['origin.class.namespace'] = $ref->getNamespaceName();
     $replace['test.dir'] = WINDWALKER_ROOT . DIRECTORY_SEPARATOR . 'test';
     $replace['test.class.name'] = 'Windwalker\\Test\\' . $target;
     $replace['test.class.file'] = Path::clean($replace['test.dir'] . DIRECTORY_SEPARATOR . $target . '.php');
     $replace['test.class.dir'] = dirname($replace['test.class.file']);
     $replace['test.class.shortname'] = $this->getShortname(StringNormalise::toClassNamespace($replace['test.class.name']));
     $replace['test.class.namespace'] = $this->getNamespace($replace['test.class.name']);
     $this->replace = $replace;
     $config = new Registry();
     // Set replace to config.
     foreach ($this->replace as $key => $val) {
         $config->set('replace.' . $key, $val);
     }
     $methods = $ref->getMethods(\ReflectionMethod::IS_PUBLIC);
     $methodTmpl = file_get_contents(GENERATOR_BUNDLE_PATH . '/Template/test/testMethod.php');
     $methodCodes = array();
     foreach ($methods as $method) {
         $config['replace.origin.method'] = $method->getName();
         $config['replace.test.method'] = ucfirst($method->getName());
         $methodCodes[] = StringHelper::parseVariable($methodTmpl, $config->get('replace'));
     }
     $config['replace.test.methods'] = implode("", $methodCodes);
     $this->replace = $config->get('replace');
     $this->config = $config;
     $this->doAction(new GenClassAction());
     $this->out('Generate test class: ' . $replace['test.class.name'] . ' to file: ' . $replace['test.class.file'])->out();
     return true;
 }