Unverified Commit afcdeee4 authored by Alex Pott's avatar Alex Pott
Browse files

Issue #3076797 by Wim Leers, lauriii, alexpott:...

Issue #3076797 by Wim Leers, lauriii, alexpott: \Drupal\Core\Extension\Extension's absence of validation has allowed multiple incorrect tests to be added
parent 42962f79
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -63,6 +63,8 @@ class Extension {
   *   (optional) The filename of the main extension file; e.g., 'node.module'.
   */
  public function __construct($root, $type, $pathname, $filename = NULL) {
    // @see \Drupal\Core\Theme\ThemeInitialization::getActiveThemeByName()
    assert($pathname === 'core/core.info.yml' || ($pathname[0] !== '/' && file_exists($root . '/' . $pathname)), sprintf('The file specified by the given app root, relative path and file name (%s) do not exist.', $root . '/' . $pathname));
    $this->root = $root;
    $this->type = $type;
    $this->pathname = $pathname;
@@ -155,7 +157,7 @@ public function load() {
   */
  public function __call($method, array $args) {
    if (!isset($this->splFileInfo)) {
      $this->splFileInfo = new \SplFileInfo($this->pathname);
      $this->splFileInfo = new \SplFileInfo($this->root . '/' . $this->pathname);
    }
    return call_user_func_array([$this->splFileInfo, $method], $args);
  }
+2 −1
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ class FunctionalExampleTest {}
    vfsStream::create([
      'modules' => [
        'test_module' => [
          'test_module.info.yml' => $test_module_info,
          'tests' => [
            'src' => [
              'Functional' => [
@@ -212,7 +213,7 @@ public function testGetTestsInProfiles() {

    $test_discovery = new TestDiscovery('vfs://drupal', $class_loader->reveal(), $module_handler->reveal());

    $result = $test_discovery->getTestClasses(NULL, ['PHPUnit-Kernel']);
    $result = $test_discovery->getTestClasses('test_profile_module', ['PHPUnit-Kernel']);
    $expected = [
      'example3' => [
        'Drupal\Tests\test_profile_module\Kernel\KernelExampleTest4' => [
+1 −1
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ protected function setUp() {

    $this->themeHandler = $this->createMock('Drupal\Core\Extension\ThemeHandlerInterface');

    $theme = new Extension($this->root, 'theme', '/core/themes/bartik', 'bartik.info.yml');
    $theme = new Extension($this->root, 'theme', 'core/themes/bartik', 'bartik.info.yml');
    $theme->status = 1;
    $theme->info = ['name' => 'bartik'];
    $this->themeHandler->expects($this->any())
+1 −1
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ protected function setUp() {
   *   The extension object.
   */
  protected function mockModuleExtension($module, $name) {
    $extension = new Extension($this->root, $module, "modules/$module");
    $extension = new Extension('vfs:/', $module, "modules/$module");
    $extension->info['name'] = $name;
    return $extension;
  }
+13 −13
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ class ExtensionListTest extends UnitTestCase {
   */
  public function testGetNameWithNonExistingExtension() {
    list($cache, $info_parser, $module_handler, $state) = $this->getMocks();
    $test_extension_list = new TestExtension($this->root, 'test_extension', $cache->reveal(), $info_parser->reveal(), $module_handler->reveal(), $state->reveal(), 'testing');
    $test_extension_list = new TestExtension($this->randomMachineName(), 'test_extension', $cache->reveal(), $info_parser->reveal(), $module_handler->reveal(), $state->reveal(), 'testing');

    $extension_discovery = $this->prophesize(ExtensionDiscovery::class);
    $extension_discovery->scan('test_extension')->willReturn([]);
@@ -50,7 +50,7 @@ public function testGetName() {
   */
  public function testGetWithNonExistingExtension() {
    list($cache, $info_parser, $module_handler, $state) = $this->getMocks();
    $test_extension_list = new TestExtension($this->root, 'test_extension', $cache->reveal(), $info_parser->reveal(), $module_handler->reveal(), $state->reveal(), 'testing');
    $test_extension_list = new TestExtension($this->randomMachineName(), 'test_extension', $cache->reveal(), $info_parser->reveal(), $module_handler->reveal(), $state->reveal(), 'testing');

    $extension_discovery = $this->prophesize(ExtensionDiscovery::class);
    $extension_discovery->scan('test_extension')->willReturn([]);
@@ -142,7 +142,7 @@ public function testGetPathnames() {

    $filenames = $test_extension_list->getPathnames();
    $this->assertEquals([
      'test_name' => 'vfs://drupal_root/example/test_name/test_name.info.yml',
      'test_name' => 'example/test_name/test_name.info.yml',
    ], $filenames);
  }

@@ -153,7 +153,7 @@ public function testGetPathname() {
    $test_extension_list = $this->setupTestExtensionList();

    $pathname = $test_extension_list->getPathname('test_name');
    $this->assertEquals('vfs://drupal_root/example/test_name/test_name.info.yml', $pathname);
    $this->assertEquals('example/test_name/test_name.info.yml', $pathname);
  }

  /**
@@ -174,7 +174,7 @@ public function testGetPath() {
    $test_extension_list = $this->setupTestExtensionList();

    $path = $test_extension_list->getPath('test_name');
    $this->assertEquals('vfs://drupal_root/example/test_name', $path);
    $this->assertEquals('example/test_name', $path);
  }

  /**
@@ -184,24 +184,24 @@ public function testReset() {
    $test_extension_list = $this->setupTestExtensionList();

    $path = $test_extension_list->getPath('test_name');
    $this->assertEquals('vfs://drupal_root/example/test_name', $path);
    $this->assertEquals('example/test_name', $path);
    $pathname = $test_extension_list->getPathname('test_name');
    $this->assertEquals('vfs://drupal_root/example/test_name/test_name.info.yml', $pathname);
    $this->assertEquals('example/test_name/test_name.info.yml', $pathname);
    $filenames = $test_extension_list->getPathnames();
    $this->assertEquals([
      'test_name' => 'vfs://drupal_root/example/test_name/test_name.info.yml',
      'test_name' => 'example/test_name/test_name.info.yml',
    ], $filenames);

    $test_extension_list->reset();

    // Ensure that everything is still usable after the resetting.
    $path = $test_extension_list->getPath('test_name');
    $this->assertEquals('vfs://drupal_root/example/test_name', $path);
    $this->assertEquals('example/test_name', $path);
    $pathname = $test_extension_list->getPathname('test_name');
    $this->assertEquals('vfs://drupal_root/example/test_name/test_name.info.yml', $pathname);
    $this->assertEquals('example/test_name/test_name.info.yml', $pathname);
    $filenames = $test_extension_list->getPathnames();
    $this->assertEquals([
      'test_name' => 'vfs://drupal_root/example/test_name/test_name.info.yml',
      'test_name' => 'example/test_name/test_name.info.yml',
    ], $filenames);
  }

@@ -226,7 +226,7 @@ protected function setupTestExtensionList($extension_names = ['test_name']) {

    list($cache, $info_parser, $module_handler, $state) = $this->getMocks();
    $info_parser->parse(Argument::any())->will(function ($args) {
      return Yaml::decode(file_get_contents($args[0]));
      return Yaml::decode(file_get_contents('vfs://drupal_root/' . $args[0]));
    });

    $test_extension_list = new TestExtension('vfs://drupal_root', 'test_extension', $cache->reveal(), $info_parser->reveal(), $module_handler->reveal(), $state->reveal(), 'testing');
@@ -234,7 +234,7 @@ protected function setupTestExtensionList($extension_names = ['test_name']) {
    $extension_discovery = $this->prophesize(ExtensionDiscovery::class);
    $extension_scan_result = [];
    foreach ($extension_names as $extension_name) {
      $extension_scan_result[$extension_name] = new Extension($this->root, 'test_extension', "vfs://drupal_root/example/$extension_name/$extension_name.info.yml");
      $extension_scan_result[$extension_name] = new Extension('vfs://drupal_root', 'test_extension', "example/$extension_name/$extension_name.info.yml");
    }
    $extension_discovery->scan('test_extension')->willReturn($extension_scan_result);
    $test_extension_list->setExtensionDiscovery($extension_discovery->reveal());
Loading