3 * This file is part of PHPUnit.
5 * (c) Sebastian Bergmann <sebastian@phpunit.de>
7 * For the full copyright and license information, please view the LICENSE
8 * file that was distributed with this source code.
12 * @since Class available since Release 3.3.0
14 class Util_ConfigurationTest extends PHPUnit_Framework_TestCase
16 protected $configuration;
18 protected function setUp()
20 $this->configuration = PHPUnit_Util_Configuration::getInstance(
21 dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration.xml'
26 * @covers PHPUnit_Util_Configuration::getInstance
27 * @expectedException PHPUnit_Framework_Exception
29 public function testExceptionIsThrownForNotExistingConfigurationFile()
31 PHPUnit_Util_Configuration::getInstance('not_existing_file.xml');
35 * @covers PHPUnit_Util_Configuration::getPHPUnitConfiguration
37 public function testShouldReadColorsWhenTrueInConfigurationfile()
39 $configurationFilename = dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration.colors.true.xml';
40 $configurationInstance = PHPUnit_Util_Configuration::getInstance($configurationFilename);
41 $configurationValues = $configurationInstance->getPHPUnitConfiguration();
43 $this->assertEquals(PHPUnit_TextUI_ResultPrinter::COLOR_AUTO, $configurationValues['colors']);
47 * @covers PHPUnit_Util_Configuration::getPHPUnitConfiguration
49 public function testShouldReadColorsWhenFalseInConfigurationfile()
51 $configurationFilename = dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration.colors.false.xml';
52 $configurationInstance = PHPUnit_Util_Configuration::getInstance($configurationFilename);
53 $configurationValues = $configurationInstance->getPHPUnitConfiguration();
55 $this->assertEquals(PHPUnit_TextUI_ResultPrinter::COLOR_NEVER, $configurationValues['colors']);
59 * @covers PHPUnit_Util_Configuration::getPHPUnitConfiguration
61 public function testShouldReadColorsWhenEmptyInConfigurationfile()
63 $configurationFilename = dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration.colors.empty.xml';
64 $configurationInstance = PHPUnit_Util_Configuration::getInstance($configurationFilename);
65 $configurationValues = $configurationInstance->getPHPUnitConfiguration();
67 $this->assertEquals(PHPUnit_TextUI_ResultPrinter::COLOR_NEVER, $configurationValues['colors']);
71 * @covers PHPUnit_Util_Configuration::getPHPUnitConfiguration
73 public function testShouldReadColorsWhenInvalidInConfigurationfile()
75 $configurationFilename = dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration.colors.invalid.xml';
76 $configurationInstance = PHPUnit_Util_Configuration::getInstance($configurationFilename);
77 $configurationValues = $configurationInstance->getPHPUnitConfiguration();
79 $this->assertEquals(PHPUnit_TextUI_ResultPrinter::COLOR_NEVER, $configurationValues['colors']);
83 * @covers PHPUnit_Util_Configuration::getFilterConfiguration
85 public function testFilterConfigurationIsReadCorrectly()
97 'path' => '/path/to/files',
105 0 => '/path/to/file',
106 1 => '/path/to/file',
115 'path' => '/path/to/files',
123 0 => '/path/to/file',
129 'addUncoveredFilesFromWhitelist' => true,
130 'processUncoveredFilesFromWhitelist' => false,
137 'path' => '/path/to/files',
145 0 => '/path/to/file',
154 'path' => '/path/to/files',
162 0 => '/path/to/file',
167 $this->configuration->getFilterConfiguration()
172 * @covers PHPUnit_Util_Configuration::getGroupConfiguration
174 public function testGroupConfigurationIsReadCorrectly()
187 $this->configuration->getGroupConfiguration()
192 * @covers PHPUnit_Util_Configuration::getListenerConfiguration
194 public function testListenerConfigurationIsReadCorrectly()
197 $includePath = ini_get('include_path');
199 ini_set('include_path', $dir . PATH_SEPARATOR . $includePath);
205 'class' => 'MyListener',
206 'file' => '/optional/path/to/MyListener.php',
218 6 => dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'MyTestFile.php',
219 7 => dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'MyRelativePath',
223 'class' => 'IncludePathListener',
225 'arguments' => array()
228 'class' => 'CompactArgumentsListener',
229 'file' => '/CompactArgumentsListener.php',
236 $this->configuration->getListenerConfiguration()
239 ini_set('include_path', $includePath);
243 * @covers PHPUnit_Util_Configuration::getLoggingConfiguration
245 public function testLoggingConfigurationIsReadCorrectly()
249 'lowUpperBound' => '50',
250 'highLowerBound' => '90',
251 'coverage-html' => '/tmp/report',
252 'coverage-clover' => '/tmp/clover.xml',
253 'json' => '/tmp/logfile.json',
254 'plain' => '/tmp/logfile.txt',
255 'tap' => '/tmp/logfile.tap',
256 'logIncompleteSkipped' => false,
257 'junit' => '/tmp/logfile.xml',
258 'testdox-html' => '/tmp/testdox.html',
259 'testdox-text' => '/tmp/testdox.txt',
261 $this->configuration->getLoggingConfiguration()
266 * @covers PHPUnit_Util_Configuration::getPHPConfiguration
268 public function testPHPConfigurationIsReadCorrectly()
274 dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . '.',
277 'ini' => array('foo' => 'bar'),
278 'const' => array('FOO' => false, 'BAR' => true),
279 'var' => array('foo' => false),
280 'env' => array('foo' => true),
281 'post' => array('foo' => 'bar'),
282 'get' => array('foo' => 'bar'),
283 'cookie' => array('foo' => 'bar'),
284 'server' => array('foo' => 'bar'),
285 'files' => array('foo' => 'bar'),
286 'request'=> array('foo' => 'bar'),
288 $this->configuration->getPHPConfiguration()
293 * @backupGlobals enabled
294 * @covers PHPUnit_Util_Configuration::handlePHPConfiguration
296 public function testPHPConfigurationIsHandledCorrectly()
298 $this->configuration->handlePHPConfiguration();
300 $path = dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . '.' . PATH_SEPARATOR . '/path/to/lib';
301 $this->assertStringStartsWith($path, ini_get('include_path'));
302 $this->assertEquals(false, FOO);
303 $this->assertEquals(true, BAR);
304 $this->assertEquals(false, $GLOBALS['foo']);
305 $this->assertEquals(true, $_ENV['foo']);
306 $this->assertEquals(true, getenv('foo'));
307 $this->assertEquals('bar', $_POST['foo']);
308 $this->assertEquals('bar', $_GET['foo']);
309 $this->assertEquals('bar', $_COOKIE['foo']);
310 $this->assertEquals('bar', $_SERVER['foo']);
311 $this->assertEquals('bar', $_FILES['foo']);
312 $this->assertEquals('bar', $_REQUEST['foo']);
316 * @backupGlobals enabled
318 * @see https://github.com/sebastianbergmann/phpunit/issues/1181
320 public function testHandlePHPConfigurationDoesNotOverwrittenExistingEnvArrayVariables()
322 $_ENV['foo'] = false;
323 $this->configuration->handlePHPConfiguration();
325 $this->assertEquals(false, $_ENV['foo']);
326 $this->assertEquals(true, getenv('foo'));
330 * @backupGlobals enabled
332 * @see https://github.com/sebastianbergmann/phpunit/issues/1181
334 public function testHandlePHPConfigurationDoesNotOverriteVariablesFromPutEnv()
336 putenv('foo=putenv');
337 $this->configuration->handlePHPConfiguration();
339 $this->assertEquals(true, $_ENV['foo']);
340 $this->assertEquals('putenv', getenv('foo'));
344 * @covers PHPUnit_Util_Configuration::getPHPUnitConfiguration
346 public function testPHPUnitConfigurationIsReadCorrectly()
350 'backupGlobals' => true,
351 'backupStaticAttributes' => false,
352 'disallowChangesToGlobalState' => false,
353 'bootstrap' => '/path/to/bootstrap.php',
354 'cacheTokens' => false,
358 'convertErrorsToExceptions' => true,
359 'convertNoticesToExceptions' => true,
360 'convertWarningsToExceptions' => true,
361 'forceCoversAnnotation' => false,
362 'mapTestClassNameToCoveredClassName' => false,
363 'printerClass' => 'PHPUnit_TextUI_ResultPrinter',
364 'stopOnFailure' => false,
365 'reportUselessTests' => false,
366 'strictCoverage' => false,
367 'disallowTestOutput' => false,
368 'enforceTimeLimit' => false,
369 'disallowTodoAnnotatedTests' => false,
370 'testSuiteLoaderClass' => 'PHPUnit_Runner_StandardTestSuiteLoader',
372 'timeoutForSmallTests' => 1,
373 'timeoutForMediumTests' => 10,
374 'timeoutForLargeTests' => 60
376 $this->configuration->getPHPUnitConfiguration()
381 * @covers PHPUnit_Util_Configuration::getSeleniumBrowserConfiguration
383 public function testSeleniumBrowserConfigurationIsReadCorrectly()
389 'name' => 'Firefox on Linux',
390 'browser' => '*firefox /usr/lib/firefox/firefox-bin',
391 'host' => 'my.linux.box',
396 $this->configuration->getSeleniumBrowserConfiguration()
401 * @covers PHPUnit_Util_Configuration::getInstance
403 public function testXincludeInConfiguration()
405 $configurationWithXinclude = PHPUnit_Util_Configuration::getInstance(
406 dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration_xinclude.xml'
409 $this->assertConfigurationEquals(
410 $this->configuration,
411 $configurationWithXinclude
417 * @covers PHPUnit_Util_Configuration::getLoggingConfiguration
418 * @covers PHPUnit_Util_Configuration::getPHPConfiguration
419 * @covers PHPUnit_Util_Configuration::getPHPUnitConfiguration
420 * @covers PHPUnit_Util_Configuration::getTestSuiteConfiguration
421 * @covers PHPUnit_Util_Configuration::getFilterConfiguration
423 * @uses PHPUnit_Util_Configuration::getInstance
425 public function testWithEmptyConfigurations()
427 $emptyConfiguration = PHPUnit_Util_Configuration::getInstance(
428 dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration_empty.xml'
431 $logging = $emptyConfiguration->getLoggingConfiguration();
432 $this->assertEmpty($logging);
434 $php = $emptyConfiguration->getPHPConfiguration();
435 $this->assertEmpty($php['include_path']);
437 $phpunit = $emptyConfiguration->getPHPUnitConfiguration();
438 $this->assertArrayNotHasKey('bootstrap', $phpunit);
439 $this->assertArrayNotHasKey('testSuiteLoaderFile', $phpunit);
440 $this->assertArrayNotHasKey('printerFile', $phpunit);
442 $suite = $emptyConfiguration->getTestSuiteConfiguration();
443 $this->assertEmpty($suite->getGroups());
445 $filter = $emptyConfiguration->getFilterConfiguration();
446 $this->assertEmpty($filter['blacklist']['include']['directory']);
447 $this->assertEmpty($filter['blacklist']['include']['file']);
448 $this->assertEmpty($filter['blacklist']['exclude']['directory']);
449 $this->assertEmpty($filter['blacklist']['exclude']['file']);
450 $this->assertEmpty($filter['whitelist']['include']['directory']);
451 $this->assertEmpty($filter['whitelist']['include']['file']);
452 $this->assertEmpty($filter['whitelist']['exclude']['directory']);
453 $this->assertEmpty($filter['whitelist']['exclude']['file']);
457 * Asserts that the values in $actualConfiguration equal $expectedConfiguration.
459 * @param PHPUnit_Util_Configuration $expectedConfiguration
460 * @param PHPUnit_Util_Configuration $actualConfiguration
462 protected function assertConfigurationEquals(PHPUnit_Util_Configuration $expectedConfiguration, PHPUnit_Util_Configuration $actualConfiguration)
465 $expectedConfiguration->getFilterConfiguration(),
466 $actualConfiguration->getFilterConfiguration()
470 $expectedConfiguration->getGroupConfiguration(),
471 $actualConfiguration->getGroupConfiguration()
475 $expectedConfiguration->getListenerConfiguration(),
476 $actualConfiguration->getListenerConfiguration()
480 $expectedConfiguration->getLoggingConfiguration(),
481 $actualConfiguration->getLoggingConfiguration()
485 $expectedConfiguration->getPHPConfiguration(),
486 $actualConfiguration->getPHPConfiguration()
490 $expectedConfiguration->getPHPUnitConfiguration(),
491 $actualConfiguration->getPHPUnitConfiguration()
495 $expectedConfiguration->getSeleniumBrowserConfiguration(),
496 $actualConfiguration->getSeleniumBrowserConfiguration()
500 $expectedConfiguration->getTestSuiteConfiguration(),
501 $actualConfiguration->getTestSuiteConfiguration()