Chris@0: [ Chris@0: 'modules' => [], Chris@0: 'profiles' => [], Chris@0: 'tests' => [ Chris@0: 'Drupal' => [ Chris@0: 'NotUnitTests' => [ Chris@0: 'CoreNotUnitTest.php' => ' [ Chris@0: 'CoreUnitTest.php' => 'getFilesystem(); Chris@0: return [ Chris@0: 'unit-tests' => [ Chris@0: $filesystem, Chris@0: 'Unit', Chris@0: [ Chris@0: 'Drupal\Tests\CoreUnitTest' => 'vfs://root/core/tests/Drupal/Tests/CoreUnitTest.php', Chris@0: ], Chris@0: ], Chris@0: 'not-unit-tests' => [ Chris@0: $filesystem, Chris@0: 'NotUnit', Chris@0: [ Chris@0: 'Drupal\NotUnitTests\CoreNotUnitTest' => 'vfs://root/core/tests/Drupal/NotUnitTests/CoreNotUnitTest.php', Chris@0: ], Chris@0: ], Chris@0: ]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests for special case behavior of unit test suite namespaces in core. Chris@0: * Chris@0: * @covers ::addTestsBySuiteNamespace Chris@0: * Chris@0: * @dataProvider provideCoreTests Chris@0: */ Chris@0: public function testAddTestsBySuiteNamespaceCore($filesystem, $suite_namespace, $expected_tests) { Chris@0: // Set up the file system. Chris@0: $vfs = vfsStream::setup('root'); Chris@0: vfsStream::create($filesystem, $vfs); Chris@0: Chris@0: // Make a stub suite base to test. Chris@0: $stub = new StubTestSuiteBase('test_me'); Chris@0: Chris@0: // Access addTestsBySuiteNamespace(). Chris@0: $ref_add_tests = new \ReflectionMethod($stub, 'addTestsBySuiteNamespace'); Chris@0: $ref_add_tests->setAccessible(TRUE); Chris@0: Chris@0: // Invoke addTestsBySuiteNamespace(). Chris@0: $ref_add_tests->invokeArgs($stub, [vfsStream::url('root'), $suite_namespace]); Chris@0: Chris@0: // Determine if we loaded the expected test files. Chris@0: $this->assertNotEmpty($stub->testFiles); Chris@0: $this->assertEmpty(array_diff_assoc($expected_tests, $stub->testFiles)); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests the assumption that local time is in 'Australia/Sydney'. Chris@0: */ Chris@0: public function testLocalTimeZone() { Chris@0: // The 'Australia/Sydney' time zone is set in core/tests/bootstrap.php Chris@0: $this->assertEquals('Australia/Sydney', date_default_timezone_get()); Chris@0: } Chris@0: Chris@0: } Chris@0: Chris@0: /** Chris@0: * Stub subclass of TestSuiteBase. Chris@0: * Chris@0: * We use this class to alter the behavior of TestSuiteBase so it can be Chris@0: * testable. Chris@0: */ Chris@0: class StubTestSuiteBase extends TestSuiteBase { Chris@0: Chris@0: /** Chris@0: * Test files discovered by addTestsBySuiteNamespace(). Chris@0: * Chris@0: * @var string[] Chris@0: */ Chris@0: public $testFiles = []; Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function findExtensionDirectories($root) { Chris@0: // We have to stub findExtensionDirectories() because we can't inject a Chris@0: // vfsStream filesystem into drupal_phpunit_find_extension_directories(), Chris@0: // which uses \SplFileInfo->getRealPath(). getRealPath() resolves Chris@0: // stream-based paths to an empty string. See Chris@0: // https://github.com/mikey179/vfsStream/wiki/Known-Issues Chris@0: return []; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function addTestFiles($filenames) { Chris@0: // We stub addTestFiles() because the parent implementation can't deal with Chris@0: // vfsStream-based filesystems due to an error in Chris@0: // stream_resolve_include_path(). See Chris@0: // https://github.com/mikey179/vfsStream/issues/5 Here we just store the Chris@0: // test file being added in $this->testFiles. Chris@0: $this->testFiles = array_merge($this->testFiles, $filenames); Chris@0: } Chris@0: Chris@0: }