Skip to content
Snippets Groups Projects
Commit ec5bccb4 authored by Mikael Meulle's avatar Mikael Meulle
Browse files

WIP

parent f2df9427
No related branches found
No related tags found
No related merge requests found
<?php
declare(strict_types=1);
namespace Drupal\Tests\ui_patterns_field_formatters\Kernel\Source;
use Drupal\Tests\ui_patterns\Kernel\SourcePluginsTestBase;
/**
* Test FieldFormatterSource.
*
* @coversDefaultClass \Drupal\ui_patterns_field_formatters\Plugin\UiPatterns\Source\FieldFormatterSource
* @group ui_patterns_field_formatters
*/
class FieldFormatterSourceTest extends SourcePluginsTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = ['ui_patterns_field_formatters'];
/**
* Test Field Property Plugin.
*/
public function testPlugin(): void {
$testData = self::loadTestDataFixture(__DIR__ . "/../../fixtures/tests.yml");
$testSets = $testData->getTestSets();
foreach ($testSets as $test_set_name => $test_set) {
if (!str_starts_with($test_set_name, 'field_formatter_')) {
continue;
}
$this->runSourcePluginTest($test_set);
}
}
}
<?php
declare(strict_types=1);
namespace Drupal\Tests\ui_patterns_field_formatters\Kernel\Source;
use Drupal\Tests\ui_patterns\Kernel\SourcePluginsTestBase;
/**
* Test FieldLabelSource.
*
* @coversDefaultClass \Drupal\ui_patterns_field_formatters\Plugin\UiPatterns\Source\FieldLabelSource
* @group ui_patterns_field_formatters
*/
class FieldLabelSourceTest extends SourcePluginsTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = ['ui_patterns_field_formatters'];
/**
* Test Field Property Plugin.
*/
public function testPlugin(): void {
$testData = self::loadTestDataFixture(__DIR__ . "/../../fixtures/tests.yml");
$testSets = $testData->getTestSets();
foreach ($testSets as $test_set_name => $test_set) {
if (!str_starts_with($test_set_name, 'field_label_')) {
continue;
}
$this->runSourcePluginTest($test_set);
}
}
}
---
field_formatter_default_1:
component:
component_id: ui_patterns_test:test-component
slots:
slot:
sources:
-
source_id: field_formatter:node:page:field_text_1
source:
type: 'string'
# contexs:
#bundle: page
#field_name: 'field_text_1'
entity:
field_text_1:
value: 'value_text_1'
output:
slots:
slot:
-
rendered_value: "<p>value_text_1</p>"
rendered_value_plain: "value_text_1"
field_formatter_default_2:
component:
component_id: ui_patterns_test:test-component
props:
string:
source_id: field_formatter:node:page:field_text_1
source:
type: 'string'
output:
props:
string:
rendered_value: "<p>value_text_2</p>"
rendered_value_plain: "value_text_2"
entity:
field_text_1:
value: 'value_text_2'
field_label_default_1:
component:
component_id: ui_patterns_test:test-component
slots:
slot:
sources:
-
source_id: field_label
contexts:
field_name: 'field_text_1'
entity: {}
output:
slots:
slot:
-
rendered_value: "Text (formatted)"
field_label_default_2:
component:
component_id: ui_patterns_test:test-component
props:
string:
source_id: field_label
contexts:
field_name: 'field_text_1'
entity: {}
output:
props:
string:
value: "Text (formatted)"
......@@ -144,9 +144,12 @@ trait RunSourcePluginTestTrait {
}
$plugin = $this->getSourcePluginForPropOrSlot($component, $prop_or_slot_id, $source_to_test, $source_to_test["source_id"], $contexts);
assertTrue($plugin instanceof SourcePluginBase);
$message = sprintf("Test '%s' failed for prop/slot '%s' of component %s with source '%s' ", $test_set["name"] ?? "", $prop_or_slot_id, $component_id, $source_to_test["source_id"]);
$prop_value = $plugin->getPropValue();
// getPropValue() returns the 'raw' value of the source compatible with the type declared.
// getValue() returns the value of the source converted to the type definition.
$prop_value = $plugin->getValue($plugin->getPropDefinition()["ui_patterns"]["type_definition"]);
$message = sprintf("Test '%s' failed for prop/slot '%s' of component %s with source '%s'", $test_set["name"] ?? "", $prop_or_slot_id, $component_id, $source_to_test["source_id"]);
$this->assertExpectedOutput($expected_outputs_here[$index], $prop_value, $message);
}
}
}
......
......@@ -4,7 +4,9 @@ declare(strict_types=1);
namespace Drupal\Tests\ui_patterns\Traits;
use Drupal\Component\Render\MarkupInterface;
use Drupal\Component\Serialization\Yaml;
use Drupal\Component\Utility\Xss;
/**
* Trait to read fixtures that describe component test situations.
......@@ -51,20 +53,54 @@ trait TestDataTrait {
* @throws \RuntimeException
*/
protected function assertExpectedOutput(array $expected_result, mixed $result, string $message = ''): void {
$assert_done = FALSE;
if (isset($expected_result['value'])) {
$this->assertContains($expected_result['value'], [$result], $message);
$this->assertContains($expected_result['value'], [$result], sprintf("%s: '%s'", $message, print_r($result, TRUE)));
$assert_done = TRUE;
}
elseif (isset($expected_result['same'])) {
if (isset($expected_result['value_normalized'])) {
$normalized_value = self::normalizeMarkupString($result);
$this->assertContains($expected_result['value'], [$normalized_value], sprintf("%s: '%s'", $message, $normalized_value));
$assert_done = TRUE;
}
if (isset($expected_result['same'])) {
$this->assertSame($expected_result['same'], $result, $message);
$assert_done = TRUE;
}
elseif (isset($expected_result['regEx'])) {
if (isset($expected_result['regEx'])) {
$this->assertTrue(preg_match($expected_result['regEx'], $result) === 1, $message);
$assert_done = TRUE;
}
if (isset($expected_result['rendered_value']) || isset($expected_result['rendered_value_plain']) || isset($expected_result['rendered_value_normalized'])) {
$rendered = \Drupal::service('renderer')->renderRoot($result);
// $rendered = is_array($result) ? \Drupal::service('renderer')->renderRoot($result) : $result;
if ($rendered instanceof MarkupInterface) {
$rendered = "" . $rendered;
}
$normalized_rendered = self::normalizeMarkupString($rendered);
if (isset($expected_result['rendered_value'])) {
$this->assertContains($expected_result['rendered_value'], [$normalized_rendered], sprintf("%s: '%s'", $message, $normalized_rendered));
}
if (isset($expected_result['rendered_value_plain'])) {
$rendered_plain = Xss::filter($normalized_rendered);
$this->assertContains($expected_result['rendered_value_plain'], [$rendered_plain], sprintf("%s: '%s'", $message, $rendered_plain));
}
$assert_done = TRUE;
}
else {
if (!$assert_done) {
throw new \RuntimeException(sprintf('Missing "value" or "regEx" in expected result %s', print_r($expected_result, TRUE)));
}
}
/**
* Normalize a string of markup for comparison.
*/
protected static function normalizeMarkupString(string $markup): string {
$markup = preg_replace('/\s*(<|>)\s*/', '$1', $markup);
$markup = trim($markup);
return $markup;
}
/**
* Loads test dataset fixture.
*/
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment