From 644ecb5190e6c6fb7fb3f995dbfd0df9557f0e87 Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Sun, 21 Dec 2025 22:22:33 +0100 Subject: [PATCH] Change the contract of the formatters Both `ArrayFormatter` and `StringFormatter` accept an instance of the `Translator`. Thinking about it a bit better, I realised that a formatter might not always need a `Translator`, but it will surely need a `Renderer`. Besides, the `InterpolationRenderer` needs to take translation into account, so it seems more natural to me that this is the one that will get an instance of the `Translator`, as other implementations of the `Renderer` might not even deal with translations. --- library/ContainerRegistry.php | 2 +- library/Message/ArrayFormatter.php | 2 +- .../Formatter/FirstResultStringFormatter.php | 12 +-- .../Formatter/NestedArrayFormatter.php | 12 +-- .../Formatter/NestedListStringFormatter.php | 15 ++-- library/Message/InterpolationRenderer.php | 20 ++--- library/Message/Renderer.php | 2 +- library/Message/StringFormatter.php | 2 +- library/Validator.php | 10 +-- .../Message/TestingMessageRenderer.php | 3 +- .../FirstResultStringFormatterTest.php | 17 ++-- .../Formatter/NestedArrayFormatterTest.php | 17 ++-- .../NestedListStringFormatterTest.php | 17 ++-- .../Message/InterpolationRendererTest.php | 81 +++++++++---------- 14 files changed, 91 insertions(+), 121 deletions(-) diff --git a/library/ContainerRegistry.php b/library/ContainerRegistry.php index 4dc9b80c..d4d8c3b9 100644 --- a/library/ContainerRegistry.php +++ b/library/ContainerRegistry.php @@ -51,10 +51,10 @@ final class ContainerRegistry 'respect.validation.ignored_backtrace_paths' => [__DIR__ . '/Validator.php'], Validator::class => factory(static fn(Container $container) => new Validator( $container->get(Factory::class), + $container->get(Renderer::class), $container->get('respect.validation.formatter.message'), $container->get('respect.validation.formatter.full_message'), $container->get('respect.validation.formatter.messages'), - $container->get(Translator::class), $container->get(ResultFilter::class), $container->get('respect.validation.ignored_backtrace_paths'), )), diff --git a/library/Message/ArrayFormatter.php b/library/Message/ArrayFormatter.php index 0bf6a0c5..daf76c9b 100644 --- a/library/Message/ArrayFormatter.php +++ b/library/Message/ArrayFormatter.php @@ -18,5 +18,5 @@ interface ArrayFormatter * * @return array */ - public function format(Result $result, array $templates, Translator $translator): array; + public function format(Result $result, Renderer $renderer, array $templates): array; } diff --git a/library/Message/Formatter/FirstResultStringFormatter.php b/library/Message/Formatter/FirstResultStringFormatter.php index eafc3d55..e1451892 100644 --- a/library/Message/Formatter/FirstResultStringFormatter.php +++ b/library/Message/Formatter/FirstResultStringFormatter.php @@ -11,31 +11,25 @@ namespace Respect\Validation\Message\Formatter; use Respect\Validation\Message\Renderer; use Respect\Validation\Message\StringFormatter; -use Respect\Validation\Message\Translator; use Respect\Validation\Result; final readonly class FirstResultStringFormatter implements StringFormatter { public function __construct( - private Renderer $renderer, private TemplateResolver $templateResolver, ) { } /** @param array $templates */ - public function format(Result $result, array $templates, Translator $translator): string + public function format(Result $result, Renderer $renderer, array $templates): string { $matchedTemplates = $this->templateResolver->selectMatches($result, $templates); if (!$this->templateResolver->hasMatch($result, $matchedTemplates)) { foreach ($result->children as $child) { - return $this->format( - $child, - $matchedTemplates, - $translator, - ); + return $this->format($child, $renderer, $matchedTemplates); } } - return $this->renderer->render($this->templateResolver->resolve($result, $matchedTemplates), $translator); + return $renderer->render($this->templateResolver->resolve($result, $matchedTemplates)); } } diff --git a/library/Message/Formatter/NestedArrayFormatter.php b/library/Message/Formatter/NestedArrayFormatter.php index bf914153..09d46739 100644 --- a/library/Message/Formatter/NestedArrayFormatter.php +++ b/library/Message/Formatter/NestedArrayFormatter.php @@ -11,7 +11,6 @@ namespace Respect\Validation\Message\Formatter; use Respect\Validation\Message\ArrayFormatter; use Respect\Validation\Message\Renderer; -use Respect\Validation\Message\Translator; use Respect\Validation\Result; use function count; @@ -20,7 +19,6 @@ use function current; final readonly class NestedArrayFormatter implements ArrayFormatter { public function __construct( - private Renderer $renderer, private TemplateResolver $templateResolver, ) { } @@ -30,14 +28,13 @@ final readonly class NestedArrayFormatter implements ArrayFormatter * * @return array */ - public function format(Result $result, array $templates, Translator $translator): array + public function format(Result $result, Renderer $renderer, array $templates): array { $matchedTemplates = $this->templateResolver->selectMatches($result, $templates); if (count($result->children) === 0 || $this->templateResolver->hasMatch($result, $matchedTemplates)) { return [ - $result->path->value ?? $result->id->value => $this->renderer->render( + $result->path->value ?? $result->id->value => $renderer->render( $this->templateResolver->resolve($result->withoutParentPath(), $matchedTemplates), - $translator, ), ]; } @@ -47,8 +44,8 @@ final readonly class NestedArrayFormatter implements ArrayFormatter $key = $child->path->value ?? $child->id->value; $messages[$key] = $this->format( $child->withoutParentPath()->withoutName(), + $renderer, $this->templateResolver->selectMatches($child, $matchedTemplates), - $translator, ); if (count($messages[$key]) !== 1) { continue; @@ -59,9 +56,8 @@ final readonly class NestedArrayFormatter implements ArrayFormatter if (count($messages) > 1) { $self = [ - '__root__' => $this->renderer->render( + '__root__' => $renderer->render( $this->templateResolver->resolve($result->withoutParentPath(), $matchedTemplates), - $translator, ), ]; diff --git a/library/Message/Formatter/NestedListStringFormatter.php b/library/Message/Formatter/NestedListStringFormatter.php index 4b8b9702..595f1003 100644 --- a/library/Message/Formatter/NestedListStringFormatter.php +++ b/library/Message/Formatter/NestedListStringFormatter.php @@ -11,7 +11,6 @@ namespace Respect\Validation\Message\Formatter; use Respect\Validation\Message\Renderer; use Respect\Validation\Message\StringFormatter; -use Respect\Validation\Message\Translator; use Respect\Validation\Result; use function array_filter; @@ -26,23 +25,22 @@ use const PHP_EOL; final readonly class NestedListStringFormatter implements StringFormatter { public function __construct( - private Renderer $renderer, private TemplateResolver $templateResolver, ) { } /** @param array $templates */ - public function format(Result $result, array $templates, Translator $translator): string + public function format(Result $result, Renderer $renderer, array $templates): string { - return $this->formatRecursively($result, $templates, $translator, 0); + return $this->formatRecursively($result, $renderer, $templates, 0); } /** @param array $templates */ private function formatRecursively( Result $result, + Renderer $renderer, array $templates, - Translator $translator, - int $depth = 0, + int $depth, Result ...$siblings, ): string { $matchedTemplates = $this->templateResolver->selectMatches($result, $templates); @@ -55,12 +53,11 @@ final readonly class NestedListStringFormatter implements StringFormatter $formatted .= sprintf( '%s- %s' . PHP_EOL, $indentation, - $this->renderer->render( + $renderer->render( $this->templateResolver->resolve( $result->withoutParentPath(), $matchedTemplates, ), - $translator, ), ); $depth++; @@ -70,8 +67,8 @@ final readonly class NestedListStringFormatter implements StringFormatter foreach ($result->children as $child) { $formatted .= $this->formatRecursively( $displayedName === $child->name ? $child->withoutName() : $child, + $renderer, $matchedTemplates, - $translator, $depth, ...array_filter($result->children, static fn(Result $sibling) => $sibling !== $child), ); diff --git a/library/Message/InterpolationRenderer.php b/library/Message/InterpolationRenderer.php index 2b766625..977d58c5 100644 --- a/library/Message/InterpolationRenderer.php +++ b/library/Message/InterpolationRenderer.php @@ -31,29 +31,30 @@ final class InterpolationRenderer implements Renderer private array $templates = []; public function __construct( + private readonly Translator $translator, private readonly Stringifier $stringifier = new ValidationStringifier(), ) { } - public function render(Result $result, Translator $translator): string + public function render(Result $result): string { $parameters = ['path' => $result->path, 'input' => $result->input, 'name' => $this->getName($result)]; $parameters += $result->parameters; $rendered = (string) preg_replace_callback( '/{{(\w+)(\|([^}]+))?}}/', - function (array $matches) use ($parameters, $translator) { + function (array $matches) use ($parameters) { if (!isset($parameters[$matches[1]])) { return $matches[0]; } - return $this->placeholder($matches[1], $parameters[$matches[1]], $translator, $matches[3] ?? null); + return $this->placeholder($matches[1], $parameters[$matches[1]], $matches[3] ?? null); }, - $translator->translate($this->getTemplateMessage($result)), + $this->translator->translate($this->getTemplateMessage($result)), ); if (!$result->hasCustomTemplate() && $result->adjacent !== null) { - $rendered .= ' ' . $this->render($result->adjacent, $translator); + $rendered .= ' ' . $this->render($result->adjacent); } return $rendered; @@ -75,19 +76,18 @@ final class InterpolationRenderer implements Renderer private function placeholder( string $name, mixed $value, - Translator $translator, string|null $modifier = null, ): string { if ($modifier === 'quote' && is_string($value)) { - return $this->placeholder($name, new Quoted($value), $translator); + return $this->placeholder($name, new Quoted($value)); } if ($modifier === 'listOr' && is_array($value)) { - return $this->placeholder($name, new Listed($value, $translator->translate('or')), $translator); + return $this->placeholder($name, new Listed($value, $this->translator->translate('or'))); } if ($modifier === 'listAnd' && is_array($value)) { - return $this->placeholder($name, new Listed($value, $translator->translate('and')), $translator); + return $this->placeholder($name, new Listed($value, $this->translator->translate('and'))); } if ($modifier === 'raw' && is_scalar($value)) { @@ -95,7 +95,7 @@ final class InterpolationRenderer implements Renderer } if ($modifier === 'trans' && is_string($value)) { - return $translator->translate($value); + return $this->translator->translate($value); } return $this->stringifier->stringify($value, 0) ?? print_r($value, true); diff --git a/library/Message/Renderer.php b/library/Message/Renderer.php index e5507035..c0a0529b 100644 --- a/library/Message/Renderer.php +++ b/library/Message/Renderer.php @@ -13,5 +13,5 @@ use Respect\Validation\Result; interface Renderer { - public function render(Result $result, Translator $translator): string; + public function render(Result $result): string; } diff --git a/library/Message/StringFormatter.php b/library/Message/StringFormatter.php index c0023994..d870e5cd 100644 --- a/library/Message/StringFormatter.php +++ b/library/Message/StringFormatter.php @@ -14,5 +14,5 @@ use Respect\Validation\Result; interface StringFormatter { /** @param array $templates */ - public function format(Result $result, array $templates, Translator $translator): string; + public function format(Result $result, Renderer $renderer, array $templates): string; } diff --git a/library/Validator.php b/library/Validator.php index 1e3068c5..ed952c4b 100644 --- a/library/Validator.php +++ b/library/Validator.php @@ -11,8 +11,8 @@ namespace Respect\Validation; use Respect\Validation\Exceptions\ValidationException; use Respect\Validation\Message\ArrayFormatter; +use Respect\Validation\Message\Renderer; use Respect\Validation\Message\StringFormatter; -use Respect\Validation\Message\Translator; use Respect\Validation\Mixins\Builder; use Respect\Validation\Rules\Core\Nameable; use Respect\Validation\Rules\Core\Reducer; @@ -38,10 +38,10 @@ final class Validator implements Rule, Nameable /** @param array $ignoredBacktracePaths */ public function __construct( private readonly Factory $factory, + private readonly Renderer $renderer, private readonly StringFormatter $mainMessageFormatter, private readonly StringFormatter $fullMessageFormatter, private readonly ArrayFormatter $messagesFormatter, - private readonly Translator $translator, private readonly ResultFilter $resultFilter, private readonly array $ignoredBacktracePaths, ) { @@ -89,9 +89,9 @@ final class Validator implements Rule, Nameable $failedResult = $this->resultFilter->filter($result); $exception = new ValidationException( - $this->mainMessageFormatter->format($failedResult, $templates, $this->translator), - $this->fullMessageFormatter->format($failedResult, $templates, $this->translator), - $this->messagesFormatter->format($failedResult, $templates, $this->translator), + $this->mainMessageFormatter->format($failedResult, $this->renderer, $templates), + $this->fullMessageFormatter->format($failedResult, $this->renderer, $templates), + $this->messagesFormatter->format($failedResult, $this->renderer, $templates), $this->ignoredBacktracePaths, ); diff --git a/tests/library/Message/TestingMessageRenderer.php b/tests/library/Message/TestingMessageRenderer.php index 4f75a0fc..8a896ecf 100644 --- a/tests/library/Message/TestingMessageRenderer.php +++ b/tests/library/Message/TestingMessageRenderer.php @@ -10,12 +10,11 @@ declare(strict_types=1); namespace Respect\Validation\Test\Message; use Respect\Validation\Message\Renderer; -use Respect\Validation\Message\Translator; use Respect\Validation\Result; final class TestingMessageRenderer implements Renderer { - public function render(Result $result, Translator $translator): string + public function render(Result $result): string { return $result->template; } diff --git a/tests/unit/Message/Formatter/FirstResultStringFormatterTest.php b/tests/unit/Message/Formatter/FirstResultStringFormatterTest.php index c6e3474e..f460b841 100644 --- a/tests/unit/Message/Formatter/FirstResultStringFormatterTest.php +++ b/tests/unit/Message/Formatter/FirstResultStringFormatterTest.php @@ -14,7 +14,6 @@ use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\Test; use Respect\Validation\Exceptions\ComponentException; use Respect\Validation\Message\StandardFormatter\ResultCreator; -use Respect\Validation\Message\Translator\DummyTranslator; use Respect\Validation\Result; use Respect\Validation\Rule; use Respect\Validation\Test\Builders\ResultBuilder; @@ -35,21 +34,17 @@ final class FirstResultStringFormatterTest extends TestCase #[DataProvider('provideForMain')] public function itShouldFormatMainMessage(Result $result, string $expected, array $templates = []): void { - $formatter = new FirstResultStringFormatter( - renderer: new TestingMessageRenderer(), - templateResolver: new TemplateResolver(), - ); + $renderer = new TestingMessageRenderer(); + $formatter = new FirstResultStringFormatter(new TemplateResolver()); - self::assertSame($expected, $formatter->format($result, $templates, new DummyTranslator())); + self::assertSame($expected, $formatter->format($result, $renderer, $templates)); } #[Test] public function itShouldThrowAnExceptionWhenTryingToFormatAndTemplateIsInvalid(): void { - $formatter = new FirstResultStringFormatter( - renderer: new TestingMessageRenderer(), - templateResolver: new TemplateResolver(), - ); + $renderer = new TestingMessageRenderer(); + $formatter = new FirstResultStringFormatter(new TemplateResolver()); $result = (new ResultBuilder())->id('foo')->build(); $template = new stdClass(); @@ -57,7 +52,7 @@ final class FirstResultStringFormatterTest extends TestCase $this->expectException(ComponentException::class); $this->expectExceptionMessage(sprintf('Template for "foo" must be a string, %s given', stringify($template))); - $formatter->format($result, ['foo' => $template], new DummyTranslator()); + $formatter->format($result, $renderer, ['foo' => $template]); } /** @return array}> */ diff --git a/tests/unit/Message/Formatter/NestedArrayFormatterTest.php b/tests/unit/Message/Formatter/NestedArrayFormatterTest.php index 98799711..d3550961 100644 --- a/tests/unit/Message/Formatter/NestedArrayFormatterTest.php +++ b/tests/unit/Message/Formatter/NestedArrayFormatterTest.php @@ -14,7 +14,6 @@ use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\Test; use Respect\Validation\Exceptions\ComponentException; use Respect\Validation\Message\StandardFormatter\ResultCreator; -use Respect\Validation\Message\Translator\DummyTranslator; use Respect\Validation\Result; use Respect\Validation\Test\Builders\ResultBuilder; use Respect\Validation\Test\Message\TestingMessageRenderer; @@ -37,21 +36,17 @@ final class NestedArrayFormatterTest extends TestCase #[DataProvider('provideForArray')] public function itShouldFormatArrayMessage(Result $result, array $expected, array $templates = []): void { - $formatter = new NestedArrayFormatter( - renderer: new TestingMessageRenderer(), - templateResolver: new TemplateResolver(), - ); + $renderer = new TestingMessageRenderer(); + $formatter = new NestedArrayFormatter(new TemplateResolver()); - self::assertSame($expected, $formatter->format($result, $templates, new DummyTranslator())); + self::assertSame($expected, $formatter->format($result, $renderer, $templates)); } #[Test] public function itShouldThrowAnExceptionWhenTryingToFormatAndTemplateIsInvalid(): void { - $formatter = new NestedArrayFormatter( - renderer: new TestingMessageRenderer(), - templateResolver: new TemplateResolver(), - ); + $renderer = new TestingMessageRenderer(); + $formatter = new NestedArrayFormatter(new TemplateResolver()); $result = (new ResultBuilder())->id('foo')->build(); $template = new stdClass(); @@ -59,7 +54,7 @@ final class NestedArrayFormatterTest extends TestCase $this->expectException(ComponentException::class); $this->expectExceptionMessage(sprintf('Template for "foo" must be a string, %s given', stringify($template))); - $formatter->format($result, ['foo' => $template], new DummyTranslator()); + $formatter->format($result, $renderer, ['foo' => $template]); } /** @return array, 2?: array}> */ diff --git a/tests/unit/Message/Formatter/NestedListStringFormatterTest.php b/tests/unit/Message/Formatter/NestedListStringFormatterTest.php index f9b1b884..05e82155 100644 --- a/tests/unit/Message/Formatter/NestedListStringFormatterTest.php +++ b/tests/unit/Message/Formatter/NestedListStringFormatterTest.php @@ -14,7 +14,6 @@ use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\Test; use Respect\Validation\Exceptions\ComponentException; use Respect\Validation\Message\StandardFormatter\ResultCreator; -use Respect\Validation\Message\Translator\DummyTranslator; use Respect\Validation\Result; use Respect\Validation\Test\Builders\ResultBuilder; use Respect\Validation\Test\Message\TestingMessageRenderer; @@ -34,21 +33,17 @@ final class NestedListStringFormatterTest extends TestCase #[DataProvider('provideForFull')] public function itShouldFormatFullMessage(Result $result, string $expected, array $templates = []): void { - $formatter = new NestedListStringFormatter( - renderer: new TestingMessageRenderer(), - templateResolver: new TemplateResolver(), - ); + $renderer = new TestingMessageRenderer(); + $formatter = new NestedListStringFormatter(new TemplateResolver()); - self::assertSame($expected, $formatter->format($result, $templates, new DummyTranslator())); + self::assertSame($expected, $formatter->format($result, $renderer, $templates)); } #[Test] public function itShouldThrowAnExceptionWhenTryingToFormatAndTemplateIsInvalid(): void { - $formatter = new NestedListStringFormatter( - renderer: new TestingMessageRenderer(), - templateResolver: new TemplateResolver(), - ); + $renderer = new TestingMessageRenderer(); + $formatter = new NestedListStringFormatter(new TemplateResolver()); $result = (new ResultBuilder())->id('foo')->build(); $template = new stdClass(); @@ -56,7 +51,7 @@ final class NestedListStringFormatterTest extends TestCase $this->expectException(ComponentException::class); $this->expectExceptionMessage(sprintf('Template for "foo" must be a string, %s given', stringify($template))); - $formatter->format($result, ['foo' => $template], new DummyTranslator()); + $formatter->format($result, $renderer, ['foo' => $template]); } /** @return array}> */ diff --git a/tests/unit/Message/InterpolationRendererTest.php b/tests/unit/Message/InterpolationRendererTest.php index b2903cd9..44f2ec06 100644 --- a/tests/unit/Message/InterpolationRendererTest.php +++ b/tests/unit/Message/InterpolationRendererTest.php @@ -26,11 +26,11 @@ final class InterpolationRendererTest extends TestCase #[Test] public function itShouldRenderResultWithCustomTemplate(): void { - $renderer = new InterpolationRenderer(new TestingStringifier()); + $renderer = new InterpolationRenderer(new DummyTranslator(), new TestingStringifier()); $result = (new ResultBuilder())->template('This is my template')->build(); - self::assertSame($result->template, $renderer->render($result, new DummyTranslator())); + self::assertSame($result->template, $renderer->render($result)); } #[Test] @@ -38,7 +38,7 @@ final class InterpolationRendererTest extends TestCase { $stringifier = new TestingStringifier(); - $renderer = new InterpolationRenderer($stringifier); + $renderer = new InterpolationRenderer(new DummyTranslator(), $stringifier); $key = 'foo'; $value = true; @@ -50,7 +50,7 @@ final class InterpolationRendererTest extends TestCase self::assertSame( 'Will replace ' . $stringifier->stringify($value, 0), - $renderer->render($result, new DummyTranslator()), + $renderer->render($result), ); } @@ -59,7 +59,7 @@ final class InterpolationRendererTest extends TestCase { $stringifier = new TestingStringifier(); - $renderer = new InterpolationRenderer($stringifier); + $renderer = new InterpolationRenderer(new DummyTranslator(), $stringifier); $key = 'foo'; $value = 0.1; @@ -71,7 +71,7 @@ final class InterpolationRendererTest extends TestCase self::assertSame( sprintf('Will replace %s and 0.1', $stringifier->stringify($value, 0)), - $renderer->render($result, new DummyTranslator()), + $renderer->render($result), ); } @@ -80,7 +80,7 @@ final class InterpolationRendererTest extends TestCase { $stringifier = new TestingStringifier(); - $renderer = new InterpolationRenderer($stringifier); + $renderer = new InterpolationRenderer(new DummyTranslator(), $stringifier); $key = 'foo'; $value = false; @@ -92,21 +92,20 @@ final class InterpolationRendererTest extends TestCase self::assertSame( sprintf('Will replace %s and 0', $stringifier->stringify($value, 0)), - $renderer->render($result, new DummyTranslator()), + $renderer->render($result), ); } #[Test] public function itShouldRenderResultProcessingTranslatableParametersInTheTemplate(): void { - $stringifier = new TestingStringifier(); - - $renderer = new InterpolationRenderer($stringifier); - $key = 'foo'; $value = 'original'; $translation = 'translated'; + $stringifier = new TestingStringifier(); + $renderer = new InterpolationRenderer(new ArrayTranslator([$value => $translation]), $stringifier); + $result = (new ResultBuilder()) ->template(sprintf('Will replace {{%1$s}} and {{%1$s|trans}}', $key)) ->parameters([$key => $value]) @@ -114,7 +113,7 @@ final class InterpolationRendererTest extends TestCase self::assertSame( sprintf('Will replace %s and %s', $stringifier->stringify($value, 0), $translation), - $renderer->render($result, new ArrayTranslator([$value => $translation])), + $renderer->render($result), ); } @@ -123,7 +122,7 @@ final class InterpolationRendererTest extends TestCase { $stringifier = new TestingStringifier(); - $renderer = new InterpolationRenderer($stringifier); + $renderer = new InterpolationRenderer(new DummyTranslator(), $stringifier); $value = 'original'; @@ -134,7 +133,7 @@ final class InterpolationRendererTest extends TestCase self::assertSame( sprintf('Will replace %s', $stringifier->stringify(new Name($value), 0) ?? 'FAILED'), - $renderer->render($result, new DummyTranslator()), + $renderer->render($result), ); } @@ -143,7 +142,7 @@ final class InterpolationRendererTest extends TestCase { $stringifier = new TestingStringifier(); - $renderer = new InterpolationRenderer($stringifier); + $renderer = new InterpolationRenderer(new DummyTranslator(), $stringifier); $value = true; @@ -157,7 +156,7 @@ final class InterpolationRendererTest extends TestCase 'Will replace %s', $stringifier->stringify(new Name((string) $stringifier->stringify($value, 0)), 0), ), - $renderer->render($result, new DummyTranslator()), + $renderer->render($result), ); } @@ -165,7 +164,7 @@ final class InterpolationRendererTest extends TestCase public function itShouldRenderResultProcessingNameAsSomeParameterInTheTemplate(): void { $stringifier = new TestingStringifier(); - $renderer = new InterpolationRenderer($stringifier); + $renderer = new InterpolationRenderer(new DummyTranslator(), $stringifier); $name = 'my name'; @@ -176,7 +175,7 @@ final class InterpolationRendererTest extends TestCase self::assertSame( 'Will replace ' . $stringifier->stringify(new Name($name), 0), - $renderer->render($result, new DummyTranslator()), + $renderer->render($result), ); } @@ -185,7 +184,7 @@ final class InterpolationRendererTest extends TestCase { $stringifier = new TestingStringifier(); - $renderer = new InterpolationRenderer($stringifier); + $renderer = new InterpolationRenderer(new DummyTranslator(), $stringifier); $input = 42; @@ -199,7 +198,7 @@ final class InterpolationRendererTest extends TestCase 'Will replace %s', $stringifier->stringify(new Name((string) $stringifier->stringify($input, 0)), 0), ), - $renderer->render($result, new DummyTranslator()), + $renderer->render($result), ); } @@ -208,7 +207,7 @@ final class InterpolationRendererTest extends TestCase { $stringifier = new TestingStringifier(); - $renderer = new InterpolationRenderer($stringifier); + $renderer = new InterpolationRenderer(new DummyTranslator(), $stringifier); $input = 42; @@ -219,7 +218,7 @@ final class InterpolationRendererTest extends TestCase self::assertSame( sprintf('Will replace %s', $stringifier->stringify($input, 0)), - $renderer->render($result, new DummyTranslator()), + $renderer->render($result), ); } @@ -230,7 +229,7 @@ final class InterpolationRendererTest extends TestCase $stringifier = new TestingStringifier(); - $renderer = new InterpolationRenderer($stringifier); + $renderer = new InterpolationRenderer(new DummyTranslator(), $stringifier); $result = (new ResultBuilder()) ->template('Will replace {{name}}') @@ -240,7 +239,7 @@ final class InterpolationRendererTest extends TestCase self::assertSame( sprintf('Will replace %s', $stringifier->stringify(new Name($parameterNameValue), 0)), - $renderer->render($result, new DummyTranslator()), + $renderer->render($result), ); } @@ -249,7 +248,7 @@ final class InterpolationRendererTest extends TestCase { $stringifier = new TestingStringifier(); - $renderer = new InterpolationRenderer($stringifier); + $renderer = new InterpolationRenderer(new DummyTranslator(), $stringifier); $input = 'real input'; @@ -261,20 +260,20 @@ final class InterpolationRendererTest extends TestCase self::assertSame( sprintf('Will replace %s', $stringifier->stringify($input, 0)), - $renderer->render($result, new DummyTranslator()), + $renderer->render($result), ); } #[Test] public function itShouldRenderResultProcessingNonExistingParameters(): void { - $renderer = new InterpolationRenderer(new TestingStringifier()); + $renderer = new InterpolationRenderer(new DummyTranslator(), new TestingStringifier()); $result = (new ResultBuilder()) ->template('Will not replace {{unknown}}') ->build(); - self::assertSame('Will not replace {{unknown}}', $renderer->render($result, new DummyTranslator())); + self::assertSame('Will not replace {{unknown}}', $renderer->render($result)); } #[Test] @@ -283,21 +282,21 @@ final class InterpolationRendererTest extends TestCase $template = 'This is my template with {{foo}}'; $translations = [$template => 'This is my translated template with {{foo}}']; - $renderer = new InterpolationRenderer(new TestingStringifier()); $translator = new ArrayTranslator($translations); + $renderer = new InterpolationRenderer($translator, new TestingStringifier()); $result = (new ResultBuilder()) ->template($template) ->build(); - self::assertSame($translations[$template], $renderer->render($result, $translator)); + self::assertSame($translations[$template], $renderer->render($result)); } #[Test] public function itShouldRenderResultWithNonCustomTemplate(): void { $stringifier = new TestingStringifier(); - $renderer = new InterpolationRenderer($stringifier); + $renderer = new InterpolationRenderer(new DummyTranslator(), $stringifier); $result = (new ResultBuilder())->build(); @@ -306,7 +305,7 @@ final class InterpolationRendererTest extends TestCase '%s must be a valid stub', $stringifier->stringify(new Name((string) $stringifier->stringify($result->input, 0)), 0), ), - $renderer->render($result, new DummyTranslator()), + $renderer->render($result), ); } @@ -314,7 +313,7 @@ final class InterpolationRendererTest extends TestCase public function itShouldRenderResultWithNonCustomTemplateAndInvertedMode(): void { $stringifier = new TestingStringifier(); - $renderer = new InterpolationRenderer($stringifier); + $renderer = new InterpolationRenderer(new DummyTranslator(), $stringifier); $result = (new ResultBuilder())->hasInvertedMode()->build(); @@ -323,27 +322,27 @@ final class InterpolationRendererTest extends TestCase '%s must not be a valid stub', $stringifier->stringify(new Name((string) $stringifier->stringify($result->input, 0)), 0), ), - $renderer->render($result, new DummyTranslator()), + $renderer->render($result), ); } #[Test] public function itShouldRenderResultWithNonCustomTemplateWhenCannotFindAttachedTemplate(): void { - $renderer = new InterpolationRenderer(new TestingStringifier()); + $renderer = new InterpolationRenderer(new DummyTranslator(), new TestingStringifier()); $result = (new ResultBuilder())->template('__not_standard__')->hasInvertedMode()->build(); self::assertSame( $result->template, - $renderer->render($result, new DummyTranslator()), + $renderer->render($result), ); } #[Test] public function itShouldRenderResultWithItsAdjacentsWhenItHasNoCustomTemplate(): void { - $renderer = new InterpolationRenderer(new TestingStringifier()); + $renderer = new InterpolationRenderer(new DummyTranslator(), new TestingStringifier()); $result = (new ResultBuilder())->template('__1st__') ->adjacent( @@ -357,7 +356,7 @@ final class InterpolationRendererTest extends TestCase $expect = '__1st__ __2nd__ __3rd__'; - self::assertSame($expect, $renderer->render($result, new DummyTranslator())); + self::assertSame($expect, $renderer->render($result)); } #[Test] @@ -369,8 +368,8 @@ final class InterpolationRendererTest extends TestCase ->adjacent((new ResultBuilder())->template('and this is a adjacent')->build()) ->build(); - $renderer = new InterpolationRenderer(new TestingStringifier()); + $renderer = new InterpolationRenderer(new DummyTranslator(), new TestingStringifier()); - self::assertSame($template, $renderer->render($result, new DummyTranslator())); + self::assertSame($template, $renderer->render($result)); } }