1<?php 2/* 3 * This file is part of PHPUnit. 4 * 5 * (c) Sebastian Bergmann <sebastian@phpunit.de> 6 * 7 * For the full copyright and license information, please view the LICENSE 8 * file that was distributed with this source code. 9 */ 10 11class Util_ConfigurationTest extends PHPUnit_Framework_TestCase 12{ 13 /** 14 * @var PHPUnit_Util_Configuration 15 */ 16 protected $configuration; 17 18 protected function setUp() 19 { 20 $this->configuration = PHPUnit_Util_Configuration::getInstance( 21 dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration.xml' 22 ); 23 } 24 25 /** 26 * @expectedException PHPUnit_Framework_Exception 27 */ 28 public function testExceptionIsThrownForNotExistingConfigurationFile() 29 { 30 PHPUnit_Util_Configuration::getInstance('not_existing_file.xml'); 31 } 32 33 public function testShouldReadColorsWhenTrueInConfigurationfile() 34 { 35 $configurationFilename = dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration.colors.true.xml'; 36 $configurationInstance = PHPUnit_Util_Configuration::getInstance($configurationFilename); 37 $configurationValues = $configurationInstance->getPHPUnitConfiguration(); 38 39 $this->assertEquals(PHPUnit_TextUI_ResultPrinter::COLOR_AUTO, $configurationValues['colors']); 40 } 41 42 public function testShouldReadColorsWhenFalseInConfigurationfile() 43 { 44 $configurationFilename = dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration.colors.false.xml'; 45 $configurationInstance = PHPUnit_Util_Configuration::getInstance($configurationFilename); 46 $configurationValues = $configurationInstance->getPHPUnitConfiguration(); 47 48 $this->assertEquals(PHPUnit_TextUI_ResultPrinter::COLOR_NEVER, $configurationValues['colors']); 49 } 50 51 public function testShouldReadColorsWhenEmptyInConfigurationfile() 52 { 53 $configurationFilename = dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration.colors.empty.xml'; 54 $configurationInstance = PHPUnit_Util_Configuration::getInstance($configurationFilename); 55 $configurationValues = $configurationInstance->getPHPUnitConfiguration(); 56 57 $this->assertEquals(PHPUnit_TextUI_ResultPrinter::COLOR_NEVER, $configurationValues['colors']); 58 } 59 60 public function testShouldReadColorsWhenInvalidInConfigurationfile() 61 { 62 $configurationFilename = dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration.colors.invalid.xml'; 63 $configurationInstance = PHPUnit_Util_Configuration::getInstance($configurationFilename); 64 $configurationValues = $configurationInstance->getPHPUnitConfiguration(); 65 66 $this->assertEquals(PHPUnit_TextUI_ResultPrinter::COLOR_NEVER, $configurationValues['colors']); 67 } 68 69 public function testFilterConfigurationIsReadCorrectly() 70 { 71 $this->assertEquals( 72 [ 73 'whitelist' => 74 [ 75 'addUncoveredFilesFromWhitelist' => true, 76 'processUncoveredFilesFromWhitelist' => false, 77 'include' => 78 [ 79 'directory' => 80 [ 81 0 => 82 [ 83 'path' => '/path/to/files', 84 'prefix' => '', 85 'suffix' => '.php', 86 'group' => 'DEFAULT' 87 ], 88 ], 89 'file' => 90 [ 91 0 => '/path/to/file', 92 1 => '/path/to/file', 93 ], 94 ], 95 'exclude' => 96 [ 97 'directory' => 98 [ 99 0 => 100 [ 101 'path' => '/path/to/files', 102 'prefix' => '', 103 'suffix' => '.php', 104 'group' => 'DEFAULT' 105 ], 106 ], 107 'file' => 108 [ 109 0 => '/path/to/file', 110 ], 111 ], 112 ], 113 ], 114 $this->configuration->getFilterConfiguration() 115 ); 116 } 117 118 public function testGroupConfigurationIsReadCorrectly() 119 { 120 $this->assertEquals( 121 [ 122 'include' => 123 [ 124 0 => 'name', 125 ], 126 'exclude' => 127 [ 128 0 => 'name', 129 ], 130 ], 131 $this->configuration->getGroupConfiguration() 132 ); 133 } 134 135 public function testTestdoxGroupConfigurationIsReadCorrectly() 136 { 137 $this->assertEquals( 138 [ 139 'include' => 140 [ 141 0 => 'name', 142 ], 143 'exclude' => 144 [ 145 0 => 'name', 146 ], 147 ], 148 $this->configuration->getTestdoxGroupConfiguration() 149 ); 150 } 151 152 public function testListenerConfigurationIsReadCorrectly() 153 { 154 $dir = __DIR__; 155 $includePath = ini_get('include_path'); 156 157 ini_set('include_path', $dir . PATH_SEPARATOR . $includePath); 158 159 $this->assertEquals( 160 [ 161 0 => 162 [ 163 'class' => 'MyListener', 164 'file' => '/optional/path/to/MyListener.php', 165 'arguments' => 166 [ 167 0 => 168 [ 169 0 => 'Sebastian', 170 ], 171 1 => 22, 172 2 => 'April', 173 3 => 19.78, 174 4 => null, 175 5 => new stdClass, 176 6 => dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'MyTestFile.php', 177 7 => dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'MyRelativePath', 178 ], 179 ], 180 [ 181 'class' => 'IncludePathListener', 182 'file' => __FILE__, 183 'arguments' => [] 184 ], 185 [ 186 'class' => 'CompactArgumentsListener', 187 'file' => '/CompactArgumentsListener.php', 188 'arguments' => 189 [ 190 0 => 42 191 ], 192 ], 193 ], 194 $this->configuration->getListenerConfiguration() 195 ); 196 197 ini_set('include_path', $includePath); 198 } 199 200 public function testLoggingConfigurationIsReadCorrectly() 201 { 202 $this->assertEquals( 203 [ 204 'lowUpperBound' => '50', 205 'highLowerBound' => '90', 206 'coverage-html' => '/tmp/report', 207 'coverage-clover' => '/tmp/clover.xml', 208 'json' => '/tmp/logfile.json', 209 'plain' => '/tmp/logfile.txt', 210 'tap' => '/tmp/logfile.tap', 211 'logIncompleteSkipped' => false, 212 'junit' => '/tmp/logfile.xml', 213 'testdox-html' => '/tmp/testdox.html', 214 'testdox-text' => '/tmp/testdox.txt', 215 'testdox-xml' => '/tmp/testdox.xml' 216 ], 217 $this->configuration->getLoggingConfiguration() 218 ); 219 } 220 221 public function testPHPConfigurationIsReadCorrectly() 222 { 223 $this->assertEquals( 224 [ 225 'include_path' => 226 [ 227 dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . '.', 228 '/path/to/lib' 229 ], 230 'ini' => ['foo' => 'bar'], 231 'const' => ['FOO' => false, 'BAR' => true], 232 'var' => ['foo' => false], 233 'env' => ['foo' => true], 234 'post' => ['foo' => 'bar'], 235 'get' => ['foo' => 'bar'], 236 'cookie' => ['foo' => 'bar'], 237 'server' => ['foo' => 'bar'], 238 'files' => ['foo' => 'bar'], 239 'request'=> ['foo' => 'bar'], 240 ], 241 $this->configuration->getPHPConfiguration() 242 ); 243 } 244 245 /** 246 * @backupGlobals enabled 247 */ 248 public function testPHPConfigurationIsHandledCorrectly() 249 { 250 $this->configuration->handlePHPConfiguration(); 251 252 $path = dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . '.' . PATH_SEPARATOR . '/path/to/lib'; 253 $this->assertStringStartsWith($path, ini_get('include_path')); 254 $this->assertEquals(false, FOO); 255 $this->assertEquals(true, BAR); 256 $this->assertEquals(false, $GLOBALS['foo']); 257 $this->assertEquals(true, $_ENV['foo']); 258 $this->assertEquals(true, getenv('foo')); 259 $this->assertEquals('bar', $_POST['foo']); 260 $this->assertEquals('bar', $_GET['foo']); 261 $this->assertEquals('bar', $_COOKIE['foo']); 262 $this->assertEquals('bar', $_SERVER['foo']); 263 $this->assertEquals('bar', $_FILES['foo']); 264 $this->assertEquals('bar', $_REQUEST['foo']); 265 } 266 267 /** 268 * @backupGlobals enabled 269 * 270 * @see https://github.com/sebastianbergmann/phpunit/issues/1181 271 */ 272 public function testHandlePHPConfigurationDoesNotOverwrittenExistingEnvArrayVariables() 273 { 274 $_ENV['foo'] = false; 275 $this->configuration->handlePHPConfiguration(); 276 277 $this->assertEquals(false, $_ENV['foo']); 278 $this->assertEquals(true, getenv('foo')); 279 } 280 281 /** 282 * @backupGlobals enabled 283 * 284 * @see https://github.com/sebastianbergmann/phpunit/issues/1181 285 */ 286 public function testHandlePHPConfigurationDoesNotOverriteVariablesFromPutEnv() 287 { 288 putenv('foo=putenv'); 289 $this->configuration->handlePHPConfiguration(); 290 291 $this->assertEquals(true, $_ENV['foo']); 292 $this->assertEquals('putenv', getenv('foo')); 293 } 294 295 public function testPHPUnitConfigurationIsReadCorrectly() 296 { 297 $this->assertEquals( 298 [ 299 'backupGlobals' => true, 300 'backupStaticAttributes' => false, 301 'beStrictAboutChangesToGlobalState' => false, 302 'bootstrap' => '/path/to/bootstrap.php', 303 'cacheTokens' => false, 304 'columns' => 80, 305 'colors' => 'never', 306 'stderr' => false, 307 'convertErrorsToExceptions' => true, 308 'convertNoticesToExceptions' => true, 309 'convertWarningsToExceptions' => true, 310 'forceCoversAnnotation' => false, 311 'stopOnFailure' => false, 312 'stopOnWarning' => false, 313 'reportUselessTests' => false, 314 'strictCoverage' => false, 315 'disallowTestOutput' => false, 316 'enforceTimeLimit' => false, 317 'extensionsDirectory' => '/tmp', 318 'printerClass' => 'PHPUnit_TextUI_ResultPrinter', 319 'testSuiteLoaderClass' => 'PHPUnit_Runner_StandardTestSuiteLoader', 320 'verbose' => false, 321 'timeoutForSmallTests' => 1, 322 'timeoutForMediumTests' => 10, 323 'timeoutForLargeTests' => 60, 324 'beStrictAboutResourceUsageDuringSmallTests' => false, 325 'disallowTodoAnnotatedTests' => false, 326 'failOnWarning' => false, 327 'failOnRisky' => false 328 ], 329 $this->configuration->getPHPUnitConfiguration() 330 ); 331 } 332 333 public function testXincludeInConfiguration() 334 { 335 $configurationWithXinclude = PHPUnit_Util_Configuration::getInstance( 336 dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration_xinclude.xml' 337 ); 338 339 $this->assertConfigurationEquals( 340 $this->configuration, 341 $configurationWithXinclude 342 ); 343 } 344 345 /** 346 * @ticket 1311 347 * 348 * @uses PHPUnit_Util_Configuration::getInstance 349 */ 350 public function testWithEmptyConfigurations() 351 { 352 $emptyConfiguration = PHPUnit_Util_Configuration::getInstance( 353 dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration_empty.xml' 354 ); 355 356 $logging = $emptyConfiguration->getLoggingConfiguration(); 357 $this->assertEmpty($logging); 358 359 $php = $emptyConfiguration->getPHPConfiguration(); 360 $this->assertEmpty($php['include_path']); 361 362 $phpunit = $emptyConfiguration->getPHPUnitConfiguration(); 363 $this->assertArrayNotHasKey('bootstrap', $phpunit); 364 $this->assertArrayNotHasKey('testSuiteLoaderFile', $phpunit); 365 $this->assertArrayNotHasKey('printerFile', $phpunit); 366 367 $suite = $emptyConfiguration->getTestSuiteConfiguration(); 368 $this->assertEmpty($suite->getGroups()); 369 370 $filter = $emptyConfiguration->getFilterConfiguration(); 371 $this->assertEmpty($filter['whitelist']['include']['directory']); 372 $this->assertEmpty($filter['whitelist']['include']['file']); 373 $this->assertEmpty($filter['whitelist']['exclude']['directory']); 374 $this->assertEmpty($filter['whitelist']['exclude']['file']); 375 } 376 377 /** 378 * Asserts that the values in $actualConfiguration equal $expectedConfiguration. 379 * 380 * @param PHPUnit_Util_Configuration $expectedConfiguration 381 * @param PHPUnit_Util_Configuration $actualConfiguration 382 */ 383 protected function assertConfigurationEquals(PHPUnit_Util_Configuration $expectedConfiguration, PHPUnit_Util_Configuration $actualConfiguration) 384 { 385 $this->assertEquals( 386 $expectedConfiguration->getFilterConfiguration(), 387 $actualConfiguration->getFilterConfiguration() 388 ); 389 390 $this->assertEquals( 391 $expectedConfiguration->getGroupConfiguration(), 392 $actualConfiguration->getGroupConfiguration() 393 ); 394 395 $this->assertEquals( 396 $expectedConfiguration->getListenerConfiguration(), 397 $actualConfiguration->getListenerConfiguration() 398 ); 399 400 $this->assertEquals( 401 $expectedConfiguration->getLoggingConfiguration(), 402 $actualConfiguration->getLoggingConfiguration() 403 ); 404 405 $this->assertEquals( 406 $expectedConfiguration->getPHPConfiguration(), 407 $actualConfiguration->getPHPConfiguration() 408 ); 409 410 $this->assertEquals( 411 $expectedConfiguration->getPHPUnitConfiguration(), 412 $actualConfiguration->getPHPUnitConfiguration() 413 ); 414 415 $this->assertEquals( 416 $expectedConfiguration->getTestSuiteConfiguration(), 417 $actualConfiguration->getTestSuiteConfiguration() 418 ); 419 } 420 421 public function testGetTestSuiteNamesReturnsTheNamesIfDefined() 422 { 423 $configuration = PHPUnit_Util_Configuration::getInstance( 424 dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'configuration.suites.xml' 425 ); 426 427 $names = $configuration->getTestSuiteNames(); 428 429 $this->assertEquals(['Suite One', 'Suite Two'], $names); 430 } 431} 432