You are here

public function ExtensionDiscoveryTest::testExtensionDiscoveryCache in Drupal 10

Same name and namespace in other branches
  1. 9 core/tests/Drupal/Tests/Core/Extension/ExtensionDiscoveryTest.php \Drupal\Tests\Core\Extension\ExtensionDiscoveryTest::testExtensionDiscoveryCache()

Tests changing extension discovery file cache objects to arrays.

@covers ::scan @runInSeparateProcess

File

core/tests/Drupal/Tests/Core/Extension/ExtensionDiscoveryTest.php, line 73

Class

ExtensionDiscoveryTest
Tests discovery of extensions.

Namespace

Drupal\Tests\Core\Extension

Code

public function testExtensionDiscoveryCache() {

  // Set up an extension object in the cache to mimic site prior to changing
  // \Drupal\Core\Extension\ExtensionDiscovery::scanDirectory() to cache an
  // array instead of an object. Note we cannot use the VFS file system
  // because FileCache does not support stream wrappers.
  $extension = new Extension($this->root, 'module', 'core/modules/user/user.info.yml', 'user.module');
  $extension->subpath = 'modules/user';
  $extension->origin = 'core';

  // Undo \Drupal\Tests\UnitTestCase::setUp() so FileCache works.
  FileCacheFactory::setConfiguration([]);
  $file_cache = FileCacheFactory::get('extension_discovery');
  $file_cache
    ->set($this->root . '/core/modules/user/user.info.yml', $extension);

  // Create an ExtensionDiscovery object to test.
  $extension_discovery = new ExtensionDiscovery($this->root, TRUE, [], 'sites/default');
  $modules = $extension_discovery
    ->scan('module', FALSE);
  $this
    ->assertArrayHasKey('user', $modules);
  $this
    ->assertEquals((array) $extension, (array) $modules['user']);
  $this
    ->assertNotSame($extension, $modules['user']);

  // FileCache item should now be an array.
  $this
    ->assertSame([
    'type' => 'module',
    'pathname' => 'core/modules/user/user.info.yml',
    'filename' => 'user.module',
    'subpath' => 'modules/user',
  ], $file_cache
    ->get($this->root . '/core/modules/user/user.info.yml'));
}