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 11if (!defined('TEST_FILES_PATH')) { 12 define( 13 'TEST_FILES_PATH', 14 dirname(__DIR__) . DIRECTORY_SEPARATOR . 15 '_files' . DIRECTORY_SEPARATOR 16 ); 17} 18 19require TEST_FILES_PATH . 'CoverageNamespacedFunctionTest.php'; 20require TEST_FILES_PATH . 'NamespaceCoveredFunction.php'; 21require TEST_FILES_PATH . 'MultipleDataProviderTest.php'; 22 23class Util_TestTest extends PHPUnit_Framework_TestCase 24{ 25 /** 26 * @todo Split up in separate tests 27 */ 28 public function testGetExpectedException() 29 { 30 $this->assertArraySubset( 31 ['class' => 'FooBarBaz', 'code' => null, 'message' => ''], 32 PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testOne') 33 ); 34 35 $this->assertArraySubset( 36 ['class' => 'Foo_Bar_Baz', 'code' => null, 'message' => ''], 37 PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testTwo') 38 ); 39 40 $this->assertArraySubset( 41 ['class' => 'Foo\Bar\Baz', 'code' => null, 'message' => ''], 42 PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testThree') 43 ); 44 45 $this->assertArraySubset( 46 ['class' => 'ほげ', 'code' => null, 'message' => ''], 47 PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testFour') 48 ); 49 50 $this->assertArraySubset( 51 ['class' => 'Class', 'code' => 1234, 'message' => 'Message'], 52 PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testFive') 53 ); 54 55 $this->assertArraySubset( 56 ['class' => 'Class', 'code' => 1234, 'message' => 'Message'], 57 PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testSix') 58 ); 59 60 $this->assertArraySubset( 61 ['class' => 'Class', 'code' => 'ExceptionCode', 'message' => 'Message'], 62 PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testSeven') 63 ); 64 65 $this->assertArraySubset( 66 ['class' => 'Class', 'code' => 0, 'message' => 'Message'], 67 PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testEight') 68 ); 69 70 $this->assertArraySubset( 71 ['class' => 'Class', 'code' => ExceptionTest::ERROR_CODE, 'message' => ExceptionTest::ERROR_MESSAGE], 72 PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testNine') 73 ); 74 75 $this->assertArraySubset( 76 ['class' => 'Class', 'code' => null, 'message' => ''], 77 PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testSingleLine') 78 ); 79 80 $this->assertArraySubset( 81 ['class' => 'Class', 'code' => My\Space\ExceptionNamespaceTest::ERROR_CODE, 'message' => My\Space\ExceptionNamespaceTest::ERROR_MESSAGE], 82 PHPUnit_Util_Test::getExpectedException('My\Space\ExceptionNamespaceTest', 'testConstants') 83 ); 84 85 // Ensure the Class::CONST expression is only evaluated when the constant really exists 86 $this->assertArraySubset( 87 ['class' => 'Class', 'code' => 'ExceptionTest::UNKNOWN_CODE_CONSTANT', 'message' => 'ExceptionTest::UNKNOWN_MESSAGE_CONSTANT'], 88 PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testUnknownConstants') 89 ); 90 91 $this->assertArraySubset( 92 ['class' => 'Class', 'code' => 'My\Space\ExceptionNamespaceTest::UNKNOWN_CODE_CONSTANT', 'message' => 'My\Space\ExceptionNamespaceTest::UNKNOWN_MESSAGE_CONSTANT'], 93 PHPUnit_Util_Test::getExpectedException('My\Space\ExceptionNamespaceTest', 'testUnknownConstants') 94 ); 95 } 96 97 public function testGetExpectedRegExp() 98 { 99 $this->assertArraySubset( 100 ['message_regex' => '#regex#'], 101 PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testWithRegexMessage') 102 ); 103 104 $this->assertArraySubset( 105 ['message_regex' => '#regex#'], 106 PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testWithRegexMessageFromClassConstant') 107 ); 108 109 $this->assertArraySubset( 110 ['message_regex' => 'ExceptionTest::UNKNOWN_MESSAGE_REGEX_CONSTANT'], 111 PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testWithUnknowRegexMessageFromClassConstant') 112 ); 113 } 114 115 /** 116 * @dataProvider requirementsProvider 117 */ 118 public function testGetRequirements($test, $result) 119 { 120 $this->assertEquals( 121 $result, 122 PHPUnit_Util_Test::getRequirements('RequirementsTest', $test) 123 ); 124 } 125 126 public function requirementsProvider() 127 { 128 return [ 129 ['testOne', []], 130 ['testTwo', ['PHPUnit' => ['version' => '1.0', 'operator' => '']]], 131 ['testThree', ['PHP' => ['version' => '2.0', 'operator' => '']]], 132 ['testFour', [ 133 'PHPUnit' => ['version' => '2.0', 'operator' => ''], 134 'PHP' => ['version' => '1.0', 'operator' => '']] 135 ], 136 ['testFive', ['PHP' => ['version' => '5.4.0RC6', 'operator' => '']]], 137 ['testSix', ['PHP' => ['version' => '5.4.0-alpha1', 'operator' => '']]], 138 ['testSeven', ['PHP' => ['version' => '5.4.0beta2', 'operator' => '']]], 139 ['testEight', ['PHP' => ['version' => '5.4-dev', 'operator' => '']]], 140 ['testNine', ['functions' => ['testFunc']]], 141 ['testTen', ['extensions' => ['testExt']]], 142 ['testEleven', ['OS' => '/Linux/i']], 143 [ 144 'testSpace', 145 [ 146 'extensions' => ['spl'], 147 'OS' => '/.*/i' 148 ] 149 ], 150 [ 151 'testAllPossibleRequirements', 152 [ 153 'PHP' => ['version' => '99-dev', 'operator' => ''], 154 'PHPUnit' => ['version' => '9-dev', 'operator' => ''], 155 'OS' => '/DOESNOTEXIST/i', 156 'functions' => [ 157 'testFuncOne', 158 'testFuncTwo', 159 ], 160 'extensions' => [ 161 'testExtOne', 162 'testExtTwo', 163 'testExtThree', 164 ], 165 'extension_versions' => [ 166 'testExtThree' => ['version' => '2.0', 'operator' => ''] 167 ] 168 ] 169 ], 170 ['testSpecificExtensionVersion', 171 [ 172 'extension_versions' => ['testExt' => ['version' => '1.8.0', 'operator' => '']], 173 'extensions' => ['testExt'] 174 ] 175 ], 176 ['testPHPVersionOperatorLessThan', 177 [ 178 'PHP' => ['version' => '5.4', 'operator' => '<'] 179 ] 180 ], 181 ['testPHPVersionOperatorLessThanEquals', 182 [ 183 'PHP' => ['version' => '5.4', 'operator' => '<='] 184 ] 185 ], 186 ['testPHPVersionOperatorGreaterThan', 187 [ 188 'PHP' => ['version' => '99', 'operator' => '>'] 189 ] 190 ], 191 ['testPHPVersionOperatorGreaterThanEquals', 192 [ 193 'PHP' => ['version' => '99', 'operator' => '>='] 194 ] 195 ], 196 ['testPHPVersionOperatorEquals', 197 [ 198 'PHP' => ['version' => '5.4', 'operator' => '='] 199 ] 200 ], 201 ['testPHPVersionOperatorDoubleEquals', 202 [ 203 'PHP' => ['version' => '5.4', 'operator' => '=='] 204 ] 205 ], 206 ['testPHPVersionOperatorBangEquals', 207 [ 208 'PHP' => ['version' => '99', 'operator' => '!='] 209 ] 210 ], 211 ['testPHPVersionOperatorNotEquals', 212 [ 213 'PHP' => ['version' => '99', 'operator' => '<>'] 214 ] 215 ], 216 ['testPHPVersionOperatorNoSpace', 217 [ 218 'PHP' => ['version' => '99', 'operator' => '>='] 219 ] 220 ], 221 ['testPHPUnitVersionOperatorLessThan', 222 [ 223 'PHPUnit' => ['version' => '1.0', 'operator' => '<'] 224 ] 225 ], 226 ['testPHPUnitVersionOperatorLessThanEquals', 227 [ 228 'PHPUnit' => ['version' => '1.0', 'operator' => '<='] 229 ] 230 ], 231 ['testPHPUnitVersionOperatorGreaterThan', 232 [ 233 'PHPUnit' => ['version' => '99', 'operator' => '>'] 234 ] 235 ], 236 ['testPHPUnitVersionOperatorGreaterThanEquals', 237 [ 238 'PHPUnit' => ['version' => '99', 'operator' => '>='] 239 ] 240 ], 241 ['testPHPUnitVersionOperatorEquals', 242 [ 243 'PHPUnit' => ['version' => '1.0', 'operator' => '='] 244 ] 245 ], 246 ['testPHPUnitVersionOperatorDoubleEquals', 247 [ 248 'PHPUnit' => ['version' => '1.0', 'operator' => '=='] 249 ] 250 ], 251 ['testPHPUnitVersionOperatorBangEquals', 252 [ 253 'PHPUnit' => ['version' => '99', 'operator' => '!='] 254 ] 255 ], 256 ['testPHPUnitVersionOperatorNotEquals', 257 [ 258 'PHPUnit' => ['version' => '99', 'operator' => '<>'] 259 ] 260 ], 261 ['testPHPUnitVersionOperatorNoSpace', 262 [ 263 'PHPUnit' => ['version' => '99', 'operator' => '>='] 264 ] 265 ], 266 ['testExtensionVersionOperatorLessThanEquals', 267 [ 268 'extensions' => ['testExtOne'], 269 'extension_versions' => ['testExtOne' => ['version' => '1.0', 'operator' => '<=']] 270 ] 271 ], 272 ['testExtensionVersionOperatorGreaterThan', 273 [ 274 'extensions' => ['testExtOne'], 275 'extension_versions' => ['testExtOne' => ['version' => '99', 'operator' => '>']] 276 ] 277 ], 278 ['testExtensionVersionOperatorGreaterThanEquals', 279 [ 280 'extensions' => ['testExtOne'], 281 'extension_versions' => ['testExtOne' => ['version' => '99', 'operator' => '>=']] 282 ] 283 ], 284 ['testExtensionVersionOperatorEquals', 285 [ 286 'extensions' => ['testExtOne'], 287 'extension_versions' => ['testExtOne' => ['version' => '1.0', 'operator' => '=']] 288 ] 289 ], 290 ['testExtensionVersionOperatorDoubleEquals', 291 [ 292 'extensions' => ['testExtOne'], 293 'extension_versions' => ['testExtOne' => ['version' => '1.0', 'operator' => '==']] 294 ] 295 ], 296 ['testExtensionVersionOperatorBangEquals', 297 [ 298 'extensions' => ['testExtOne'], 299 'extension_versions' => ['testExtOne' => ['version' => '99', 'operator' => '!=']] 300 ] 301 ], 302 ['testExtensionVersionOperatorNotEquals', 303 [ 304 'extensions' => ['testExtOne'], 305 'extension_versions' => ['testExtOne' => ['version' => '99', 'operator' => '<>']] 306 ] 307 ], 308 ['testExtensionVersionOperatorNoSpace', 309 [ 310 'extensions' => ['testExtOne'], 311 'extension_versions' => ['testExtOne' => ['version' => '99', 'operator' => '>=']] 312 ] 313 ], 314 ]; 315 } 316 317 public function testGetRequirementsMergesClassAndMethodDocBlocks() 318 { 319 $expectedAnnotations = [ 320 'PHP' => ['version' => '5.4', 'operator' => ''], 321 'PHPUnit' => ['version' => '3.7', 'operator' => ''], 322 'OS' => '/WINNT/i', 323 'functions' => [ 324 'testFuncClass', 325 'testFuncMethod', 326 ], 327 'extensions' => [ 328 'testExtClass', 329 'testExtMethod', 330 ] 331 ]; 332 333 $this->assertEquals( 334 $expectedAnnotations, 335 PHPUnit_Util_Test::getRequirements('RequirementsClassDocBlockTest', 'testMethod') 336 ); 337 } 338 339 /** 340 * @dataProvider missingRequirementsProvider 341 */ 342 public function testGetMissingRequirements($test, $result) 343 { 344 $this->assertEquals( 345 $result, 346 PHPUnit_Util_Test::getMissingRequirements('RequirementsTest', $test) 347 ); 348 } 349 350 public function missingRequirementsProvider() 351 { 352 return [ 353 ['testOne', []], 354 ['testNine', ['Function testFunc is required.']], 355 ['testTen', ['Extension testExt is required.']], 356 ['testAlwaysSkip', ['PHPUnit >= 1111111 is required.']], 357 ['testAlwaysSkip2', ['PHP >= 9999999 is required.']], 358 ['testAlwaysSkip3', ['Operating system matching /DOESNOTEXIST/i is required.']], 359 ['testAllPossibleRequirements', [ 360 'PHP >= 99-dev is required.', 361 'PHPUnit >= 9-dev is required.', 362 'Operating system matching /DOESNOTEXIST/i is required.', 363 'Function testFuncOne is required.', 364 'Function testFuncTwo is required.', 365 'Extension testExtOne is required.', 366 'Extension testExtTwo is required.', 367 'Extension testExtThree >= 2.0 is required.', 368 ]], 369 ['testPHPVersionOperatorLessThan', ['PHP < 5.4 is required.']], 370 ['testPHPVersionOperatorLessThanEquals', ['PHP <= 5.4 is required.']], 371 ['testPHPVersionOperatorGreaterThan', ['PHP > 99 is required.']], 372 ['testPHPVersionOperatorGreaterThanEquals', ['PHP >= 99 is required.']], 373 ['testPHPVersionOperatorNoSpace', ['PHP >= 99 is required.']], 374 ['testPHPVersionOperatorEquals', ['PHP = 5.4 is required.']], 375 ['testPHPVersionOperatorDoubleEquals', ['PHP == 5.4 is required.']], 376 ['testPHPUnitVersionOperatorLessThan', ['PHPUnit < 1.0 is required.']], 377 ['testPHPUnitVersionOperatorLessThanEquals', ['PHPUnit <= 1.0 is required.']], 378 ['testPHPUnitVersionOperatorGreaterThan', ['PHPUnit > 99 is required.']], 379 ['testPHPUnitVersionOperatorGreaterThanEquals', ['PHPUnit >= 99 is required.']], 380 ['testPHPUnitVersionOperatorEquals', ['PHPUnit = 1.0 is required.']], 381 ['testPHPUnitVersionOperatorDoubleEquals', ['PHPUnit == 1.0 is required.']], 382 ['testPHPUnitVersionOperatorNoSpace', ['PHPUnit >= 99 is required.']], 383 ['testExtensionVersionOperatorLessThan', ['Extension testExtOne < 1.0 is required.']], 384 ['testExtensionVersionOperatorLessThanEquals', ['Extension testExtOne <= 1.0 is required.']], 385 ['testExtensionVersionOperatorGreaterThan', ['Extension testExtOne > 99 is required.']], 386 ['testExtensionVersionOperatorGreaterThanEquals', ['Extension testExtOne >= 99 is required.']], 387 ['testExtensionVersionOperatorEquals', ['Extension testExtOne = 1.0 is required.']], 388 ['testExtensionVersionOperatorDoubleEquals', ['Extension testExtOne == 1.0 is required.']], 389 ['testExtensionVersionOperatorNoSpace', ['Extension testExtOne >= 99 is required.']], 390 ]; 391 } 392 393 /** 394 * @todo This test does not really test functionality of PHPUnit_Util_Test 395 */ 396 public function testGetProvidedDataRegEx() 397 { 398 $result = preg_match(PHPUnit_Util_Test::REGEX_DATA_PROVIDER, '@dataProvider method', $matches); 399 $this->assertEquals(1, $result); 400 $this->assertEquals('method', $matches[1]); 401 402 $result = preg_match(PHPUnit_Util_Test::REGEX_DATA_PROVIDER, '@dataProvider class::method', $matches); 403 $this->assertEquals(1, $result); 404 $this->assertEquals('class::method', $matches[1]); 405 406 $result = preg_match(PHPUnit_Util_Test::REGEX_DATA_PROVIDER, '@dataProvider namespace\class::method', $matches); 407 $this->assertEquals(1, $result); 408 $this->assertEquals('namespace\class::method', $matches[1]); 409 410 $result = preg_match(PHPUnit_Util_Test::REGEX_DATA_PROVIDER, '@dataProvider namespace\namespace\class::method', $matches); 411 $this->assertEquals(1, $result); 412 $this->assertEquals('namespace\namespace\class::method', $matches[1]); 413 414 $result = preg_match(PHPUnit_Util_Test::REGEX_DATA_PROVIDER, '@dataProvider メソッド', $matches); 415 $this->assertEquals(1, $result); 416 $this->assertEquals('メソッド', $matches[1]); 417 } 418 419 /** 420 * Check if all data providers are being merged. 421 */ 422 public function testMultipleDataProviders() 423 { 424 $dataSets = PHPUnit_Util_Test::getProvidedData('MultipleDataProviderTest', 'testOne'); 425 426 $this->assertCount(9, $dataSets); 427 428 $aCount = 0; 429 $bCount = 0; 430 $cCount = 0; 431 432 for ($i = 0; $i < 9; $i++) { 433 $aCount += $dataSets[$i][0] != null ? 1 : 0; 434 $bCount += $dataSets[$i][1] != null ? 1 : 0; 435 $cCount += $dataSets[$i][2] != null ? 1 : 0; 436 } 437 438 $this->assertEquals(3, $aCount); 439 $this->assertEquals(3, $bCount); 440 $this->assertEquals(3, $cCount); 441 } 442 443 /** 444 * Check with a multiple yield / iterator data providers. 445 */ 446 public function testMultipleYieldIteratorDataProviders() 447 { 448 $dataSets = PHPUnit_Util_Test::getProvidedData('MultipleDataProviderTest', 'testTwo'); 449 450 $this->assertEquals(9, count($dataSets)); 451 452 $aCount = 0; 453 $bCount = 0; 454 $cCount = 0; 455 456 for ($i = 0; $i < 9; $i++) { 457 $aCount += $dataSets[$i][0] != null ? 1 : 0; 458 $bCount += $dataSets[$i][1] != null ? 1 : 0; 459 $cCount += $dataSets[$i][2] != null ? 1 : 0; 460 } 461 462 $this->assertEquals(3, $aCount); 463 $this->assertEquals(3, $bCount); 464 $this->assertEquals(3, $cCount); 465 } 466 467 public function testTestWithEmptyAnnotation() 468 { 469 $result = PHPUnit_Util_Test::getDataFromTestWithAnnotation("/**\n * @anotherAnnotation\n */"); 470 $this->assertNull($result); 471 } 472 473 public function testTestWithSimpleCase() 474 { 475 $result = PHPUnit_Util_Test::getDataFromTestWithAnnotation('/** 476 * @testWith [1] 477 */'); 478 $this->assertEquals([[1]], $result); 479 } 480 481 public function testTestWithMultiLineMultiParameterCase() 482 { 483 $result = PHPUnit_Util_Test::getDataFromTestWithAnnotation('/** 484 * @testWith [1, 2] 485 * [3, 4] 486 */'); 487 $this->assertEquals([[1, 2], [3, 4]], $result); 488 } 489 490 public function testTestWithVariousTypes() 491 { 492 $result = PHPUnit_Util_Test::getDataFromTestWithAnnotation('/** 493 * @testWith ["ab"] 494 * [true] 495 * [null] 496 */'); 497 $this->assertEquals([['ab'], [true], [null]], $result); 498 } 499 500 public function testTestWithAnnotationAfter() 501 { 502 $result = PHPUnit_Util_Test::getDataFromTestWithAnnotation('/** 503 * @testWith [1] 504 * [2] 505 * @annotation 506 */'); 507 $this->assertEquals([[1], [2]], $result); 508 } 509 510 public function testTestWithSimpleTextAfter() 511 { 512 $result = PHPUnit_Util_Test::getDataFromTestWithAnnotation('/** 513 * @testWith [1] 514 * [2] 515 * blah blah 516 */'); 517 $this->assertEquals([[1], [2]], $result); 518 } 519 520 public function testTestWithCharacterEscape() 521 { 522 $result = PHPUnit_Util_Test::getDataFromTestWithAnnotation('/** 523 * @testWith ["\"", "\""] 524 */'); 525 $this->assertEquals([['"', '"']], $result); 526 } 527 528 public function testTestWithThrowsProperExceptionIfDatasetCannotBeParsed() 529 { 530 $this->expectException(PHPUnit_Framework_Exception::class); 531 $this->expectExceptionMessageRegExp('/^The dataset for the @testWith annotation cannot be parsed:/'); 532 533 PHPUnit_Util_Test::getDataFromTestWithAnnotation('/** 534 * @testWith [s] 535 */'); 536 } 537 538 public function testTestWithThrowsProperExceptionIfMultiLineDatasetCannotBeParsed() 539 { 540 $this->expectException(PHPUnit_Framework_Exception::class); 541 $this->expectExceptionMessageRegExp('/^The dataset for the @testWith annotation cannot be parsed:/'); 542 543 PHPUnit_Util_Test::getDataFromTestWithAnnotation('/** 544 * @testWith ["valid"] 545 * [invalid] 546 */'); 547 } 548 549 /** 550 * @todo Not sure what this test tests (name is misleading at least) 551 */ 552 public function testParseAnnotation() 553 { 554 $this->assertEquals( 555 ['Foo', 'ほげ'], 556 PHPUnit_Util_Test::getDependencies(get_class($this), 'methodForTestParseAnnotation') 557 ); 558 } 559 560 /** 561 * @depends Foo 562 * @depends ほげ 563 * 564 * @todo Remove fixture from test class 565 */ 566 public function methodForTestParseAnnotation() 567 { 568 } 569 570 public function testParseAnnotationThatIsOnlyOneLine() 571 { 572 $this->assertEquals( 573 ['Bar'], 574 PHPUnit_Util_Test::getDependencies(get_class($this), 'methodForTestParseAnnotationThatIsOnlyOneLine') 575 ); 576 } 577 578 /** @depends Bar */ 579 public function methodForTestParseAnnotationThatIsOnlyOneLine() 580 { 581 // TODO Remove fixture from test class 582 } 583 584 /** 585 * @dataProvider getLinesToBeCoveredProvider 586 */ 587 public function testGetLinesToBeCovered($test, $lines) 588 { 589 if (strpos($test, 'Namespace') === 0) { 590 $expected = [ 591 TEST_FILES_PATH . 'NamespaceCoveredClass.php' => $lines 592 ]; 593 } elseif ($test === 'CoverageNoneTest') { 594 $expected = []; 595 } elseif ($test === 'CoverageNothingTest') { 596 $expected = false; 597 } elseif ($test === 'CoverageFunctionTest') { 598 $expected = [ 599 TEST_FILES_PATH . 'CoveredFunction.php' => $lines 600 ]; 601 } else { 602 $expected = [TEST_FILES_PATH . 'CoveredClass.php' => $lines]; 603 } 604 605 $this->assertEquals( 606 $expected, 607 PHPUnit_Util_Test::getLinesToBeCovered( 608 $test, 'testSomething' 609 ) 610 ); 611 } 612 613 /** 614 * @expectedException PHPUnit_Framework_CodeCoverageException 615 */ 616 public function testGetLinesToBeCovered2() 617 { 618 PHPUnit_Util_Test::getLinesToBeCovered( 619 'NotExistingCoveredElementTest', 'testOne' 620 ); 621 } 622 623 /** 624 * @expectedException PHPUnit_Framework_CodeCoverageException 625 */ 626 public function testGetLinesToBeCovered3() 627 { 628 PHPUnit_Util_Test::getLinesToBeCovered( 629 'NotExistingCoveredElementTest', 'testTwo' 630 ); 631 } 632 633 /** 634 * @expectedException PHPUnit_Framework_CodeCoverageException 635 */ 636 public function testGetLinesToBeCovered4() 637 { 638 PHPUnit_Util_Test::getLinesToBeCovered( 639 'NotExistingCoveredElementTest', 'testThree' 640 ); 641 } 642 643 public function testGetLinesToBeCoveredSkipsNonExistentMethods() 644 { 645 $this->assertSame( 646 [], 647 PHPUnit_Util_Test::getLinesToBeCovered( 648 'NotExistingCoveredElementTest', 649 'methodDoesNotExist' 650 ) 651 ); 652 } 653 654 /** 655 * @expectedException PHPUnit_Framework_CodeCoverageException 656 */ 657 public function testTwoCoversDefaultClassAnnoationsAreNotAllowed() 658 { 659 PHPUnit_Util_Test::getLinesToBeCovered( 660 'CoverageTwoDefaultClassAnnotations', 661 'testSomething' 662 ); 663 } 664 665 public function testFunctionParenthesesAreAllowed() 666 { 667 $this->assertSame( 668 [TEST_FILES_PATH . 'CoveredFunction.php' => range(2, 4)], 669 PHPUnit_Util_Test::getLinesToBeCovered( 670 'CoverageFunctionParenthesesTest', 671 'testSomething' 672 ) 673 ); 674 } 675 676 public function testFunctionParenthesesAreAllowedWithWhitespace() 677 { 678 $this->assertSame( 679 [TEST_FILES_PATH . 'CoveredFunction.php' => range(2, 4)], 680 PHPUnit_Util_Test::getLinesToBeCovered( 681 'CoverageFunctionParenthesesWhitespaceTest', 682 'testSomething' 683 ) 684 ); 685 } 686 687 public function testMethodParenthesesAreAllowed() 688 { 689 $this->assertSame( 690 [TEST_FILES_PATH . 'CoveredClass.php' => range(31, 35)], 691 PHPUnit_Util_Test::getLinesToBeCovered( 692 'CoverageMethodParenthesesTest', 693 'testSomething' 694 ) 695 ); 696 } 697 698 public function testMethodParenthesesAreAllowedWithWhitespace() 699 { 700 $this->assertSame( 701 [TEST_FILES_PATH . 'CoveredClass.php' => range(31, 35)], 702 PHPUnit_Util_Test::getLinesToBeCovered( 703 'CoverageMethodParenthesesWhitespaceTest', 704 'testSomething' 705 ) 706 ); 707 } 708 709 public function testNamespacedFunctionCanBeCoveredOrUsed() 710 { 711 $this->assertEquals( 712 [ 713 TEST_FILES_PATH . 'NamespaceCoveredFunction.php' => range(4, 7) 714 ], 715 PHPUnit_Util_Test::getLinesToBeCovered( 716 'CoverageNamespacedFunctionTest', 717 'testFunc' 718 ) 719 ); 720 } 721 722 public function getLinesToBeCoveredProvider() 723 { 724 return [ 725 [ 726 'CoverageNoneTest', 727 [] 728 ], 729 [ 730 'CoverageClassExtendedTest', 731 array_merge(range(19, 36), range(2, 17)) 732 ], 733 [ 734 'CoverageClassTest', 735 range(19, 36) 736 ], 737 [ 738 'CoverageMethodTest', 739 range(31, 35) 740 ], 741 [ 742 'CoverageMethodOneLineAnnotationTest', 743 range(31, 35) 744 ], 745 [ 746 'CoverageNotPrivateTest', 747 array_merge(range(25, 29), range(31, 35)) 748 ], 749 [ 750 'CoverageNotProtectedTest', 751 array_merge(range(21, 23), range(31, 35)) 752 ], 753 [ 754 'CoverageNotPublicTest', 755 array_merge(range(21, 23), range(25, 29)) 756 ], 757 [ 758 'CoveragePrivateTest', 759 range(21, 23) 760 ], 761 [ 762 'CoverageProtectedTest', 763 range(25, 29) 764 ], 765 [ 766 'CoveragePublicTest', 767 range(31, 35) 768 ], 769 [ 770 'CoverageFunctionTest', 771 range(2, 4) 772 ], 773 [ 774 'NamespaceCoverageClassExtendedTest', 775 array_merge(range(21, 38), range(4, 19)) 776 ], 777 [ 778 'NamespaceCoverageClassTest', 779 range(21, 38) 780 ], 781 [ 782 'NamespaceCoverageMethodTest', 783 range(33, 37) 784 ], 785 [ 786 'NamespaceCoverageNotPrivateTest', 787 array_merge(range(27, 31), range(33, 37)) 788 ], 789 [ 790 'NamespaceCoverageNotProtectedTest', 791 array_merge(range(23, 25), range(33, 37)) 792 ], 793 [ 794 'NamespaceCoverageNotPublicTest', 795 array_merge(range(23, 25), range(27, 31)) 796 ], 797 [ 798 'NamespaceCoveragePrivateTest', 799 range(23, 25) 800 ], 801 [ 802 'NamespaceCoverageProtectedTest', 803 range(27, 31) 804 ], 805 [ 806 'NamespaceCoveragePublicTest', 807 range(33, 37) 808 ], 809 [ 810 'NamespaceCoverageCoversClassTest', 811 array_merge(range(23, 25), range(27, 31), range(33, 37), range(6, 8), range(10, 13), range(15, 18)) 812 ], 813 [ 814 'NamespaceCoverageCoversClassPublicTest', 815 range(33, 37) 816 ], 817 [ 818 'CoverageNothingTest', 819 false 820 ] 821 ]; 822 } 823} 824