/** * This method creates a PHPMD 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 \PHPMD\TextUI\CommandLineOptions $opts * @param \PHPMD\RuleSetFactory $ruleSetFactory * @return integer */ public function run(CommandLineOptions $opts, RuleSetFactory $ruleSetFactory) { if ($opts->hasVersion()) { fwrite(STDOUT, sprintf('PHPMD %s', $this->getVersion()) . 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 StreamWriter($stream)); $renderers = array($renderer); foreach ($opts->getReportFiles() as $reportFormat => $reportFile) { $reportRenderer = $opts->createRenderer($reportFormat); $reportRenderer->setWriter(new StreamWriter(fopen($reportFile, 'wb'))); $renderers[] = $reportRenderer; } // Configure a rule set factory $ruleSetFactory->setMinimumPriority($opts->getMinimumPriority()); if ($opts->hasStrict()) { $ruleSetFactory->setStrict(); } $phpmd = new PHPMD(); $phpmd->setOptions(array_filter(array('coverage' => $opts->getCoverageReport()))); $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(), $renderers, $ruleSetFactory); if ($phpmd->hasViolations()) { return self::EXIT_VIOLATION; } return self::EXIT_SUCCESS; }
/** * testHasViolationsReturnsTrueForSourceWithViolation * * @return void */ public function testHasViolationsReturnsTrueForSourceWithViolation() { self::changeWorkingDirectory(); $renderer = new XMLRenderer(); $renderer->setWriter(new WriterStub()); $phpmd = new PHPMD(); $phpmd->processFiles(self::createFileUri('source/source_with_npath_violation.php'), 'pmd-refset1', array($renderer), new RuleSetFactory()); $this->assertTrue($phpmd->hasViolations()); }