Example #1
0
 /**
  * Executes the runner class and returns an array with package statistics.
  *
  * @param array  PHP_Depend_TextUI_Runner $runner   The runner instance.
  * @param string                          $pathName The source path.
  *
  * @return array
  */
 private function _runRunnerAndReturnStatistics(PHP_Depend_TextUI_Runner $runner, $pathName)
 {
     $logFile = self::createRunResourceURI('pdepend.dummy');
     $runner->setSourceArguments(array($pathName));
     $runner->addLogger('dummy-logger', $logFile);
     ob_start();
     $runner->run();
     ob_end_clean();
     $data = unserialize(file_get_contents($logFile));
     $code = $data['code'];
     $actual = array();
     foreach ($code as $package) {
         $exceptions = 0;
         foreach ($package->getFunctions() as $function) {
             $exceptions += $function->getExceptionClasses()->count();
         }
         $actual[$package->getName()] = array('functions' => $package->getFunctions()->count(), 'classes' => $package->getClasses()->count(), 'interfaces' => $package->getInterfaces()->count(), 'exceptions' => $exceptions);
     }
     ksort($actual);
     return $actual;
 }
Example #2
0
 /**
  * Executes PHP_Depend_TextUI_Runner against PhingFile or a FileSet
  *
  * @return void
  * @throws BuildException
  */
 public function main()
 {
     $autoload = new PHP_Depend_Autoload();
     $autoload->register();
     if (!isset($this->_file) and count($this->_filesets) == 0) {
         throw new BuildException("Missing either a nested fileset or attribute 'file' set");
     }
     if (count($this->_loggers) == 0) {
         throw new BuildException("Missing nested 'logger' element");
     }
     $this->validateLoggers();
     $this->validateAnalyzers();
     $filesToParse = array();
     if ($this->_file instanceof PhingFile) {
         $filesToParse[] = $this->_file->__toString();
     } else {
         // append any files in filesets
         foreach ($this->_filesets as $fs) {
             $files = $fs->getDirectoryScanner($this->project)->getIncludedFiles();
             foreach ($files as $filename) {
                 $f = new PhingFile($fs->getDir($this->project), $filename);
                 $filesToParse[] = $f->getAbsolutePath();
             }
         }
     }
     $this->_runner = new PHP_Depend_TextUI_Runner();
     $this->_runner->addProcessListener(new PHP_Depend_TextUI_ResultPrinter());
     $configurationFactory = new PHP_Depend_Util_Configuration_Factory();
     $configuration = $configurationFactory->createDefault();
     $this->_runner->setConfiguration($configuration);
     $this->_runner->setSourceArguments($filesToParse);
     foreach ($this->_loggers as $logger) {
         // Register logger
         $this->_runner->addLogger($logger->getType(), $logger->getOutfile()->__toString());
     }
     foreach ($this->_analyzers as $analyzer) {
         // Register additional analyzer
         $this->_runner->addOption($analyzer->getType(), $analyzer->getValue());
     }
     // Disable annotation parsing
     if ($this->_withoutAnnotations) {
         $this->_runner->setWithoutAnnotations();
     }
     // Enable bad documentation support
     if ($this->_supportBadDocumentation) {
         $this->_runner->setSupportBadDocumentation();
     }
     // Check for suffix
     if (count($this->_allowedFileExtensions) > 0) {
         $this->_runner->setFileExtensions($this->_allowedFileExtensions);
     }
     // Check for ignore directories
     if (count($this->_excludeDirectories) > 0) {
         $this->_runner->setExcludeDirectories($this->_excludeDirectories);
     }
     // Check for exclude packages
     if (count($this->_excludePackages) > 0) {
         $this->_runner->setExcludePackages($this->_excludePackages);
     }
     // Check for configuration option
     if ($this->_configFile instanceof PhingFile) {
         if (file_exists($this->_configFile->__toString()) === false) {
             throw new BuildException('The configuration file "' . $this->_configFile->__toString() . '" doesn\'t exist.');
         }
         // Load configuration file
         $config = new PHP_Depend_Util_Configuration($this->_configFile->__toString(), null, true);
         // Store in config registry
         PHP_Depend_Util_ConfigurationInstance::set($config);
     }
     if ($this->_debug) {
         require_once 'PHP/Depend/Util/Log.php';
         // Enable debug logging
         PHP_Depend_Util_Log::setSeverity(PHP_Depend_Util_Log::DEBUG);
     }
     $this->_runner->run();
     if ($this->_runner->hasParseErrors() === true) {
         $this->log('Following errors occurred:');
         foreach ($this->_runner->getParseErrors() as $error) {
             $this->log($error);
         }
         if ($this->_haltonerror === true) {
             throw new BuildException('Errors occurred during parse process');
         }
     }
 }
Example #3
0
 /**
  * Parses the cli arguments.
  *
  * @return boolean
  */
 protected function handleArguments()
 {
     if (!isset($_SERVER['argv'])) {
         if (false === (bool) ini_get('register_argc_argv')) {
             // @codeCoverageIgnoreStart
             echo 'Please enable register_argc_argv in your php.ini.';
         } else {
             // @codeCoverageIgnoreEnd
             echo 'Unknown error, no $argv array available.';
         }
         echo PHP_EOL, PHP_EOL;
         return false;
     }
     // Get cli arguments
     $argv = $_SERVER['argv'];
     // Remove the pdepend command line file
     array_shift($argv);
     if (count($argv) === 0) {
         return false;
     }
     // Last argument must be a list of source directories
     if (strpos(end($argv), '--') !== 0) {
         $this->_runner->setSourceArguments(explode(',', array_pop($argv)));
     }
     for ($i = 0, $c = count($argv); $i < $c; ++$i) {
         // Is it an ini_set option?
         if ($argv[$i] === '-d' && isset($argv[$i + 1])) {
             if (strpos($argv[++$i], '=') === false) {
                 ini_set($argv[$i], 'on');
             } else {
                 // Split key=value
                 list($key, $value) = explode('=', $argv[$i]);
                 // set ini option
                 ini_set($key, $value);
             }
         } else {
             if (strpos($argv[$i], '=') === false) {
                 $this->_options[$argv[$i]] = true;
             } else {
                 // Split key=value
                 list($key, $value) = explode('=', $argv[$i]);
                 // Set option
                 $this->_options[$key] = $value;
             }
         }
     }
     // Check for suffix option
     if (isset($this->_options['--suffix'])) {
         // Get file extensions
         $extensions = explode(',', $this->_options['--suffix']);
         // Set allowed file extensions
         $this->_runner->setFileExtensions($extensions);
         // Remove from options array
         unset($this->_options['--suffix']);
     }
     // Check for ignore option
     if (isset($this->_options['--ignore'])) {
         // Get exclude directories
         $directories = explode(',', $this->_options['--ignore']);
         // Set exclude directories
         $this->_runner->setExcludeDirectories($directories);
         // Remove from options array
         unset($this->_options['--ignore']);
     }
     // Check for exclude package option
     if (isset($this->_options['--exclude'])) {
         // Get exclude directories
         $packages = explode(',', $this->_options['--exclude']);
         // Set exclude packages
         $this->_runner->setExcludePackages($packages);
         // Remove from options array
         unset($this->_options['--exclude']);
     }
     // Check for the bad documentation option
     if (isset($this->_options['--bad-documentation'])) {
         echo "Option --bad-documentation is ambiguous.", PHP_EOL;
         // Remove from options array
         unset($this->_options['--bad-documentation']);
     }
     // Check for configuration option
     if (isset($this->_options['--configuration'])) {
         // Get config file
         $configFile = $this->_options['--configuration'];
         // Remove option from array
         unset($this->_options['--configuration']);
         // First check config file
         if (file_exists($configFile) === false) {
             // Print error message
             echo 'The configuration file "', $configFile, '" doesn\'t exist.', PHP_EOL, PHP_EOL;
             // Return error
             return false;
         }
         // Load configuration file
         $config = new PHP_Depend_Util_Configuration($configFile, null, true);
         // Store in config registry
         PHP_Depend_Util_ConfigurationInstance::set($config);
     }
     if (isset($this->_options['--debug'])) {
         // Remove option from array
         unset($this->_options['--debug']);
         // Enable debug logging
         PHP_Depend_Util_Log::setSeverity(PHP_Depend_Util_Log::DEBUG);
     }
     return true;
 }
 /**
  * @return PHP_Depend_TextUI_Runner
  */
 private function createLegacyRunner()
 {
     $runner = new PHP_Depend_TextUI_Runner();
     $runner->addProcessListener(new PHP_Depend_TextUI_ResultPrinter());
     if ($this->debug) {
         require_once 'PHP/Depend/Util/Log.php';
         // Enable debug logging
         PHP_Depend_Util_Log::setSeverity(PHP_Depend_Util_Log::DEBUG);
     }
     $configuration = $this->getConfiguration();
     if ($configuration === null) {
         $configurationFactory = new PHP_Depend_Util_Configuration_Factory();
         $configuration = $configurationFactory->createDefault();
     }
     PHP_Depend_Util_ConfigurationInstance::set($configuration);
     $runner->setConfiguration($configuration);
     return $runner;
 }
 /**
  * Tests that the {@link PHP_Depend_TextUI_Runner::hasErrors()} method will
  * return <b>true</b> when a parsing error occured.
  *
  * @return void
  * @covers PHP_Depend_TextUI_Runner
  */
 public function testRunnerReturnsTrueWhenAnErrorOccuredDuringTheParsingProcess()
 {
     $runner = new PHP_Depend_TextUI_Runner();
     $runner->setConfiguration($this->createConfigurationFixture());
     $runner->addLogger('dummy-logger', self::createRunResourceURI('pdepend.log'));
     $runner->setSourceArguments(array(self::createCodeResourceUriForTest()));
     $runner->run();
     self::assertTrue($runner->hasParseErrors());
 }
Example #6
0
 /**
  * Parses the cli arguments.
  *
  * @return boolean
  */
 protected function handleArguments()
 {
     if (!isset($_SERVER['argv'])) {
         if (false === (bool) ini_get('register_argc_argv')) {
             // @codeCoverageIgnoreStart
             echo 'Please enable register_argc_argv in your php.ini.';
         } else {
             // @codeCoverageIgnoreEnd
             echo 'Unknown error, no $argv array available.';
         }
         echo PHP_EOL, PHP_EOL;
         return false;
     }
     $argv = $_SERVER['argv'];
     // Remove the pdepend command line file
     array_shift($argv);
     if (count($argv) === 0) {
         return false;
     }
     // Last argument must be a list of source directories
     if (strpos(end($argv), '--') !== 0) {
         $this->runner->setSourceArguments(explode(',', array_pop($argv)));
     }
     for ($i = 0, $c = count($argv); $i < $c; ++$i) {
         // Is it an ini_set option?
         if ($argv[$i] === '-d' && isset($argv[$i + 1])) {
             if (strpos($argv[++$i], '=') === false) {
                 ini_set($argv[$i], 'on');
             } else {
                 list($key, $value) = explode('=', $argv[$i]);
                 ini_set($key, $value);
             }
         } else {
             if (strpos($argv[$i], '=') === false) {
                 $this->options[$argv[$i]] = true;
             } else {
                 list($key, $value) = explode('=', $argv[$i]);
                 $this->options[$key] = $value;
             }
         }
     }
     // Check for suffix option
     if (isset($this->options['--suffix'])) {
         // Get file extensions
         $extensions = explode(',', $this->options['--suffix']);
         // Set allowed file extensions
         $this->runner->setFileExtensions($extensions);
         unset($this->options['--suffix']);
     }
     // Check for ignore option
     if (isset($this->options['--ignore'])) {
         // Get exclude directories
         $directories = explode(',', $this->options['--ignore']);
         // Set exclude directories
         $this->runner->setExcludeDirectories($directories);
         unset($this->options['--ignore']);
     }
     // Check for exclude package option
     if (isset($this->options['--exclude'])) {
         // Get exclude directories
         $packages = explode(',', $this->options['--exclude']);
         // Set exclude packages
         $this->runner->setExcludePackages($packages);
         unset($this->options['--exclude']);
     }
     // Check for the bad documentation option
     if (isset($this->options['--bad-documentation'])) {
         echo "Option --bad-documentation is ambiguous.", PHP_EOL;
         unset($this->options['--bad-documentation']);
     }
     $configurationFactory = new PHP_Depend_Util_Configuration_Factory();
     // Check for configuration option
     if (isset($this->options['--configuration'])) {
         // Get config file
         $configFile = $this->options['--configuration'];
         unset($this->options['--configuration']);
         $configuration = $configurationFactory->create($configFile);
     } else {
         $configuration = $configurationFactory->createDefault();
     }
     // Store in config registry
     PHP_Depend_Util_ConfigurationInstance::set($configuration);
     $this->runner->setConfiguration($configuration);
     if (isset($this->options['--debug'])) {
         unset($this->options['--debug']);
         PHP_Depend_Util_Log::setSeverity(PHP_Depend_Util_Log::DEBUG);
     }
     return true;
 }
Example #7
0
 /**
  * testSupportBadDocumentation
  *
  * @return void
  * @covers PHP_Depend_TextUI_Runner
  * @group pdepend
  * @group pdepend::textui
  * @group unittest
  */
 public function testSupportBadDocumentation()
 {
     $fileName = self::createRunResourceURI('pdepend.dummy');
     $runner = new PHP_Depend_TextUI_Runner();
     $runner->setSourceArguments(array(dirname(__FILE__) . '/../_code/code-without-comments'));
     $runner->setSupportBadDocumentation();
     $runner->addLogger('dummy-logger', $fileName);
     ob_start();
     $runner->run();
     ob_end_clean();
     $data = unserialize(file_get_contents($fileName));
     $code = $data['code'];
     $this->assertEquals(2, $code->count());
     $code->rewind();
     $package = $code->current();
     $this->assertEquals(PHP_Depend_BuilderI::DEFAULT_PACKAGE, $package->getName());
     $this->assertEquals(7, $package->getClasses()->count());
     $this->assertEquals(3, $package->getInterfaces()->count());
 }