You are here

public function ComponentsLoaderTest::setUp in Components! 8.2

Throws

\Twig\Error\LoaderError

Overrides UnitTestCase::setUp

File

tests/src/Unit/ComponentsLoaderTest.php, line 40

Class

ComponentsLoaderTest
@coversDefaultClass \Drupal\components\Template\Loader\ComponentsLoader @group components

Namespace

Drupal\Tests\components\Unit

Code

public function setUp() {
  parent::setUp();

  // Set up components info service.
  $this->componentsInfo = $this
    ->createMock('\\Drupal\\components\\Template\\ComponentsInfo');
  $this->componentsInfo
    ->expects($this
    ->atLeastOnce())
    ->method('getAllThemeInfo')
    ->willReturn([
    'earth' => [
      'namespaces' => [
        'earth' => [
          '/earth/templates',
        ],
      ],
    ],
    'jupiter' => [
      'namespaces' => [
        'jupiter' => [
          '/jupiter/templates',
        ],
        'components' => [
          '/jupiter/components',
        ],
        'jupiter_extras' => [
          '/jupiter/extras',
        ],
      ],
    ],
    'luna' => [
      'namespaces' => [
        'luna' => [
          '/luna/templates',
        ],
        'components' => [
          '/luna/components',
        ],
        'luna_extras' => [
          '/luna/extras',
        ],
        'system' => [
          '/luna/system',
        ],
      ],
    ],
    'sol' => [
      'namespaces' => [
        'sol' => [
          '/sol/templates',
        ],
        'components' => [
          '/sol/components',
        ],
        'sol_extras' => [
          '/sol/extras',
        ],
      ],
    ],
  ]);
  $this->componentsInfo
    ->expects($this
    ->atLeastOnce())
    ->method('getAllModuleInfo')
    ->willReturn([
    'components' => [
      'namespaces' => [
        'components' => [
          '/components/components',
        ],
        'components_extras' => [
          '/components/extras',
        ],
        'system' => [
          '/components/system',
        ],
      ],
    ],
  ]);
  $this->componentsInfo
    ->expects($this
    ->atLeastOnce())
    ->method('isProtectedNamespace')
    ->will($this
    ->returnValueMap([
    [
      'system',
      TRUE,
    ],
    [
      'components',
      FALSE,
    ],
    [
      'components_extras',
      FALSE,
    ],
    [
      'earth',
      FALSE,
    ],
    [
      'jupiter',
      FALSE,
    ],
    [
      'jupiter_extras',
      FALSE,
    ],
    [
      'luna',
      FALSE,
    ],
    [
      'luna_extras',
      FALSE,
    ],
    [
      'sol',
      FALSE,
    ],
    [
      'sol_extras',
      FALSE,
    ],
  ]));
  $this->componentsInfo
    ->expects($this
    ->atLeastOnce())
    ->method('getProtectedNamespaceExtensionInfo')
    ->will($this
    ->returnValueMap([
    [
      'system',
      [
        'name' => 'System',
        'type' => 'module',
        'package' => 'Core',
      ],
    ],
  ]));

  // Set up theme manager data.
  $themes = [
    'sol' => $this
      ->createMock('\\Drupal\\Core\\Extension\\Extension'),
    'earth' => $this
      ->createMock('\\Drupal\\Core\\Extension\\Extension'),
    'luna' => $this
      ->createMock('\\Drupal\\Core\\Extension\\Extension'),
    'jupiter' => $this
      ->createMock('\\Drupal\\Core\\Extension\\Extension'),
  ];
  foreach (array_keys($themes) as $key) {
    $themes[$key]
      ->method('getName')
      ->willReturn($key);
  }
  $active_themes = [
    'luna' => $this
      ->createMock('\\Drupal\\Core\\Theme\\ActiveTheme'),
    'jupiter' => $this
      ->createMock('\\Drupal\\Core\\Theme\\ActiveTheme'),
  ];
  foreach (array_keys($active_themes) as $key) {
    $active_themes[$key]
      ->method('getName')
      ->willReturn($key);
  }
  $active_themes['luna']
    ->expects($this
    ->atLeastOnce())
    ->method('getBaseThemeExtensions')
    ->willReturn([
    $themes['earth'],
    $themes['sol'],
  ]);
  $active_themes['jupiter']
    ->method('getBaseThemeExtensions')
    ->willReturn([
    $themes['sol'],
  ]);
  $this->themeManager = $this
    ->createMock('\\Drupal\\Core\\Theme\\ThemeManagerInterface');
  $this->themeManager
    ->expects($this
    ->atLeastOnce())
    ->method('getActiveTheme')
    ->willReturn($active_themes['luna'], $active_themes['jupiter'], $active_themes['luna']);
  $this->systemUnderTest = new ComponentsLoader($this->componentsInfo, $this->themeManager);
  $this->systemUnderTest
    ->checkActiveTheme();
}