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.
11
if (!defined('TEST_FILES_PATH')) {
14
dirname(__DIR__) . DIRECTORY_SEPARATOR .
15
'_files' . DIRECTORY_SEPARATOR
23
* @author Sebastian Bergmann <sebastian@phpunit.de>
24
* @copyright Sebastian Bergmann <sebastian@phpunit.de>
25
* @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
26
* @link http://www.phpunit.de/
27
* @since Class available since Release 3.3.6
29
class Util_TestTest extends PHPUnit_Framework_TestCase
32
* @covers PHPUnit_Util_Test::getExpectedException
33
* @todo Split up in separate tests
35
public function testGetExpectedException()
37
$this->assertArraySubset(
38
array('class' => 'FooBarBaz', 'code' => null, 'message' => ''),
39
PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testOne')
42
$this->assertArraySubset(
43
array('class' => 'Foo_Bar_Baz', 'code' => null, 'message' => ''),
44
PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testTwo')
47
$this->assertArraySubset(
48
array('class' => 'Foo\Bar\Baz', 'code' => null, 'message' => ''),
49
PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testThree')
52
$this->assertArraySubset(
53
array('class' => 'ほげ', 'code' => null, 'message' => ''),
54
PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testFour')
57
$this->assertArraySubset(
58
array('class' => 'Class', 'code' => 1234, 'message' => 'Message'),
59
PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testFive')
62
$this->assertArraySubset(
63
array('class' => 'Class', 'code' => 1234, 'message' => 'Message'),
64
PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testSix')
67
$this->assertArraySubset(
68
array('class' => 'Class', 'code' => 'ExceptionCode', 'message' => 'Message'),
69
PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testSeven')
72
$this->assertArraySubset(
73
array('class' => 'Class', 'code' => 0, 'message' => 'Message'),
74
PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testEight')
77
$this->assertArraySubset(
78
array('class' => 'Class', 'code' => ExceptionTest::ERROR_CODE, 'message' => ExceptionTest::ERROR_MESSAGE),
79
PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testNine')
82
$this->assertArraySubset(
83
array('class' => 'Class', 'code' => null, 'message' => ''),
84
PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testSingleLine')
87
$this->assertArraySubset(
88
array('class' => 'Class', 'code' => My\Space\ExceptionNamespaceTest::ERROR_CODE, 'message' => My\Space\ExceptionNamespaceTest::ERROR_MESSAGE),
89
PHPUnit_Util_Test::getExpectedException('My\Space\ExceptionNamespaceTest', 'testConstants')
92
// Ensure the Class::CONST expression is only evaluated when the constant really exists
93
$this->assertArraySubset(
94
array('class' => 'Class', 'code' => 'ExceptionTest::UNKNOWN_CODE_CONSTANT', 'message' => 'ExceptionTest::UNKNOWN_MESSAGE_CONSTANT'),
95
PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testUnknownConstants')
98
$this->assertArraySubset(
99
array('class' => 'Class', 'code' => 'My\Space\ExceptionNamespaceTest::UNKNOWN_CODE_CONSTANT', 'message' => 'My\Space\ExceptionNamespaceTest::UNKNOWN_MESSAGE_CONSTANT'),
100
PHPUnit_Util_Test::getExpectedException('My\Space\ExceptionNamespaceTest', 'testUnknownConstants')
105
* @covers PHPUnit_Util_Test::getExpectedException
107
public function testGetExpectedRegExp()
109
$this->assertArraySubset(
110
array('message_regex' => '#regex#'),
111
PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testWithRegexMessage')
114
$this->assertArraySubset(
115
array('message_regex' => '#regex#'),
116
PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testWithRegexMessageFromClassConstant')
119
$this->assertArraySubset(
120
array('message_regex' => 'ExceptionTest::UNKNOWN_MESSAGE_REGEX_CONSTANT'),
121
PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testWithUnknowRegexMessageFromClassConstant')
126
* @covers PHPUnit_Util_Test::getRequirements
127
* @dataProvider requirementsProvider
129
public function testGetRequirements($test, $result)
133
PHPUnit_Util_Test::getRequirements('RequirementsTest', $test)
137
public function requirementsProvider()
140
array('testOne', array()),
141
array('testTwo', array('PHPUnit' => '1.0')),
142
array('testThree', array('PHP' => '2.0')),
143
array('testFour', array('PHPUnit'=>'2.0', 'PHP' => '1.0')),
144
array('testFive', array('PHP' => '5.4.0RC6')),
145
array('testSix', array('PHP' => '5.4.0-alpha1')),
146
array('testSeven', array('PHP' => '5.4.0beta2')),
147
array('testEight', array('PHP' => '5.4-dev')),
148
array('testNine', array('functions' => array('testFunc'))),
149
array('testTen', array('extensions' => array('testExt'))),
150
array('testEleven', array('OS' => '/Linux/i')),
154
'extensions' => array('spl'),
159
'testAllPossibleRequirements',
162
'PHPUnit' => '9-dev',
163
'OS' => '/DOESNOTEXIST/i',
164
'functions' => array(
168
'extensions' => array(
178
* @covers PHPUnit_Util_Test::getRequirements
180
public function testGetRequirementsMergesClassAndMethodDocBlocks()
182
$expectedAnnotations = array(
186
'functions' => array(
190
'extensions' => array(
197
$expectedAnnotations,
198
PHPUnit_Util_Test::getRequirements('RequirementsClassDocBlockTest', 'testMethod')
203
* @covers PHPUnit_Util_Test::getMissingRequirements
204
* @dataProvider missingRequirementsProvider
206
public function testGetMissingRequirements($test, $result)
210
PHPUnit_Util_Test::getMissingRequirements('RequirementsTest', $test)
214
public function missingRequirementsProvider()
217
array('testOne', array()),
218
array('testNine', array('Function testFunc is required.')),
219
array('testTen', array('Extension testExt is required.')),
220
array('testAlwaysSkip', array('PHPUnit 1111111 (or later) is required.')),
221
array('testAlwaysSkip2', array('PHP 9999999 (or later) is required.')),
222
array('testAlwaysSkip3', array('Operating system matching /DOESNOTEXIST/i is required.')),
223
array('testAllPossibleRequirements', array(
224
'PHP 99-dev (or later) is required.',
225
'PHPUnit 9-dev (or later) is required.',
226
'Operating system matching /DOESNOTEXIST/i is required.',
227
'Function testFuncOne is required.',
228
'Function testFuncTwo is required.',
229
'Extension testExtOne is required.',
230
'Extension testExtTwo is required.',
237
* @todo This test does not really test functionality of PHPUnit_Util_Test
239
public function testGetProvidedDataRegEx()
241
$result = preg_match(PHPUnit_Util_Test::REGEX_DATA_PROVIDER, '@dataProvider method', $matches);
242
$this->assertEquals(1, $result);
243
$this->assertEquals('method', $matches[1]);
245
$result = preg_match(PHPUnit_Util_Test::REGEX_DATA_PROVIDER, '@dataProvider class::method', $matches);
246
$this->assertEquals(1, $result);
247
$this->assertEquals('class::method', $matches[1]);
249
$result = preg_match(PHPUnit_Util_Test::REGEX_DATA_PROVIDER, '@dataProvider namespace\class::method', $matches);
250
$this->assertEquals(1, $result);
251
$this->assertEquals('namespace\class::method', $matches[1]);
253
$result = preg_match(PHPUnit_Util_Test::REGEX_DATA_PROVIDER, '@dataProvider namespace\namespace\class::method', $matches);
254
$this->assertEquals(1, $result);
255
$this->assertEquals('namespace\namespace\class::method', $matches[1]);
257
$result = preg_match(PHPUnit_Util_Test::REGEX_DATA_PROVIDER, '@dataProvider メソッド', $matches);
258
$this->assertEquals(1, $result);
259
$this->assertEquals('メソッド', $matches[1]);
263
* @covers PHPUnit_Util_Test::getDependencies
264
* @todo Not sure what this test tests (name is misleading at least)
266
public function testParseAnnotation()
270
PHPUnit_Util_Test::getDependencies(get_class($this), 'methodForTestParseAnnotation')
277
* @todo Remove fixture from test class
279
public function methodForTestParseAnnotation()
284
* @covers PHPUnit_Util_Test::getDependencies
286
public function testParseAnnotationThatIsOnlyOneLine()
290
PHPUnit_Util_Test::getDependencies(get_class($this), 'methodForTestParseAnnotationThatIsOnlyOneLine')
295
public function methodForTestParseAnnotationThatIsOnlyOneLine()
297
// TODO Remove fixture from test class
301
* @covers PHPUnit_Util_Test::getLinesToBeCovered
302
* @covers PHPUnit_Util_Test::getLinesToBeCoveredOrUsed
303
* @covers PHPUnit_Util_Test::resolveElementToReflectionObjects
304
* @dataProvider getLinesToBeCoveredProvider
306
public function testGetLinesToBeCovered($test, $lines)
308
if (strpos($test, 'Namespace') === 0) {
310
TEST_FILES_PATH . 'NamespaceCoveredClass.php' => $lines
312
} elseif ($test === 'CoverageNoneTest') {
314
} elseif ($test === 'CoverageNothingTest') {
316
} elseif ($test === 'CoverageFunctionTest') {
318
TEST_FILES_PATH . 'CoveredFunction.php' => $lines
321
$expected = array(TEST_FILES_PATH . 'CoveredClass.php' => $lines);
326
PHPUnit_Util_Test::getLinesToBeCovered(
327
$test, 'testSomething'
333
* @covers PHPUnit_Util_Test::getLinesToBeCovered
334
* @covers PHPUnit_Util_Test::getLinesToBeCoveredOrUsed
335
* @covers PHPUnit_Util_Test::resolveElementToReflectionObjects
336
* @expectedException PHPUnit_Framework_CodeCoverageException
338
public function testGetLinesToBeCovered2()
340
PHPUnit_Util_Test::getLinesToBeCovered(
341
'NotExistingCoveredElementTest', 'testOne'
346
* @covers PHPUnit_Util_Test::getLinesToBeCovered
347
* @covers PHPUnit_Util_Test::getLinesToBeCoveredOrUsed
348
* @covers PHPUnit_Util_Test::resolveElementToReflectionObjects
349
* @expectedException PHPUnit_Framework_CodeCoverageException
351
public function testGetLinesToBeCovered3()
353
PHPUnit_Util_Test::getLinesToBeCovered(
354
'NotExistingCoveredElementTest', 'testTwo'
359
* @covers PHPUnit_Util_Test::getLinesToBeCovered
360
* @covers PHPUnit_Util_Test::getLinesToBeCoveredOrUsed
361
* @covers PHPUnit_Util_Test::resolveElementToReflectionObjects
362
* @expectedException PHPUnit_Framework_CodeCoverageException
364
public function testGetLinesToBeCovered4()
366
PHPUnit_Util_Test::getLinesToBeCovered(
367
'NotExistingCoveredElementTest', 'testThree'
372
* @covers PHPUnit_Util_Test::getLinesToBeCovered
373
* @covers PHPUnit_Util_Test::getLinesToBeCoveredOrUsed
375
public function testGetLinesToBeCoveredSkipsNonExistantMethods()
379
PHPUnit_Util_Test::getLinesToBeCovered(
380
'NotExistingCoveredElementTest',
387
* @covers PHPUnit_Util_Test::getLinesToBeCovered
388
* @covers PHPUnit_Util_Test::getLinesToBeCoveredOrUsed
389
* @expectedException PHPUnit_Framework_CodeCoverageException
391
public function testTwoCoversDefaultClassAnnoationsAreNotAllowed()
393
PHPUnit_Util_Test::getLinesToBeCovered(
394
'CoverageTwoDefaultClassAnnotations',
400
* @covers PHPUnit_Util_Test::getLinesToBeCovered
401
* @covers PHPUnit_Util_Test::getLinesToBeCoveredOrUsed
403
public function testFunctionParenthesesAreAllowed()
406
array(TEST_FILES_PATH . 'CoveredFunction.php' => range(2, 4)),
407
PHPUnit_Util_Test::getLinesToBeCovered(
408
'CoverageFunctionParenthesesTest',
415
* @covers PHPUnit_Util_Test::getLinesToBeCovered
416
* @covers PHPUnit_Util_Test::getLinesToBeCoveredOrUsed
418
public function testFunctionParenthesesAreAllowedWithWhitespace()
421
array(TEST_FILES_PATH . 'CoveredFunction.php' => range(2, 4)),
422
PHPUnit_Util_Test::getLinesToBeCovered(
423
'CoverageFunctionParenthesesWhitespaceTest',
430
* @covers PHPUnit_Util_Test::getLinesToBeCovered
431
* @covers PHPUnit_Util_Test::getLinesToBeCoveredOrUsed
433
public function testMethodParenthesesAreAllowed()
436
array(TEST_FILES_PATH . 'CoveredClass.php' => range(31, 35)),
437
PHPUnit_Util_Test::getLinesToBeCovered(
438
'CoverageMethodParenthesesTest',
445
* @covers PHPUnit_Util_Test::getLinesToBeCovered
446
* @covers PHPUnit_Util_Test::getLinesToBeCoveredOrUsed
448
public function testMethodParenthesesAreAllowedWithWhitespace()
451
array(TEST_FILES_PATH . 'CoveredClass.php' => range(31, 35)),
452
PHPUnit_Util_Test::getLinesToBeCovered(
453
'CoverageMethodParenthesesWhitespaceTest',
459
public function getLinesToBeCoveredProvider()
467
'CoverageClassExtendedTest',
468
array_merge(range(19, 36), range(2, 17))
475
'CoverageMethodTest',
479
'CoverageMethodOneLineAnnotationTest',
483
'CoverageNotPrivateTest',
484
array_merge(range(25, 29), range(31, 35))
487
'CoverageNotProtectedTest',
488
array_merge(range(21, 23), range(31, 35))
491
'CoverageNotPublicTest',
492
array_merge(range(21, 23), range(25, 29))
495
'CoveragePrivateTest',
499
'CoverageProtectedTest',
503
'CoveragePublicTest',
507
'CoverageFunctionTest',
511
'NamespaceCoverageClassExtendedTest',
512
array_merge(range(21, 38), range(4, 19))
515
'NamespaceCoverageClassTest',
519
'NamespaceCoverageMethodTest',
523
'NamespaceCoverageNotPrivateTest',
524
array_merge(range(27, 31), range(33, 37))
527
'NamespaceCoverageNotProtectedTest',
528
array_merge(range(23, 25), range(33, 37))
531
'NamespaceCoverageNotPublicTest',
532
array_merge(range(23, 25), range(27, 31))
535
'NamespaceCoveragePrivateTest',
539
'NamespaceCoverageProtectedTest',
543
'NamespaceCoveragePublicTest',
547
'NamespaceCoverageCoversClassTest',
548
array_merge(range(23, 25), range(27, 31), range(33, 37), range(6, 8), range(10, 13), range(15, 18))
551
'NamespaceCoverageCoversClassPublicTest',
555
'CoverageNothingTest',