Пример #1
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $appId = $input->getArgument('app-id');
     $checkList = new EmptyCheck();
     foreach ($input->getOption('checker') as $checker) {
         if (!isset($this->checkers[$checker])) {
             throw new \InvalidArgumentException('Invalid checker: ' . $checker);
         }
         $checkerClass = $this->checkers[$checker];
         $checkList = new $checkerClass($checkList);
     }
     $codeChecker = new CodeChecker($checkList);
     $codeChecker->listen('CodeChecker', 'analyseFileBegin', function ($params) use($output) {
         if (OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) {
             $output->writeln("<info>Analysing {$params}</info>");
         }
     });
     $codeChecker->listen('CodeChecker', 'analyseFileFinished', function ($filename, $errors) use($output) {
         $count = count($errors);
         // show filename if the verbosity is low, but there are errors in a file
         if ($count > 0 && OutputInterface::VERBOSITY_VERBOSE > $output->getVerbosity()) {
             $output->writeln("<info>Analysing {$filename}</info>");
         }
         // show error count if there are errors present or the verbosity is high
         if ($count > 0 || OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) {
             $output->writeln(" {$count} errors");
         }
         usort($errors, function ($a, $b) {
             return $a['line'] > $b['line'];
         });
         foreach ($errors as $p) {
             $line = sprintf("%' 4d", $p['line']);
             $output->writeln("    <error>line {$line}: {$p['disallowedToken']} - {$p['reason']}</error>");
         }
     });
     $errors = $codeChecker->analyse($appId);
     if (!$input->getOption('skip-validate-info')) {
         $infoChecker = new InfoChecker($this->infoParser);
         $infoChecker->listen('InfoChecker', 'mandatoryFieldMissing', function ($key) use($output) {
             $output->writeln("<error>Mandatory field missing: {$key}</error>");
         });
         $infoChecker->listen('InfoChecker', 'deprecatedFieldFound', function ($key, $value) use($output) {
             if ($value === [] || is_null($value) || $value === '') {
                 $output->writeln("<info>Deprecated field available: {$key}</info>");
             } else {
                 $output->writeln("<info>Deprecated field available: {$key} => {$value}</info>");
             }
         });
         $infoChecker->listen('InfoChecker', 'duplicateRequirement', function ($minMax) use($output) {
             $output->writeln("<error>Duplicate {$minMax} ownCloud version requirement found</error>");
         });
         $infoChecker->listen('InfoChecker', 'differentVersions', function ($versionFile, $infoXML) use($output) {
             $output->writeln("<error>Different versions provided (appinfo/version: {$versionFile} - appinfo/info.xml: {$infoXML})</error>");
         });
         $infoChecker->listen('InfoChecker', 'sameVersions', function ($path) use($output) {
             $output->writeln("<info>Version file isn't needed anymore and can be safely removed ({$path})</info>");
         });
         $infoChecker->listen('InfoChecker', 'migrateVersion', function ($version) use($output) {
             $output->writeln("<info>Migrate the app version to appinfo/info.xml (add <version>{$version}</version> to appinfo/info.xml and remove appinfo/version)</info>");
         });
         if (OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) {
             $infoChecker->listen('InfoChecker', 'mandatoryFieldFound', function ($key, $value) use($output) {
                 $output->writeln("<info>Mandatory field available: {$key} => {$value}</info>");
             });
             $infoChecker->listen('InfoChecker', 'optionalFieldFound', function ($key, $value) use($output) {
                 $output->writeln("<info>Optional field available: {$key} => {$value}</info>");
             });
             $infoChecker->listen('InfoChecker', 'unusedFieldFound', function ($key, $value) use($output) {
                 $output->writeln("<info>Unused field available: {$key} => {$value}</info>");
             });
         }
         $infoErrors = $infoChecker->analyse($appId);
         $errors = array_merge($errors, $infoErrors);
     }
     if (empty($errors)) {
         $output->writeln('<info>App is compliant - awesome job!</info>');
         return 0;
     } else {
         $output->writeln('<error>App is not compliant</error>');
         return 101;
     }
 }
Пример #2
0
 /**
  * @dataProvider appInfoData
  *
  * @param $appId
  * @param $expectedErrors
  */
 public function testApps($appId, $expectedErrors)
 {
     $errors = $this->infoChecker->analyse($appId);
     $this->assertEquals($expectedErrors, $errors);
 }