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 11require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'BeforeAndAfterTest.php'; 12require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'BeforeClassAndAfterClassTest.php'; 13require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'TestWithTest.php'; 14require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'BeforeClassWithOnlyDataProviderTest.php'; 15require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'DataProviderSkippedTest.php'; 16require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'DataProviderDependencyTest.php'; 17require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'DataProviderIncompleteTest.php'; 18require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'InheritedTestCase.php'; 19require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'NoTestCaseClass.php'; 20require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'NoTestCases.php'; 21require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'NotPublicTestCase.php'; 22require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'NotVoidTestCase.php'; 23require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'OverrideTestCase.php'; 24require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'RequirementsClassBeforeClassHookTest.php'; 25 26class Framework_SuiteTest extends PHPUnit_Framework_TestCase 27{ 28 protected $result; 29 30 protected function setUp() 31 { 32 $this->result = new PHPUnit_Framework_TestResult; 33 } 34 35 public static function suite() 36 { 37 $suite = new PHPUnit_Framework_TestSuite; 38 39 $suite->addTest(new self('testAddTestSuite')); 40 $suite->addTest(new self('testInheritedTests')); 41 $suite->addTest(new self('testNoTestCases')); 42 $suite->addTest(new self('testNoTestCaseClass')); 43 $suite->addTest(new self('testNotExistingTestCase')); 44 $suite->addTest(new self('testNotPublicTestCase')); 45 $suite->addTest(new self('testNotVoidTestCase')); 46 $suite->addTest(new self('testOneTestCase')); 47 $suite->addTest(new self('testShadowedTests')); 48 $suite->addTest(new self('testBeforeClassAndAfterClassAnnotations')); 49 $suite->addTest(new self('testBeforeClassWithDataProviders')); 50 $suite->addTest(new self('testBeforeAnnotation')); 51 $suite->addTest(new self('testTestWithAnnotation')); 52 $suite->addTest(new self('testSkippedTestDataProvider')); 53 $suite->addTest(new self('testTestDataProviderDependency')); 54 $suite->addTest(new self('testIncompleteTestDataProvider')); 55 $suite->addTest(new self('testRequirementsBeforeClassHook')); 56 $suite->addTest(new self('testDontSkipInheritedClass')); 57 58 return $suite; 59 } 60 61 public function testAddTestSuite() 62 { 63 $suite = new PHPUnit_Framework_TestSuite( 64 'OneTestCase' 65 ); 66 67 $suite->run($this->result); 68 69 $this->assertCount(1, $this->result); 70 } 71 72 public function testInheritedTests() 73 { 74 $suite = new PHPUnit_Framework_TestSuite( 75 'InheritedTestCase' 76 ); 77 78 $suite->run($this->result); 79 80 $this->assertTrue($this->result->wasSuccessful()); 81 $this->assertCount(2, $this->result); 82 } 83 84 public function testNoTestCases() 85 { 86 $suite = new PHPUnit_Framework_TestSuite( 87 'NoTestCases' 88 ); 89 90 $suite->run($this->result); 91 92 $this->assertTrue(!$this->result->wasSuccessful()); 93 $this->assertEquals(0, $this->result->failureCount()); 94 $this->assertEquals(1, $this->result->warningCount()); 95 $this->assertCount(1, $this->result); 96 } 97 98 /** 99 * @expectedException PHPUnit_Framework_Exception 100 */ 101 public function testNoTestCaseClass() 102 { 103 $suite = new PHPUnit_Framework_TestSuite('NoTestCaseClass'); 104 } 105 106 public function testNotExistingTestCase() 107 { 108 $suite = new self('notExistingMethod'); 109 110 $suite->run($this->result); 111 112 $this->assertEquals(0, $this->result->errorCount()); 113 $this->assertEquals(1, $this->result->failureCount()); 114 $this->assertCount(1, $this->result); 115 } 116 117 public function testNotPublicTestCase() 118 { 119 $suite = new PHPUnit_Framework_TestSuite( 120 'NotPublicTestCase' 121 ); 122 123 $this->assertCount(2, $suite); 124 } 125 126 public function testNotVoidTestCase() 127 { 128 $suite = new PHPUnit_Framework_TestSuite( 129 'NotVoidTestCase' 130 ); 131 132 $this->assertCount(1, $suite); 133 } 134 135 public function testOneTestCase() 136 { 137 $suite = new PHPUnit_Framework_TestSuite( 138 'OneTestCase' 139 ); 140 141 $suite->run($this->result); 142 143 $this->assertEquals(0, $this->result->errorCount()); 144 $this->assertEquals(0, $this->result->failureCount()); 145 $this->assertCount(1, $this->result); 146 $this->assertTrue($this->result->wasSuccessful()); 147 } 148 149 public function testShadowedTests() 150 { 151 $suite = new PHPUnit_Framework_TestSuite( 152 'OverrideTestCase' 153 ); 154 155 $suite->run($this->result); 156 157 $this->assertCount(1, $this->result); 158 } 159 160 public function testBeforeClassAndAfterClassAnnotations() 161 { 162 $suite = new PHPUnit_Framework_TestSuite( 163 'BeforeClassAndAfterClassTest' 164 ); 165 166 BeforeClassAndAfterClassTest::resetProperties(); 167 $suite->run($this->result); 168 169 $this->assertEquals(1, BeforeClassAndAfterClassTest::$beforeClassWasRun, '@beforeClass method was not run once for the whole suite.'); 170 $this->assertEquals(1, BeforeClassAndAfterClassTest::$afterClassWasRun, '@afterClass method was not run once for the whole suite.'); 171 } 172 173 public function testBeforeClassWithDataProviders() 174 { 175 $suite = new PHPUnit_Framework_TestSuite( 176 'BeforeClassWithOnlyDataProviderTest' 177 ); 178 179 BeforeClassWithOnlyDataProviderTest::resetProperties(); 180 $suite->run($this->result); 181 182 $this->assertTrue(BeforeClassWithOnlyDataProviderTest::$setUpBeforeClassWasCalled, 'setUpBeforeClass method was not run.'); 183 $this->assertTrue(BeforeClassWithOnlyDataProviderTest::$beforeClassWasCalled, '@beforeClass method was not run.'); 184 } 185 186 public function testBeforeAnnotation() 187 { 188 $test = new PHPUnit_Framework_TestSuite( 189 'BeforeAndAfterTest' 190 ); 191 192 BeforeAndAfterTest::resetProperties(); 193 $result = $test->run(); 194 195 $this->assertEquals(2, BeforeAndAfterTest::$beforeWasRun); 196 $this->assertEquals(2, BeforeAndAfterTest::$afterWasRun); 197 } 198 199 public function testTestWithAnnotation() 200 { 201 $test = new PHPUnit_Framework_TestSuite( 202 'TestWithTest' 203 ); 204 205 BeforeAndAfterTest::resetProperties(); 206 $result = $test->run(); 207 208 $this->assertCount(4, $result->passed()); 209 } 210 211 public function testSkippedTestDataProvider() 212 { 213 $suite = new PHPUnit_Framework_TestSuite('DataProviderSkippedTest'); 214 215 $suite->run($this->result); 216 217 $this->assertEquals(3, $this->result->count()); 218 $this->assertEquals(1, $this->result->skippedCount()); 219 } 220 221 public function testTestDataProviderDependency() 222 { 223 $suite = new PHPUnit_Framework_TestSuite('DataProviderDependencyTest'); 224 225 $suite->run($this->result); 226 227 $skipped = $this->result->skipped(); 228 $lastSkippedResult = array_pop($skipped); 229 $message = $lastSkippedResult->thrownException()->getMessage(); 230 231 $this->assertContains('Test for DataProviderDependencyTest::testDependency skipped by data provider', $message); 232 } 233 234 public function testIncompleteTestDataProvider() 235 { 236 $suite = new PHPUnit_Framework_TestSuite('DataProviderIncompleteTest'); 237 238 $suite->run($this->result); 239 240 $this->assertEquals(3, $this->result->count()); 241 $this->assertEquals(1, $this->result->notImplementedCount()); 242 } 243 244 public function testRequirementsBeforeClassHook() 245 { 246 $suite = new PHPUnit_Framework_TestSuite( 247 'RequirementsClassBeforeClassHookTest' 248 ); 249 250 $suite->run($this->result); 251 252 $this->assertEquals(0, $this->result->errorCount()); 253 $this->assertEquals(1, $this->result->skippedCount()); 254 } 255 256 public function testDontSkipInheritedClass() 257 { 258 $suite = new PHPUnit_Framework_TestSuite( 259 'DontSkipInheritedClass' 260 ); 261 262 $dir = dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'Inheritance' . DIRECTORY_SEPARATOR; 263 264 $suite->addTestFile($dir . 'InheritanceA.php'); 265 $suite->addTestFile($dir . 'InheritanceB.php'); 266 $result = $suite->run(); 267 $this->assertCount(2, $result); 268 } 269} 270