Пример #1
0
 /**
  * @dataProvider getInvalidConfigFiles
  */
 public function testParseConfigFilesWithErrors($configFile, $expectedMessage)
 {
     $this->setExpectedException('RuntimeException', $expectedMessage);
     $renderer = new PHP_PMD_Renderer_XMLRenderer();
     $phpmd = new PHP_PMD();
     $phpmd->processFiles(self::createFileUri('source/ccn_function.php'), self::createFileUri('config/' . $configFile), array($renderer), new PHP_PMD_RuleSetFactory());
 }
Пример #2
0
 /**
  * Run the task.
  *
  * @param array &$options Additional options.
  *
  * @return integer Number of errors.
  */
 public function run(&$options)
 {
     $lib = realpath($this->_config->getPath() . '/lib');
     $renderer = new PHP_PMD_Renderer_TextRenderer();
     $renderer->setWriter(new PHP_PMD_Writer_Stream(STDOUT));
     $ruleSetFactory = new PHP_PMD_RuleSetFactory();
     $ruleSetFactory->setMinimumPriority(PHP_PMD_AbstractRule::LOWEST_PRIORITY);
     $phpmd = new PHP_PMD();
     $phpmd->processFiles($lib, Components_Constants::getDataDirectory() . '/qc_standards/phpmd.xml', array($renderer), $ruleSetFactory);
     return $phpmd->hasViolations();
 }
Пример #3
0
 /**
  * Executes PHPMD against PhingFile or a FileSet
  *
  * @throws BuildException - if the phpmd classes can't be loaded.
  * @return void
  */
 public function main()
 {
     /**
      * Find PHPMD
      */
     @(include_once 'PHP/PMD.php');
     if (!class_exists('PHP_PMD')) {
         throw new BuildException('PHPMDTask depends on PHPMD being installed and on include_path.', $this->getLocation());
     }
     require_once 'PHP/PMD/AbstractRule.php';
     if (!$this->minimumPriority) {
         $this->minimumPriority = PHP_PMD_AbstractRule::LOWEST_PRIORITY;
     }
     if (!isset($this->file) and count($this->filesets) == 0) {
         throw new BuildException("Missing either a nested fileset or attribute 'file' set");
     }
     if (count($this->formatters) == 0) {
         // turn legacy format attribute into formatter
         $fmt = new PHPMDFormatterElement();
         $fmt->setType($this->format);
         $fmt->setUseFile(false);
         $this->formatters[] = $fmt;
     }
     $reportRenderers = array();
     foreach ($this->formatters as $fe) {
         if ($fe->getType() == '') {
             throw new BuildException("Formatter missing required 'type' attribute.");
         }
         if ($fe->getUsefile() && $fe->getOutfile() === null) {
             throw new BuildException("Formatter requires 'outfile' attribute when 'useFile' is true.");
         }
         $reportRenderers[] = $fe->getRenderer();
     }
     // Create a rule set factory
     $ruleSetFactory = new PHP_PMD_RuleSetFactory();
     $ruleSetFactory->setMinimumPriority($this->minimumPriority);
     $phpmd = new PHP_PMD();
     $phpmd->setFileExtensions($this->allowedFileExtensions);
     $phpmd->setIgnorePattern($this->ignorePatterns);
     $filesToParse = array();
     if ($this->file instanceof PhingFile) {
         $filesToParse[] = $this->file->getPath();
     } 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();
             }
         }
     }
     if (count($filesToParse) > 0) {
         $inputPath = implode(',', $filesToParse);
         $this->log('Processing files...');
         $phpmd->processFiles($inputPath, $this->rulesets, $reportRenderers, $ruleSetFactory);
         $this->log('Finished processing files');
     } else {
         $this->log('No files to process');
     }
 }
Пример #4
0
 /**
  * testHasViolationsReturnsTrueForSourceWithViolation
  *
  * @return void
  * @covers PHP_PMD
  * @group phpmd
  * @group unittest
  */
 public function testHasViolationsReturnsTrueForSourceWithViolation()
 {
     self::changeWorkingDirectory();
     $renderer = new PHP_PMD_Renderer_XMLRenderer();
     $renderer->setWriter(new PHP_PMD_Stubs_WriterStub());
     $phpmd = new PHP_PMD();
     $phpmd->processFiles(self::createFileUri('source/source_with_npath_violation.php'), 'pmd-refset1', array($renderer), new PHP_PMD_RuleSetFactory());
     $this->assertTrue($phpmd->hasViolations());
 }
Пример #5
0
 /**
  * This method creates a PHP_PMD instance and configures this object based
  * on the user's input, then it starts the source analysis.
  *
  * The return value of this method can be used as an exit code. A value
  * equal to <b>EXIT_SUCCESS</b> means that no violations or errors were
  * found in the analyzed code. Otherwise this method will return a value
  * equal to <b>EXIT_VIOLATION</b>.
  *
  * @param PHP_PMD_TextUI_CommandLineOptions $opts The prepared command line
  *                                                arguments.
  *
  * @return integer
  */
 public function run(PHP_PMD_TextUI_CommandLineOptions $opts)
 {
     if ($opts->hasVersion()) {
         fwrite(STDOUT, 'PHPMD @package_version@ by Manuel Pichler' . PHP_EOL);
         return self::EXIT_SUCCESS;
     }
     // Create a report stream
     if ($opts->getReportFile() === null) {
         $stream = STDOUT;
     } else {
         $stream = fopen($opts->getReportFile(), 'wb');
     }
     // Create renderer and configure output
     $renderer = $opts->createRenderer();
     $renderer->setWriter(new PHP_PMD_Writer_Stream($stream));
     // Create a rule set factory
     $ruleSetFactory = new PHP_PMD_RuleSetFactory();
     $ruleSetFactory->setMinimumPriority($opts->getMinimumPriority());
     if ($opts->hasStrict()) {
         $ruleSetFactory->setStrict();
     }
     $phpmd = new PHP_PMD();
     $extensions = $opts->getExtensions();
     if ($extensions !== null) {
         $phpmd->setFileExtensions(explode(',', $extensions));
     }
     $ignore = $opts->getIgnore();
     if ($ignore !== null) {
         $phpmd->setIgnorePattern(explode(',', $ignore));
     }
     $phpmd->processFiles($opts->getInputPath(), $opts->getRuleSets(), array($renderer), $ruleSetFactory);
     if ($phpmd->hasViolations()) {
         return self::EXIT_VIOLATION;
     }
     return self::EXIT_SUCCESS;
 }
 /**
  * testLocalVariableUsedInDoubleQuoteStringGetsNotReported
  *
  * @return void
  * @outputBuffering enabled
  */
 public function testLocalVariableUsedInDoubleQuoteStringGetsNotReported()
 {
     $renderer = new PHP_PMD_Renderer_TextRenderer();
     $renderer->setWriter(new PHP_PMD_Writer_Stream(self::createTempFileUri()));
     $inputs = self::createCodeResourceUriForTest();
     $rules = 'unusedcode';
     $renderes = array($renderer);
     $factory = new PHP_PMD_RuleSetFactory();
     $phpmd = new PHP_PMD();
     $phpmd->processFiles($inputs, $rules, $renderes, $factory);
 }
 /**
  * testCliAcceptsSingleFileAsInput
  *
  * @return void
  */
 public function testCliAcceptsSingleFileAsInput()
 {
     self::changeWorkingDirectory();
     $renderer = new PHP_PMD_Renderer_XMLRenderer();
     $renderer->setWriter(new PHP_PMD_Stubs_WriterStub());
     $phpmd = new PHP_PMD();
     $phpmd->processFiles(self::createFileUri('source/FooBar.php'), 'pmd-refset1', array($renderer), new PHP_PMD_RuleSetFactory());
 }