--- /dev/null
+<?php
+/*
+ * This file is part of PHPUnit.
+ *
+ * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @since Class available since Release 3.3.0
+ */
+class Util_ConfigurationTest extends PHPUnit_Framework_TestCase
+{
+ protected $configuration;
+
+ protected function setUp()
+ {
+ $this->configuration = PHPUnit_Util_Configuration::getInstance(
+ dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration.xml'
+ );
+ }
+
+ /**
+ * @covers PHPUnit_Util_Configuration::getInstance
+ * @expectedException PHPUnit_Framework_Exception
+ */
+ public function testExceptionIsThrownForNotExistingConfigurationFile()
+ {
+ PHPUnit_Util_Configuration::getInstance('not_existing_file.xml');
+ }
+
+ /**
+ * @covers PHPUnit_Util_Configuration::getPHPUnitConfiguration
+ */
+ public function testShouldReadColorsWhenTrueInConfigurationfile()
+ {
+ $configurationFilename = dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration.colors.true.xml';
+ $configurationInstance = PHPUnit_Util_Configuration::getInstance($configurationFilename);
+ $configurationValues = $configurationInstance->getPHPUnitConfiguration();
+
+ $this->assertEquals(PHPUnit_TextUI_ResultPrinter::COLOR_AUTO, $configurationValues['colors']);
+ }
+
+ /**
+ * @covers PHPUnit_Util_Configuration::getPHPUnitConfiguration
+ */
+ public function testShouldReadColorsWhenFalseInConfigurationfile()
+ {
+ $configurationFilename = dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration.colors.false.xml';
+ $configurationInstance = PHPUnit_Util_Configuration::getInstance($configurationFilename);
+ $configurationValues = $configurationInstance->getPHPUnitConfiguration();
+
+ $this->assertEquals(PHPUnit_TextUI_ResultPrinter::COLOR_NEVER, $configurationValues['colors']);
+ }
+
+ /**
+ * @covers PHPUnit_Util_Configuration::getPHPUnitConfiguration
+ */
+ public function testShouldReadColorsWhenEmptyInConfigurationfile()
+ {
+ $configurationFilename = dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration.colors.empty.xml';
+ $configurationInstance = PHPUnit_Util_Configuration::getInstance($configurationFilename);
+ $configurationValues = $configurationInstance->getPHPUnitConfiguration();
+
+ $this->assertEquals(PHPUnit_TextUI_ResultPrinter::COLOR_NEVER, $configurationValues['colors']);
+ }
+
+ /**
+ * @covers PHPUnit_Util_Configuration::getPHPUnitConfiguration
+ */
+ public function testShouldReadColorsWhenInvalidInConfigurationfile()
+ {
+ $configurationFilename = dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration.colors.invalid.xml';
+ $configurationInstance = PHPUnit_Util_Configuration::getInstance($configurationFilename);
+ $configurationValues = $configurationInstance->getPHPUnitConfiguration();
+
+ $this->assertEquals(PHPUnit_TextUI_ResultPrinter::COLOR_NEVER, $configurationValues['colors']);
+ }
+
+ /**
+ * @covers PHPUnit_Util_Configuration::getFilterConfiguration
+ */
+ public function testFilterConfigurationIsReadCorrectly()
+ {
+ $this->assertEquals(
+ array(
+ 'blacklist' =>
+ array(
+ 'include' =>
+ array(
+ 'directory' =>
+ array(
+ 0 =>
+ array(
+ 'path' => '/path/to/files',
+ 'prefix' => '',
+ 'suffix' => '.php',
+ 'group' => 'DEFAULT'
+ ),
+ ),
+ 'file' =>
+ array(
+ 0 => '/path/to/file',
+ 1 => '/path/to/file',
+ ),
+ ),
+ 'exclude' =>
+ array(
+ 'directory' =>
+ array(
+ 0 =>
+ array(
+ 'path' => '/path/to/files',
+ 'prefix' => '',
+ 'suffix' => '.php',
+ 'group' => 'DEFAULT'
+ ),
+ ),
+ 'file' =>
+ array(
+ 0 => '/path/to/file',
+ ),
+ ),
+ ),
+ 'whitelist' =>
+ array(
+ 'addUncoveredFilesFromWhitelist' => true,
+ 'processUncoveredFilesFromWhitelist' => false,
+ 'include' =>
+ array(
+ 'directory' =>
+ array(
+ 0 =>
+ array(
+ 'path' => '/path/to/files',
+ 'prefix' => '',
+ 'suffix' => '.php',
+ 'group' => 'DEFAULT'
+ ),
+ ),
+ 'file' =>
+ array(
+ 0 => '/path/to/file',
+ ),
+ ),
+ 'exclude' =>
+ array(
+ 'directory' =>
+ array(
+ 0 =>
+ array(
+ 'path' => '/path/to/files',
+ 'prefix' => '',
+ 'suffix' => '.php',
+ 'group' => 'DEFAULT'
+ ),
+ ),
+ 'file' =>
+ array(
+ 0 => '/path/to/file',
+ ),
+ ),
+ ),
+ ),
+ $this->configuration->getFilterConfiguration()
+ );
+ }
+
+ /**
+ * @covers PHPUnit_Util_Configuration::getGroupConfiguration
+ */
+ public function testGroupConfigurationIsReadCorrectly()
+ {
+ $this->assertEquals(
+ array(
+ 'include' =>
+ array(
+ 0 => 'name',
+ ),
+ 'exclude' =>
+ array(
+ 0 => 'name',
+ ),
+ ),
+ $this->configuration->getGroupConfiguration()
+ );
+ }
+
+ /**
+ * @covers PHPUnit_Util_Configuration::getListenerConfiguration
+ */
+ public function testListenerConfigurationIsReadCorrectly()
+ {
+ $dir = __DIR__;
+ $includePath = ini_get('include_path');
+
+ ini_set('include_path', $dir . PATH_SEPARATOR . $includePath);
+
+ $this->assertEquals(
+ array(
+ 0 =>
+ array(
+ 'class' => 'MyListener',
+ 'file' => '/optional/path/to/MyListener.php',
+ 'arguments' =>
+ array(
+ 0 =>
+ array(
+ 0 => 'Sebastian',
+ ),
+ 1 => 22,
+ 2 => 'April',
+ 3 => 19.78,
+ 4 => null,
+ 5 => new stdClass,
+ 6 => dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'MyTestFile.php',
+ 7 => dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'MyRelativePath',
+ ),
+ ),
+ array(
+ 'class' => 'IncludePathListener',
+ 'file' => __FILE__,
+ 'arguments' => array()
+ ),
+ array(
+ 'class' => 'CompactArgumentsListener',
+ 'file' => '/CompactArgumentsListener.php',
+ 'arguments' =>
+ array(
+ 0 => 42
+ ),
+ ),
+ ),
+ $this->configuration->getListenerConfiguration()
+ );
+
+ ini_set('include_path', $includePath);
+ }
+
+ /**
+ * @covers PHPUnit_Util_Configuration::getLoggingConfiguration
+ */
+ public function testLoggingConfigurationIsReadCorrectly()
+ {
+ $this->assertEquals(
+ array(
+ 'lowUpperBound' => '50',
+ 'highLowerBound' => '90',
+ 'coverage-html' => '/tmp/report',
+ 'coverage-clover' => '/tmp/clover.xml',
+ 'json' => '/tmp/logfile.json',
+ 'plain' => '/tmp/logfile.txt',
+ 'tap' => '/tmp/logfile.tap',
+ 'logIncompleteSkipped' => false,
+ 'junit' => '/tmp/logfile.xml',
+ 'testdox-html' => '/tmp/testdox.html',
+ 'testdox-text' => '/tmp/testdox.txt',
+ ),
+ $this->configuration->getLoggingConfiguration()
+ );
+ }
+
+ /**
+ * @covers PHPUnit_Util_Configuration::getPHPConfiguration
+ */
+ public function testPHPConfigurationIsReadCorrectly()
+ {
+ $this->assertEquals(
+ array(
+ 'include_path' =>
+ array(
+ dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . '.',
+ '/path/to/lib'
+ ),
+ 'ini' => array('foo' => 'bar'),
+ 'const' => array('FOO' => false, 'BAR' => true),
+ 'var' => array('foo' => false),
+ 'env' => array('foo' => true),
+ 'post' => array('foo' => 'bar'),
+ 'get' => array('foo' => 'bar'),
+ 'cookie' => array('foo' => 'bar'),
+ 'server' => array('foo' => 'bar'),
+ 'files' => array('foo' => 'bar'),
+ 'request'=> array('foo' => 'bar'),
+ ),
+ $this->configuration->getPHPConfiguration()
+ );
+ }
+
+ /**
+ * @backupGlobals enabled
+ * @covers PHPUnit_Util_Configuration::handlePHPConfiguration
+ */
+ public function testPHPConfigurationIsHandledCorrectly()
+ {
+ $this->configuration->handlePHPConfiguration();
+
+ $path = dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . '.' . PATH_SEPARATOR . '/path/to/lib';
+ $this->assertStringStartsWith($path, ini_get('include_path'));
+ $this->assertEquals(false, FOO);
+ $this->assertEquals(true, BAR);
+ $this->assertEquals(false, $GLOBALS['foo']);
+ $this->assertEquals(true, $_ENV['foo']);
+ $this->assertEquals(true, getenv('foo'));
+ $this->assertEquals('bar', $_POST['foo']);
+ $this->assertEquals('bar', $_GET['foo']);
+ $this->assertEquals('bar', $_COOKIE['foo']);
+ $this->assertEquals('bar', $_SERVER['foo']);
+ $this->assertEquals('bar', $_FILES['foo']);
+ $this->assertEquals('bar', $_REQUEST['foo']);
+ }
+
+ /**
+ * @backupGlobals enabled
+ *
+ * @see https://github.com/sebastianbergmann/phpunit/issues/1181
+ */
+ public function testHandlePHPConfigurationDoesNotOverwrittenExistingEnvArrayVariables()
+ {
+ $_ENV['foo'] = false;
+ $this->configuration->handlePHPConfiguration();
+
+ $this->assertEquals(false, $_ENV['foo']);
+ $this->assertEquals(true, getenv('foo'));
+ }
+
+ /**
+ * @backupGlobals enabled
+ *
+ * @see https://github.com/sebastianbergmann/phpunit/issues/1181
+ */
+ public function testHandlePHPConfigurationDoesNotOverriteVariablesFromPutEnv()
+ {
+ putenv('foo=putenv');
+ $this->configuration->handlePHPConfiguration();
+
+ $this->assertEquals(true, $_ENV['foo']);
+ $this->assertEquals('putenv', getenv('foo'));
+ }
+
+ /**
+ * @covers PHPUnit_Util_Configuration::getPHPUnitConfiguration
+ */
+ public function testPHPUnitConfigurationIsReadCorrectly()
+ {
+ $this->assertEquals(
+ array(
+ 'backupGlobals' => true,
+ 'backupStaticAttributes' => false,
+ 'disallowChangesToGlobalState' => false,
+ 'bootstrap' => '/path/to/bootstrap.php',
+ 'cacheTokens' => false,
+ 'columns' => 80,
+ 'colors' => 'never',
+ 'stderr' => false,
+ 'convertErrorsToExceptions' => true,
+ 'convertNoticesToExceptions' => true,
+ 'convertWarningsToExceptions' => true,
+ 'forceCoversAnnotation' => false,
+ 'mapTestClassNameToCoveredClassName' => false,
+ 'printerClass' => 'PHPUnit_TextUI_ResultPrinter',
+ 'stopOnFailure' => false,
+ 'reportUselessTests' => false,
+ 'strictCoverage' => false,
+ 'disallowTestOutput' => false,
+ 'enforceTimeLimit' => false,
+ 'disallowTodoAnnotatedTests' => false,
+ 'testSuiteLoaderClass' => 'PHPUnit_Runner_StandardTestSuiteLoader',
+ 'verbose' => false,
+ 'timeoutForSmallTests' => 1,
+ 'timeoutForMediumTests' => 10,
+ 'timeoutForLargeTests' => 60
+ ),
+ $this->configuration->getPHPUnitConfiguration()
+ );
+ }
+
+ /**
+ * @covers PHPUnit_Util_Configuration::getSeleniumBrowserConfiguration
+ */
+ public function testSeleniumBrowserConfigurationIsReadCorrectly()
+ {
+ $this->assertEquals(
+ array(
+ 0 =>
+ array(
+ 'name' => 'Firefox on Linux',
+ 'browser' => '*firefox /usr/lib/firefox/firefox-bin',
+ 'host' => 'my.linux.box',
+ 'port' => 4444,
+ 'timeout' => 30000,
+ ),
+ ),
+ $this->configuration->getSeleniumBrowserConfiguration()
+ );
+ }
+
+ /**
+ * @covers PHPUnit_Util_Configuration::getInstance
+ */
+ public function testXincludeInConfiguration()
+ {
+ $configurationWithXinclude = PHPUnit_Util_Configuration::getInstance(
+ dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration_xinclude.xml'
+ );
+
+ $this->assertConfigurationEquals(
+ $this->configuration,
+ $configurationWithXinclude
+ );
+ }
+
+ /**
+ * @ticket 1311
+ * @covers PHPUnit_Util_Configuration::getLoggingConfiguration
+ * @covers PHPUnit_Util_Configuration::getPHPConfiguration
+ * @covers PHPUnit_Util_Configuration::getPHPUnitConfiguration
+ * @covers PHPUnit_Util_Configuration::getTestSuiteConfiguration
+ * @covers PHPUnit_Util_Configuration::getFilterConfiguration
+ *
+ * @uses PHPUnit_Util_Configuration::getInstance
+ */
+ public function testWithEmptyConfigurations()
+ {
+ $emptyConfiguration = PHPUnit_Util_Configuration::getInstance(
+ dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration_empty.xml'
+ );
+
+ $logging = $emptyConfiguration->getLoggingConfiguration();
+ $this->assertEmpty($logging);
+
+ $php = $emptyConfiguration->getPHPConfiguration();
+ $this->assertEmpty($php['include_path']);
+
+ $phpunit = $emptyConfiguration->getPHPUnitConfiguration();
+ $this->assertArrayNotHasKey('bootstrap', $phpunit);
+ $this->assertArrayNotHasKey('testSuiteLoaderFile', $phpunit);
+ $this->assertArrayNotHasKey('printerFile', $phpunit);
+
+ $suite = $emptyConfiguration->getTestSuiteConfiguration();
+ $this->assertEmpty($suite->getGroups());
+
+ $filter = $emptyConfiguration->getFilterConfiguration();
+ $this->assertEmpty($filter['blacklist']['include']['directory']);
+ $this->assertEmpty($filter['blacklist']['include']['file']);
+ $this->assertEmpty($filter['blacklist']['exclude']['directory']);
+ $this->assertEmpty($filter['blacklist']['exclude']['file']);
+ $this->assertEmpty($filter['whitelist']['include']['directory']);
+ $this->assertEmpty($filter['whitelist']['include']['file']);
+ $this->assertEmpty($filter['whitelist']['exclude']['directory']);
+ $this->assertEmpty($filter['whitelist']['exclude']['file']);
+ }
+
+ /**
+ * Asserts that the values in $actualConfiguration equal $expectedConfiguration.
+ *
+ * @param PHPUnit_Util_Configuration $expectedConfiguration
+ * @param PHPUnit_Util_Configuration $actualConfiguration
+ */
+ protected function assertConfigurationEquals(PHPUnit_Util_Configuration $expectedConfiguration, PHPUnit_Util_Configuration $actualConfiguration)
+ {
+ $this->assertEquals(
+ $expectedConfiguration->getFilterConfiguration(),
+ $actualConfiguration->getFilterConfiguration()
+ );
+
+ $this->assertEquals(
+ $expectedConfiguration->getGroupConfiguration(),
+ $actualConfiguration->getGroupConfiguration()
+ );
+
+ $this->assertEquals(
+ $expectedConfiguration->getListenerConfiguration(),
+ $actualConfiguration->getListenerConfiguration()
+ );
+
+ $this->assertEquals(
+ $expectedConfiguration->getLoggingConfiguration(),
+ $actualConfiguration->getLoggingConfiguration()
+ );
+
+ $this->assertEquals(
+ $expectedConfiguration->getPHPConfiguration(),
+ $actualConfiguration->getPHPConfiguration()
+ );
+
+ $this->assertEquals(
+ $expectedConfiguration->getPHPUnitConfiguration(),
+ $actualConfiguration->getPHPUnitConfiguration()
+ );
+
+ $this->assertEquals(
+ $expectedConfiguration->getSeleniumBrowserConfiguration(),
+ $actualConfiguration->getSeleniumBrowserConfiguration()
+ );
+
+ $this->assertEquals(
+ $expectedConfiguration->getTestSuiteConfiguration(),
+ $actualConfiguration->getTestSuiteConfiguration()
+ );
+ }
+}