You are here

public function GenerateThemeTest::test in Drupal 9

Tests the generate-theme command.

File

core/tests/Drupal/Tests/Core/Command/GenerateThemeTest.php, line 41

Class

GenerateThemeTest
Tests the generate-theme commands.

Namespace

Drupal\Tests\Core\Command

Code

public function test() {
  if (version_compare(\SQLite3::version()['versionString'], Tasks::SQLITE_MINIMUM_VERSION) < 0) {
    $this
      ->markTestSkipped();
  }
  $install_command = [
    $this->php,
    'core/scripts/drupal',
    'generate-theme',
    'test_custom_theme',
    '--name="Test custom starterkit theme"',
    '--description="Custom theme generated from a starterkit theme"',
  ];
  $process = new Process($install_command, NULL);
  $process
    ->setTimeout(60);
  $result = $process
    ->run();
  $this
    ->assertEquals('Theme generated successfully to themes/test_custom_theme', trim($process
    ->getOutput()));
  $this
    ->assertSame(0, $result);
  $theme_path_relative = 'themes/test_custom_theme';
  $theme_path_absolute = $this
    ->getWorkspaceDirectory() . "/{$theme_path_relative}";
  $this
    ->assertFileExists($theme_path_absolute . '/test_custom_theme.info.yml');

  // Ensure that the generated theme can be installed.
  $this
    ->installQuickStart('minimal');
  $this
    ->formLogin($this->adminUsername, $this->adminPassword);
  $this
    ->visit('/admin/appearance');
  $this
    ->getMink()
    ->assertSession()
    ->pageTextContains('Test custom starterkit');
  $this
    ->getMink()
    ->assertSession()
    ->pageTextContains('Custom theme generated from a starterkit theme');
  $this
    ->getMink()
    ->getSession()
    ->getPage()
    ->clickLink('Install "Test custom starterkit theme" theme');
  $this
    ->getMink()
    ->assertSession()
    ->pageTextContains('The "Test custom starterkit theme" theme has been installed.');
  $this
    ->assertFileExists($theme_path_absolute . '/test_custom_theme.theme');
  unlink($theme_path_absolute . '/test_custom_theme.theme');
  $process = new Process($install_command, NULL);
  $process
    ->setTimeout(60);
  $result = $process
    ->run();
  $this
    ->assertStringContainsString('Theme could not be generated because the destination directory', $process
    ->getErrorOutput());
  $this
    ->assertStringContainsString($theme_path_relative, $process
    ->getErrorOutput());
  $this
    ->assertSame(1, $result);
  $this
    ->assertFileDoesNotExist($theme_path_absolute . '/test_custom_theme.theme');
}