class TypographyTest
Tests typography value plugin.
Attributes
#[CoversClass(Typography::class)]
#[Group('design_token')]
Hierarchy
- class \Drupal\Tests\UnitTestCase uses \Drupal\Tests\DrupalTestCaseTrait, \Drupal\Tests\PhpUnitCompatibilityTrait, \Prophecy\PhpUnit\ProphecyTrait, \Drupal\TestTools\Extension\DeprecationBridge\ExpectDeprecationTrait, \Drupal\Tests\RandomGeneratorTrait extends \PHPUnit\Framework\TestCase
- class \Drupal\Tests\Core\Theme\DesignToken\DesignTokenValuePluginTestBase extends \Drupal\Tests\UnitTestCase
- class \Drupal\Tests\Core\Theme\DesignToken\Plugin\TypographyTest extends \Drupal\Tests\Core\Theme\DesignToken\DesignTokenValuePluginTestBase
- class \Drupal\Tests\Core\Theme\DesignToken\DesignTokenValuePluginTestBase extends \Drupal\Tests\UnitTestCase
Expanded class hierarchy of TypographyTest
File
-
core/
tests/ Drupal/ Tests/ Core/ Theme/ DesignToken/ Plugin/ TypographyTest.php, line 25
Namespace
Drupal\Tests\Core\Theme\DesignToken\PluginView source
class TypographyTest extends DesignTokenValuePluginTestBase {
/**
* {@inheritdoc}
*/
protected string $pluginId = 'typography';
/**
* The typography's properties.
*
* @var array|string[]
*/
protected array $properties = [
'fontFamily' => 'fontFamily',
'fontSize' => 'dimension',
'fontWeight' => 'fontWeight',
'letterSpacing' => 'dimension',
'lineHeight' => 'number',
];
/**
* {@inheritdoc}
*/
public function testToDtcg(mixed $value, mixed $expected) : void {
$this->assertIsArray($value);
$this->assertIsArray($expected);
$this->setupContainer($value);
$plugin = new Typography($value, $this->pluginId, [], \Drupal::service(DesignTokenValuePluginManagerInterface::class));
$this->assertSame($expected, $plugin->toDtcg());
}
/**
* Data provider for ::testToDtcg().
*
* @return \Generator
* The test cases.
*/
public static function providerToDtcg() : iterable {
yield 'default' => [
[
'fontFamily' => 'Arial',
'fontSize' => [
'value' => 0,
'unit' => 'px',
],
'fontWeight' => 20,
'letterSpacing' => [
'value' => 0,
'unit' => 'px',
],
'lineHeight' => 0,
],
[
'fontFamily' => [
'Arial',
],
'fontSize' => [
'value' => 0,
'unit' => 'px',
],
'fontWeight' => 20,
'letterSpacing' => [
'value' => 0,
'unit' => 'px',
],
'lineHeight' => 0,
],
];
yield 'with enum and other structure' => [
[
'fontFamily' => 'Arial',
'fontSize' => [
'value' => 10,
'unit' => DimensionUnit::Px,
],
'fontWeight' => FontWeightAlias::Regular,
'letterSpacing' => [
'value' => 30,
'unit' => dimensionUnit::Px,
],
'lineHeight' => 5,
],
[
'fontFamily' => [
'Arial',
],
'fontSize' => [
'value' => 10,
'unit' => 'px',
],
'fontWeight' => 400,
'letterSpacing' => [
'value' => 30,
'unit' => 'px',
],
'lineHeight' => 5,
],
];
}
/**
* {@inheritdoc}
*/
public function testToCss(mixed $value, string $expected) : void {
$this->assertIsArray($value);
$this->setupContainer($value);
$plugin = new Typography($value, $this->pluginId, [], \Drupal::service(DesignTokenValuePluginManagerInterface::class));
$this->assertSame($expected, $plugin->toCss());
}
/**
* Data provider for ::testToCss().
*
* @return \Generator
* The test cases.
*/
public static function providerToCss() : iterable {
yield 'default' => [
[
'fontFamily' => [
'Arial',
'sans-serif',
],
'fontSize' => [
'value' => 10,
'unit' => 'px',
],
'fontWeight' => 20,
'letterSpacing' => [
'value' => 30,
'unit' => 'px',
],
'lineHeight' => 5,
],
'20 10px/5 Arial, sans-serif',
];
}
/**
* Sets up service container as needed by the plugin.
*
* @param array $configuration
* The typography plugin configuration.
*/
protected function setupContainer(array $configuration) : void {
$properties = $this->properties;
$instances = [];
foreach ($properties as $property => $propertyType) {
$propertyConfig = DesignTokenValuePluginBase::prepareConfiguration($configuration[$property]);
switch ($propertyType) {
case 'dimension':
$instances[$property] = new Dimension($propertyConfig, $propertyType, []);
break;
case 'fontFamily':
$instances[$property] = new FontFamily($propertyConfig, $propertyType, []);
break;
case 'fontWeight':
$instances[$property] = new FontWeight($propertyConfig, $propertyType, []);
break;
case 'number':
$instances[$property] = new Number($propertyConfig, $propertyType, []);
break;
}
}
$designTokenValuePluginManager = $this->createMock(DesignTokenValuePluginManagerInterface::class);
$designTokenValuePluginManager->expects($this->exactly(5))
->method('createInstance')
->willReturnCallback(static function (string $type, array $preparedPropertyConfig) use ($properties, $configuration, $instances) {
foreach ($properties as $property => $propertyType) {
if ($propertyType != $type) {
continue;
}
$propertyConfig = DesignTokenValuePluginBase::prepareConfiguration($configuration[$property]);
if ($propertyConfig == $preparedPropertyConfig) {
return $instances[$property];
}
}
return '';
});
$container = new ContainerBuilder();
$container->set(DesignTokenValuePluginManagerInterface::class, $designTokenValuePluginManager);
\Drupal::setContainer($container);
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.