ui_icons-1.0.x-dev/modules/ui_icons_text/tests/src/Kernel/IconEmbedFilterTest.php

modules/ui_icons_text/tests/src/Kernel/IconEmbedFilterTest.php
<?php

declare(strict_types=1);

namespace Drupal\Tests\ui_icons_text\Kernel;

use Drupal\Core\Theme\Icon\IconDefinition;
use Drupal\KernelTests\KernelTestBase;
use Drupal\ui_icons_text\Plugin\Filter\IconEmbed;

/**
 * @coversDefaultClass \Drupal\ui_icons_text\Plugin\Filter\IconEmbed
 *
 * @group ui_icons
 */
class IconEmbedFilterTest extends KernelTestBase {

  /**
   * Icon pack from ui_icons_test module.
   */
  private const TEST_ICON_PACK_ID = 'test_path';

  /**
   * Icon from ui_icons_test module.
   */
  private const TEST_ICON_ID = 'foo';

  /**
   * Icon filename from ui_icons_test module.
   */
  private const TEST_ICON_FILENAME = 'foo.png';

  /**
   * Icon class from ui_icons_test module.
   */
  private const TEST_ICON_CLASS = 'foo';

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'system',
    'filter',
    'ui_icons',
    'ui_icons_text',
    'ui_icons_test',
  ];

  /**
   * The icon embed filter plugin.
   *
   * @var \Drupal\ui_icons_text\Plugin\Filter\IconEmbed
   */
  protected $filter;

  /**
   * The icon pack manager service.
   *
   * @var \Drupal\Core\Theme\Icon\Plugin\IconPackManagerInterface
   */
  protected $pluginManagerIconPack;

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();

    $this->installConfig(['system', 'filter', 'ui_icons']);

    $this->pluginManagerIconPack = $this->container->get('plugin.manager.icon_pack');

    /** @var \Drupal\filter\FilterPluginManager $filterManager */
    $filterManager = $this->container->get('plugin.manager.filter');
    $configuration = [];
    $plugin_id = 'icon_embed';
    $plugin_definition = $filterManager->getDefinition($plugin_id);

    $this->filter = new IconEmbed(
      $configuration,
      $plugin_id,
      $plugin_definition,
      $this->pluginManagerIconPack,
      $this->container->get('renderer'),
      $this->container->get('logger.factory')
    );
  }

  /**
   * Data provider for ::testProcess().
   *
   * @return \Generator
   *   The test cases.
   */
  public static function providerTestProcess(): iterable {
    $icon_full_id = IconDefinition::createIconId(self::TEST_ICON_PACK_ID, self::TEST_ICON_ID);

    yield 'no icon tag' => [
      '<p>This is a test paragraph without icons.</p>',
      FALSE,
    ];

    yield 'icon tag without id' => [
      '<p>Test empty icon: <drupal-icon data-foo="bar"></drupal-icon></p>',
      FALSE,
    ];

    yield 'icon tag with empty id' => [
      '<p>Test empty icon: <drupal-icon data-icon-id=""></drupal-icon></p>',
      FALSE,
    ];

    yield 'icon valid' => [
      '<p>Test icon: <drupal-icon data-icon-id="' . $icon_full_id . '" /></p>',
      TRUE,
      [
        '<span class="drupal-icon">',
        self::TEST_ICON_CLASS,
        self::TEST_ICON_FILENAME,
      ],
    ];

    yield 'icon invalid id' => [
      '<p>Test icon: <drupal-icon data-icon-id="invalid:icon" /></p>',
      TRUE,
      [
        '<span class="drupal-icon"></span>',
      ],
    ];

    yield 'icon with settings' => [
      '<p>Test icon and settings: <drupal-icon data-icon-id="' . $icon_full_id . '" data-icon-settings=\'{"width":100}\' /></p>',
      TRUE,
      [
        '<span class="drupal-icon">',
        self::TEST_ICON_CLASS,
        self::TEST_ICON_FILENAME,
        'width="100"',

      ],
    ];

    yield 'icon with additional attributes' => [
      '<p>Test icon and attributes: <drupal-icon data-icon-id="' . $icon_full_id . '" class="custom-class" aria-label="Custom Label" /></p>',
      TRUE,
      [
        '<span class="custom-class drupal-icon"',
        'aria-label="Custom Label"',
      ],
    ];

    yield 'icon with attribute role remove label' => [
      '<p>Test attributes: <drupal-icon data-icon-id="' . $icon_full_id . '" aria-label="foo" aria-hidden="true" role="presentation" /></p>',
      TRUE,
      [
        '<span aria-hidden role="presentation" class="drupal-icon">',
      ],
    ];
  }

  /**
   * Test the IconEmbed::process() method.
   *
   * @param string $html
   *   The html text to test.
   * @param bool $is_transformed
   *   The html text is transformed.
   * @param array $expected_contains
   *   The html text string processed must contain.
   *
   * @dataProvider providerTestProcess
   */
  public function testProcess(string $html, bool $is_transformed, array $expected_contains = []): void {
    $result = $this->filter->process($html, 'en');
    if (!$is_transformed) {
      $this->assertEquals($html, $result->getProcessedText());
      return;
    }
    foreach ($expected_contains as $contain) {
      $this->assertStringContainsString($contain, $result->getProcessedText());
    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc