protected function PHPUnit_TextUI_Command::handleArguments

Handles the command-line arguments.

A child class of PHPUnit_TextUI_Command can hook into the argument parsing by adding the switch(es) to the $longOptions array and point to a callback method that handles the switch(es) in the child class like this

<code> <?php class MyCommand extends PHPUnit_TextUI_Command { public function __construct() { $this->longOptions['--my-switch'] = 'myHandler'; }

// --my-switch foo -> myHandler('foo') protected function myHandler($value) { } } </code>

Parameters

array $argv:

1 call to PHPUnit_TextUI_Command::handleArguments()
PHPUnit_TextUI_Command::run in drupal/core/vendor/phpunit/phpunit/PHPUnit/TextUI/Command.php

File

drupal/core/vendor/phpunit/phpunit/PHPUnit/TextUI/Command.php, line 236

Class

PHPUnit_TextUI_Command
A TestRunner for the Command Line Interface (CLI) PHP SAPI Module.

Code

protected function handleArguments(array $argv) {
  try {
    $this->options = PHPUnit_Util_Getopt::getopt($argv, 'd:c:hv', array_keys($this->longOptions));
  } catch (PHPUnit_Framework_Exception $e) {
    PHPUnit_TextUI_TestRunner::showError($e
      ->getMessage());
  }
  foreach ($this->options[0] as $option) {
    switch ($option[0]) {
      case '--colors':
        $this->arguments['colors'] = TRUE;
        break;
      case '--bootstrap':
        $this->arguments['bootstrap'] = $option[1];
        break;
      case 'c':
      case '--configuration':
        $this->arguments['configuration'] = $option[1];
        break;
      case '--coverage-clover':
      case '--coverage-html':
      case '--coverage-php':
      case '--coverage-text':
        if (!extension_loaded('tokenizer')) {
          $this
            ->showExtensionNotLoadedMessage('tokenizer', 'No code coverage will be generated.');
          continue;
        }
        if (!extension_loaded('xdebug')) {
          $this
            ->showExtensionNotLoadedMessage('Xdebug', 'No code coverage will be generated.');
          continue;
        }
        switch ($option[0]) {
          case '--coverage-clover':
            $this->arguments['coverageClover'] = $option[1];
            break;
          case '--coverage-html':
            $this->arguments['reportDirectory'] = $option[1];
            break;
          case '--coverage-php':
            $this->arguments['coveragePHP'] = $option[1];
            break;
          case '--coverage-text':
            if ($option[1] === NULL) {
              $option[1] = 'php://stdout';
            }
            $this->arguments['coverageText'] = $option[1];
            $this->arguments['coverageTextShowUncoveredFiles'] = FALSE;
            break;
        }
        break;
      case 'd':
        $ini = explode('=', $option[1]);
        if (isset($ini[0])) {
          if (isset($ini[1])) {
            ini_set($ini[0], $ini[1]);
          }
          else {
            ini_set($ini[0], TRUE);
          }
        }
        break;
      case '--debug':
        $this->arguments['debug'] = TRUE;
        break;
      case 'h':
      case '--help':
        $this
          ->showHelp();
        exit(PHPUnit_TextUI_TestRunner::SUCCESS_EXIT);
        break;
      case '--filter':
        $this->arguments['filter'] = $option[1];
        break;
      case '--testsuite':
        $this->arguments['testsuite'] = $option[1];
        break;
      case '--group':
        $this->arguments['groups'] = explode(',', $option[1]);
        break;
      case '--exclude-group':
        $this->arguments['excludeGroups'] = explode(',', $option[1]);
        break;
      case '--test-suffix':
        $this->arguments['testSuffixes'] = explode(',', $option[1]);
        break;
      case '--include-path':
        $includePath = $option[1];
        break;
      case '--list-groups':
        $this->arguments['listGroups'] = TRUE;
        break;
      case '--printer':
        $this->arguments['printer'] = $option[1];
        break;
      case '--loader':
        $this->arguments['loader'] = $option[1];
        break;
      case '--log-json':
        $this->arguments['jsonLogfile'] = $option[1];
        break;
      case '--log-junit':
        $this->arguments['junitLogfile'] = $option[1];
        break;
      case '--log-tap':
        $this->arguments['tapLogfile'] = $option[1];
        break;
      case '--process-isolation':
        $this->arguments['processIsolation'] = TRUE;
        break;
      case '--repeat':
        $this->arguments['repeat'] = (int) $option[1];
        break;
      case '--stderr':
        $this->arguments['printer'] = new PHPUnit_TextUI_ResultPrinter('php://stderr', isset($this->arguments['verbose']) ? $this->arguments['verbose'] : FALSE);
        break;
      case '--stop-on-error':
        $this->arguments['stopOnError'] = TRUE;
        break;
      case '--stop-on-failure':
        $this->arguments['stopOnFailure'] = TRUE;
        break;
      case '--stop-on-incomplete':
        $this->arguments['stopOnIncomplete'] = TRUE;
        break;
      case '--stop-on-skipped':
        $this->arguments['stopOnSkipped'] = TRUE;
        break;
      case '--tap':
        $this->arguments['printer'] = new PHPUnit_Util_Log_TAP();
        break;
      case '--testdox':
        $this->arguments['printer'] = new PHPUnit_Util_TestDox_ResultPrinter_Text();
        break;
      case '--testdox-html':
        $this->arguments['testdoxHTMLFile'] = $option[1];
        break;
      case '--testdox-text':
        $this->arguments['testdoxTextFile'] = $option[1];
        break;
      case '--no-configuration':
        $this->arguments['useDefaultConfiguration'] = FALSE;
        break;
      case '--no-globals-backup':
        $this->arguments['backupGlobals'] = FALSE;
        break;
      case '--static-backup':
        $this->arguments['backupStaticAttributes'] = TRUE;
        break;
      case 'v':
      case '--verbose':
        $this->arguments['verbose'] = TRUE;
        break;
      case '--version':
        PHPUnit_TextUI_TestRunner::printVersionString();
        exit(PHPUnit_TextUI_TestRunner::SUCCESS_EXIT);
        break;
      case '--strict':
        $this->arguments['strict'] = TRUE;
        break;
      default:
        $optionName = str_replace('--', '', $option[0]);
        if (isset($this->longOptions[$optionName])) {
          $handler = $this->longOptions[$optionName];
        }
        else {
          if (isset($this->longOptions[$optionName . '='])) {
            $handler = $this->longOptions[$optionName . '='];
          }
        }
        if (isset($handler) && is_callable(array(
          $this,
          $handler,
        ))) {
          $this
            ->{$handler}($option[1]);
        }
    }
  }
  $this
    ->handleCustomTestSuite();
  if (!isset($this->arguments['test'])) {
    if (isset($this->options[1][0])) {
      $this->arguments['test'] = $this->options[1][0];
    }
    if (isset($this->options[1][1])) {
      $this->arguments['testFile'] = $this->options[1][1];
    }
    else {
      $this->arguments['testFile'] = '';
    }
    if (isset($this->arguments['test']) && is_file($this->arguments['test']) && substr($this->arguments['test'], -5, 5) != '.phpt') {
      $this->arguments['testFile'] = realpath($this->arguments['test']);
      $this->arguments['test'] = substr($this->arguments['test'], 0, strrpos($this->arguments['test'], '.'));
    }
  }
  if (!isset($this->arguments['testSuffixes'])) {
    $this->arguments['testSuffixes'] = array(
      'Test.php',
      '.phpt',
    );
  }
  if (isset($includePath)) {
    ini_set('include_path', $includePath . PATH_SEPARATOR . ini_get('include_path'));
  }
  if (isset($this->arguments['bootstrap'])) {
    $this
      ->handleBootstrap($this->arguments['bootstrap']);
  }
  if (isset($this->arguments['printer']) && is_string($this->arguments['printer'])) {
    $this->arguments['printer'] = $this
      ->handlePrinter($this->arguments['printer']);
  }
  if ($this->arguments['loader'] !== NULL) {
    $this->arguments['loader'] = $this
      ->handleLoader($this->arguments['loader']);
  }
  if (isset($this->arguments['configuration']) && is_dir($this->arguments['configuration'])) {
    $configurationFile = $this->arguments['configuration'] . '/phpunit.xml';
    if (file_exists($configurationFile)) {
      $this->arguments['configuration'] = realpath($configurationFile);
    }
    else {
      if (file_exists($configurationFile . '.dist')) {
        $this->arguments['configuration'] = realpath($configurationFile . '.dist');
      }
    }
  }
  else {
    if (!isset($this->arguments['configuration']) && $this->arguments['useDefaultConfiguration']) {
      if (file_exists('phpunit.xml')) {
        $this->arguments['configuration'] = realpath('phpunit.xml');
      }
      else {
        if (file_exists('phpunit.xml.dist')) {
          $this->arguments['configuration'] = realpath('phpunit.xml.dist');
        }
      }
    }
  }
  if (isset($this->arguments['configuration'])) {
    try {
      $configuration = PHPUnit_Util_Configuration::getInstance($this->arguments['configuration']);
    } catch (Exception $e) {
      print $e
        ->getMessage() . "\n";
      exit(PHPUnit_TextUI_TestRunner::FAILURE_EXIT);
    }
    $phpunit = $configuration
      ->getPHPUnitConfiguration();
    $configuration
      ->handlePHPConfiguration();
    if (!isset($this->arguments['bootstrap']) && isset($phpunit['bootstrap'])) {
      $this
        ->handleBootstrap($phpunit['bootstrap']);
    }
    if (isset($phpunit['printerClass'])) {
      if (isset($phpunit['printerFile'])) {
        $file = $phpunit['printerFile'];
      }
      else {
        $file = '';
      }
      $this->arguments['printer'] = $this
        ->handlePrinter($phpunit['printerClass'], $file);
    }
    if (isset($phpunit['testSuiteLoaderClass'])) {
      if (isset($phpunit['testSuiteLoaderFile'])) {
        $file = $phpunit['testSuiteLoaderFile'];
      }
      else {
        $file = '';
      }
      $this->arguments['loader'] = $this
        ->handleLoader($phpunit['testSuiteLoaderClass'], $file);
    }
    $logging = $configuration
      ->getLoggingConfiguration();
    if (isset($logging['coverage-html']) || isset($logging['coverage-clover']) || isset($logging['coverage-text'])) {
      if (!extension_loaded('tokenizer')) {
        $this
          ->showExtensionNotLoadedMessage('tokenizer', 'No code coverage will be generated.');
      }
      else {
        if (!extension_loaded('Xdebug')) {
          $this
            ->showExtensionNotLoadedMessage('Xdebug', 'No code coverage will be generated.');
        }
      }
    }
    $browsers = $configuration
      ->getSeleniumBrowserConfiguration();
    if (!empty($browsers) && class_exists('PHPUnit_Extensions_SeleniumTestCase')) {
      PHPUnit_Extensions_SeleniumTestCase::$browsers = $browsers;
    }
    if (!isset($this->arguments['test'])) {
      $testSuite = $configuration
        ->getTestSuiteConfiguration(isset($this->arguments['testsuite']) ? $this->arguments['testsuite'] : null);
      if ($testSuite !== NULL) {
        $this->arguments['test'] = $testSuite;
      }
    }
  }
  if (isset($this->arguments['test']) && is_string($this->arguments['test']) && substr($this->arguments['test'], -5, 5) == '.phpt') {
    $test = new PHPUnit_Extensions_PhptTestCase($this->arguments['test']);
    $this->arguments['test'] = new PHPUnit_Framework_TestSuite();
    $this->arguments['test']
      ->addTest($test);
  }
  if (!isset($this->arguments['test']) || isset($this->arguments['testDatabaseLogRevision']) && !isset($this->arguments['testDatabaseDSN'])) {
    $this
      ->showHelp();
    exit(PHPUnit_TextUI_TestRunner::EXCEPTION_EXIT);
  }
}