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 require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'NoArgTestCaseTest.php';
12 require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'Singleton.php';
25 * @since Class available since Release 2.0.0
26 * @covers PHPUnit_Framework_TestCase
28 class Framework_TestCaseTest extends PHPUnit_Framework_TestCase
30 protected $backupGlobalsBlacklist = array('i', 'singleton');
33 * Used be testStaticAttributesBackupPre
35 protected static $_testStatic = 0;
37 public function testCaseToString()
40 'Framework_TestCaseTest::testCaseToString',
45 public function testSuccess()
48 $result = $test->run();
50 $this->assertEquals(PHPUnit_Runner_BaseTestRunner::STATUS_PASSED, $test->getStatus());
51 $this->assertEquals(0, $result->errorCount());
52 $this->assertEquals(0, $result->failureCount());
53 $this->assertEquals(0, $result->skippedCount());
54 $this->assertEquals(1, count($result));
57 public function testFailure()
60 $result = $test->run();
62 $this->assertEquals(PHPUnit_Runner_BaseTestRunner::STATUS_FAILURE, $test->getStatus());
63 $this->assertEquals(0, $result->errorCount());
64 $this->assertEquals(1, $result->failureCount());
65 $this->assertEquals(0, $result->skippedCount());
66 $this->assertEquals(1, count($result));
69 public function testError()
71 $test = new TestError;
72 $result = $test->run();
74 $this->assertEquals(PHPUnit_Runner_BaseTestRunner::STATUS_ERROR, $test->getStatus());
75 $this->assertEquals(1, $result->errorCount());
76 $this->assertEquals(0, $result->failureCount());
77 $this->assertEquals(0, $result->skippedCount());
78 $this->assertEquals(1, count($result));
81 public function testSkipped()
83 $test = new TestSkipped();
84 $result = $test->run();
86 $this->assertEquals(PHPUnit_Runner_BaseTestRunner::STATUS_SKIPPED, $test->getStatus());
87 $this->assertEquals('Skipped test', $test->getStatusMessage());
88 $this->assertEquals(0, $result->errorCount());
89 $this->assertEquals(0, $result->failureCount());
90 $this->assertEquals(1, $result->skippedCount());
91 $this->assertEquals(1, count($result));
94 public function testIncomplete()
96 $test = new TestIncomplete();
97 $result = $test->run();
99 $this->assertEquals(PHPUnit_Runner_BaseTestRunner::STATUS_INCOMPLETE, $test->getStatus());
100 $this->assertEquals('Incomplete test', $test->getStatusMessage());
101 $this->assertEquals(0, $result->errorCount());
102 $this->assertEquals(0, $result->failureCount());
103 $this->assertEquals(0, $result->skippedCount());
104 $this->assertEquals(1, count($result));
107 public function testExceptionInSetUp()
109 $test = new ExceptionInSetUpTest('testSomething');
110 $result = $test->run();
112 $this->assertTrue($test->setUp);
113 $this->assertFalse($test->assertPreConditions);
114 $this->assertFalse($test->testSomething);
115 $this->assertFalse($test->assertPostConditions);
116 $this->assertTrue($test->tearDown);
119 public function testExceptionInAssertPreConditions()
121 $test = new ExceptionInAssertPreConditionsTest('testSomething');
122 $result = $test->run();
124 $this->assertTrue($test->setUp);
125 $this->assertTrue($test->assertPreConditions);
126 $this->assertFalse($test->testSomething);
127 $this->assertFalse($test->assertPostConditions);
128 $this->assertTrue($test->tearDown);
131 public function testExceptionInTest()
133 $test = new ExceptionInTest('testSomething');
134 $result = $test->run();
136 $this->assertTrue($test->setUp);
137 $this->assertTrue($test->assertPreConditions);
138 $this->assertTrue($test->testSomething);
139 $this->assertFalse($test->assertPostConditions);
140 $this->assertTrue($test->tearDown);
143 public function testExceptionInAssertPostConditions()
145 $test = new ExceptionInAssertPostConditionsTest('testSomething');
146 $result = $test->run();
148 $this->assertTrue($test->setUp);
149 $this->assertTrue($test->assertPreConditions);
150 $this->assertTrue($test->testSomething);
151 $this->assertTrue($test->assertPostConditions);
152 $this->assertTrue($test->tearDown);
155 public function testExceptionInTearDown()
157 $test = new ExceptionInTearDownTest('testSomething');
158 $result = $test->run();
160 $this->assertTrue($test->setUp);
161 $this->assertTrue($test->assertPreConditions);
162 $this->assertTrue($test->testSomething);
163 $this->assertTrue($test->assertPostConditions);
164 $this->assertTrue($test->tearDown);
167 public function testNoArgTestCasePasses()
169 $result = new PHPUnit_Framework_TestResult;
170 $t = new PHPUnit_Framework_TestSuite('NoArgTestCaseTest');
174 $this->assertEquals(1, count($result));
175 $this->assertEquals(0, $result->failureCount());
176 $this->assertEquals(0, $result->errorCount());
179 public function testWasRun()
184 $this->assertTrue($test->wasRun);
187 public function testException()
189 $test = new ThrowExceptionTestCase('test');
190 $test->setExpectedException('RuntimeException');
192 $result = $test->run();
194 $this->assertEquals(1, count($result));
195 $this->assertTrue($result->wasSuccessful());
198 public function testExceptionWithMessage()
200 $test = new ThrowExceptionTestCase('test');
201 $test->setExpectedException('RuntimeException', 'A runtime error occurred');
203 $result = $test->run();
205 $this->assertEquals(1, count($result));
206 $this->assertTrue($result->wasSuccessful());
209 public function testExceptionWithWrongMessage()
211 $test = new ThrowExceptionTestCase('test');
212 $test->setExpectedException('RuntimeException', 'A logic error occurred');
214 $result = $test->run();
216 $this->assertEquals(1, $result->failureCount());
217 $this->assertEquals(1, count($result));
219 "Failed asserting that exception message 'A runtime error occurred' contains 'A logic error occurred'.",
220 $test->getStatusMessage()
224 public function testExceptionWithRegexpMessage()
226 $test = new ThrowExceptionTestCase('test');
227 $test->setExpectedExceptionRegExp('RuntimeException', '/runtime .*? occurred/');
229 $result = $test->run();
231 $this->assertEquals(1, count($result));
232 $this->assertTrue($result->wasSuccessful());
235 public function testExceptionWithWrongRegexpMessage()
237 $test = new ThrowExceptionTestCase('test');
238 $test->setExpectedExceptionRegExp('RuntimeException', '/logic .*? occurred/');
240 $result = $test->run();
242 $this->assertEquals(1, $result->failureCount());
243 $this->assertEquals(1, count($result));
245 "Failed asserting that exception message 'A runtime error occurred' matches '/logic .*? occurred/'.",
246 $test->getStatusMessage()
251 * @covers PHPUnit_Framework_Constraint_ExceptionMessageRegExp
253 public function testExceptionWithInvalidRegexpMessage()
255 $test = new ThrowExceptionTestCase('test');
256 $test->setExpectedExceptionRegExp('RuntimeException', '#runtime .*? occurred/'); // wrong delimiter
258 $result = $test->run();
261 "Invalid expected exception message regex given: '#runtime .*? occurred/'",
262 $test->getStatusMessage()
266 public function testNoException()
268 $test = new ThrowNoExceptionTestCase('test');
269 $test->setExpectedException('RuntimeException');
271 $result = $test->run();
273 $this->assertEquals(1, $result->failureCount());
274 $this->assertEquals(1, count($result));
277 public function testWrongException()
279 $test = new ThrowExceptionTestCase('test');
280 $test->setExpectedException('InvalidArgumentException');
282 $result = $test->run();
284 $this->assertEquals(1, $result->failureCount());
285 $this->assertEquals(1, count($result));
289 * @backupGlobals enabled
291 public function testGlobalsBackupPre()
296 $this->assertEquals('a', $a);
297 $this->assertEquals('a', $GLOBALS['a']);
298 $this->assertEquals('b', $_ENV['b']);
299 $this->assertEquals('c', $_POST['c']);
300 $this->assertEquals('d', $_GET['d']);
301 $this->assertEquals('e', $_COOKIE['e']);
302 $this->assertEquals('f', $_SERVER['f']);
303 $this->assertEquals('g', $_FILES['g']);
304 $this->assertEquals('h', $_REQUEST['h']);
305 $this->assertEquals('i', $i);
306 $this->assertEquals('i', $GLOBALS['i']);
308 $GLOBALS['a'] = 'aa';
309 $GLOBALS['foo'] = 'bar';
313 $_COOKIE['e'] = 'ee';
314 $_SERVER['f'] = 'ff';
316 $_REQUEST['h'] = 'hh';
317 $GLOBALS['i'] = 'ii';
319 $this->assertEquals('aa', $a);
320 $this->assertEquals('aa', $GLOBALS['a']);
321 $this->assertEquals('bar', $GLOBALS['foo']);
322 $this->assertEquals('bb', $_ENV['b']);
323 $this->assertEquals('cc', $_POST['c']);
324 $this->assertEquals('dd', $_GET['d']);
325 $this->assertEquals('ee', $_COOKIE['e']);
326 $this->assertEquals('ff', $_SERVER['f']);
327 $this->assertEquals('gg', $_FILES['g']);
328 $this->assertEquals('hh', $_REQUEST['h']);
329 $this->assertEquals('ii', $i);
330 $this->assertEquals('ii', $GLOBALS['i']);
333 public function testGlobalsBackupPost()
338 $this->assertEquals('a', $a);
339 $this->assertEquals('a', $GLOBALS['a']);
340 $this->assertEquals('b', $_ENV['b']);
341 $this->assertEquals('c', $_POST['c']);
342 $this->assertEquals('d', $_GET['d']);
343 $this->assertEquals('e', $_COOKIE['e']);
344 $this->assertEquals('f', $_SERVER['f']);
345 $this->assertEquals('g', $_FILES['g']);
346 $this->assertEquals('h', $_REQUEST['h']);
347 $this->assertEquals('ii', $i);
348 $this->assertEquals('ii', $GLOBALS['i']);
350 $this->assertArrayNotHasKey('foo', $GLOBALS);
354 * @backupGlobals enabled
355 * @backupStaticAttributes enabled
357 public function testStaticAttributesBackupPre()
359 $GLOBALS['singleton'] = Singleton::getInstance();
360 self::$_testStatic = 123;
364 * @depends testStaticAttributesBackupPre
366 public function testStaticAttributesBackupPost()
368 $this->assertNotSame($GLOBALS['singleton'], Singleton::getInstance());
369 $this->assertSame(0, self::$_testStatic);
372 public function testIsInIsolationReturnsFalse()
374 $test = new IsolationTest('testIsInIsolationReturnsFalse');
375 $result = $test->run();
377 $this->assertEquals(1, count($result));
378 $this->assertTrue($result->wasSuccessful());
381 public function testIsInIsolationReturnsTrue()
383 $test = new IsolationTest('testIsInIsolationReturnsTrue');
384 $test->setRunTestInSeparateProcess(true);
385 $result = $test->run();
387 $this->assertEquals(1, count($result));
388 $this->assertTrue($result->wasSuccessful());
391 public function testExpectOutputStringFooActualFoo()
393 $test = new OutputTestCase('testExpectOutputStringFooActualFoo');
394 $result = $test->run();
396 $this->assertEquals(1, count($result));
397 $this->assertTrue($result->wasSuccessful());
400 public function testExpectOutputStringFooActualBar()
402 $test = new OutputTestCase('testExpectOutputStringFooActualBar');
403 $result = $test->run();
405 $this->assertEquals(1, count($result));
406 $this->assertFalse($result->wasSuccessful());
409 public function testExpectOutputRegexFooActualFoo()
411 $test = new OutputTestCase('testExpectOutputRegexFooActualFoo');
412 $result = $test->run();
414 $this->assertEquals(1, count($result));
415 $this->assertTrue($result->wasSuccessful());
418 public function testExpectOutputRegexFooActualBar()
420 $test = new OutputTestCase('testExpectOutputRegexFooActualBar');
421 $result = $test->run();
423 $this->assertEquals(1, count($result));
424 $this->assertFalse($result->wasSuccessful());
427 public function testSkipsIfRequiresHigherVersionOfPHPUnit()
429 $test = new RequirementsTest('testAlwaysSkip');
430 $result = $test->run();
432 $this->assertEquals(1, $result->skippedCount());
434 'PHPUnit 1111111 (or later) is required.',
435 $test->getStatusMessage()
439 public function testSkipsIfRequiresHigherVersionOfPHP()
441 $test = new RequirementsTest('testAlwaysSkip2');
442 $result = $test->run();
444 $this->assertEquals(1, $result->skippedCount());
446 'PHP 9999999 (or later) is required.',
447 $test->getStatusMessage()
451 public function testSkipsIfRequiresNonExistingOs()
453 $test = new RequirementsTest('testAlwaysSkip3');
454 $result = $test->run();
456 $this->assertEquals(1, $result->skippedCount());
458 'Operating system matching /DOESNOTEXIST/i is required.',
459 $test->getStatusMessage()
463 public function testSkipsIfRequiresNonExistingFunction()
465 $test = new RequirementsTest('testNine');
466 $result = $test->run();
468 $this->assertEquals(1, $result->skippedCount());
470 'Function testFunc is required.',
471 $test->getStatusMessage()
475 public function testSkipsIfRequiresNonExistingExtension()
477 $test = new RequirementsTest('testTen');
478 $result = $test->run();
481 'Extension testExt is required.',
482 $test->getStatusMessage()
486 public function testSkipsProvidesMessagesForAllSkippingReasons()
488 $test = new RequirementsTest('testAllPossibleRequirements');
489 $result = $test->run();
492 'PHP 99-dev (or later) is required.' . PHP_EOL .
493 'PHPUnit 9-dev (or later) is required.' . PHP_EOL .
494 'Operating system matching /DOESNOTEXIST/i is required.' . PHP_EOL .
495 'Function testFuncOne is required.' . PHP_EOL .
496 'Function testFuncTwo is required.' . PHP_EOL .
497 'Extension testExtOne is required.' . PHP_EOL .
498 'Extension testExtTwo is required.',
499 $test->getStatusMessage()
503 public function testRequiringAnExistingMethodDoesNotSkip()
505 $test = new RequirementsTest('testExistingMethod');
506 $result = $test->run();
507 $this->assertEquals(0, $result->skippedCount());
510 public function testRequiringAnExistingFunctionDoesNotSkip()
512 $test = new RequirementsTest('testExistingFunction');
513 $result = $test->run();
514 $this->assertEquals(0, $result->skippedCount());
517 public function testRequiringAnExistingExtensionDoesNotSkip()
519 $test = new RequirementsTest('testExistingExtension');
520 $result = $test->run();
521 $this->assertEquals(0, $result->skippedCount());
524 public function testRequiringAnExistingOsDoesNotSkip()
526 $test = new RequirementsTest('testExistingOs');
527 $result = $test->run();
528 $this->assertEquals(0, $result->skippedCount());
531 public function testCurrentWorkingDirectoryIsRestored()
533 $expectedCwd = getcwd();
535 $test = new ChangeCurrentWorkingDirectoryTest('testSomethingThatChangesTheCwd');
538 $this->assertSame($expectedCwd, getcwd());
543 * @expectedException TypeError
545 public function testTypeErrorCanBeExpected()
547 $o = new ClassWithScalarTypeDeclarations;