diff --git a/src/Tags/RenderTag.php b/src/Tags/RenderTag.php index 446af33..b6b4255 100644 --- a/src/Tags/RenderTag.php +++ b/src/Tags/RenderTag.php @@ -119,7 +119,7 @@ public function stream(RenderContext $context): \Generator $forLoop = new ForLoopDrop($templateName, count($variable)); foreach ($variable as $value) { - $partialContext = $this->setInnerContextVariables($context->newIsolatedSubContext($templateName), [ + $partialContext = $this->buildPartialContext($context, $templateName, [ 'forloop' => $forLoop, $contextVariableName => $value, ]); @@ -132,7 +132,7 @@ public function stream(RenderContext $context): \Generator return; } - $partialContext = $this->setInnerContextVariables($context->newIsolatedSubContext($templateName), [ + $partialContext = $this->buildPartialContext($context, $templateName, [ $contextVariableName => $variable, ]); @@ -162,17 +162,19 @@ protected function loadPartial(RenderContext $context): Template return $context->loadPartial($templateName, parseIfMissing: $this->allowDynamicPartials()); } - protected function setInnerContextVariables(RenderContext $context, array $variables = []): RenderContext + protected function buildPartialContext(RenderContext $rootContext, string $templateName, array $variables = []): RenderContext { + $partialContext = $rootContext->newIsolatedSubContext($templateName); + foreach ($variables as $key => $value) { - $context->set($key, $value); + $partialContext->set($key, $value); } foreach ($this->attributes as $key => $value) { - $context->set($key, $context->evaluate($value)); + $partialContext->set($key, $rootContext->evaluate($value)); } - return $context; + return $partialContext; } protected function allowDynamicPartials(): bool diff --git a/tests/Integration/CustomFiltersTest.php b/tests/Integration/CustomFiltersTest.php index 0fa0012..1497782 100644 --- a/tests/Integration/CustomFiltersTest.php +++ b/tests/Integration/CustomFiltersTest.php @@ -8,12 +8,12 @@ test('ternary', function () { expect(renderTemplate('{{ true | ternary: "yes", "no" }}', factory: $this->factory))->toBe('yes'); - expect(renderTemplate('{{ test | ternary: "yes", "no" }}', factory: $this->factory, assigns: ['test' => ['a']]))->toBe('yes'); - expect(renderTemplate('{{ test | ternary: "yes", "no" }}', factory: $this->factory, assigns: ['test' => 'a']))->toBe('yes'); - expect(renderTemplate('{{ test | ternary: "yes", "no" }}', factory: $this->factory, assigns: ['test' => new \Keepsuit\Liquid\Tests\Stubs\IntegerDrop('1')]))->toBe('yes'); + expect(renderTemplate('{{ test | ternary: "yes", "no" }}', factory: $this->factory, staticData: ['test' => ['a']]))->toBe('yes'); + expect(renderTemplate('{{ test | ternary: "yes", "no" }}', factory: $this->factory, staticData: ['test' => 'a']))->toBe('yes'); + expect(renderTemplate('{{ test | ternary: "yes", "no" }}', factory: $this->factory, staticData: ['test' => new \Keepsuit\Liquid\Tests\Stubs\IntegerDrop('1')]))->toBe('yes'); expect(renderTemplate('{{ false | ternary: "yes", "no" }}', factory: $this->factory))->toBe('no'); - expect(renderTemplate('{{ test | ternary: "yes", "no" }}', factory: $this->factory, assigns: ['test' => []]))->toBe('no'); - expect(renderTemplate('{{ test | ternary: "yes", "no" }}', factory: $this->factory, assigns: ['test' => '']))->toBe('no'); - expect(renderTemplate('{{ test | ternary: "yes", "no" }}', factory: $this->factory, assigns: ['test' => null]))->toBe('no'); + expect(renderTemplate('{{ test | ternary: "yes", "no" }}', factory: $this->factory, staticData: ['test' => []]))->toBe('no'); + expect(renderTemplate('{{ test | ternary: "yes", "no" }}', factory: $this->factory, staticData: ['test' => '']))->toBe('no'); + expect(renderTemplate('{{ test | ternary: "yes", "no" }}', factory: $this->factory, staticData: ['test' => null]))->toBe('no'); }); diff --git a/tests/Integration/ErrorHandlingTest.php b/tests/Integration/ErrorHandlingTest.php index ac26a48..35f0a20 100644 --- a/tests/Integration/ErrorHandlingTest.php +++ b/tests/Integration/ErrorHandlingTest.php @@ -38,7 +38,7 @@ Bla. HTML; - assertTemplateResult($expected, $template, assigns: ['errors' => new ErrorDrop], renderErrors: true); + assertTemplateResult($expected, $template, staticData: ['errors' => new ErrorDrop], renderErrors: true); }); test('standard error', function () { diff --git a/tests/Integration/StandardFilterTest.php b/tests/Integration/StandardFilterTest.php index 96c31da..34a6e2f 100644 --- a/tests/Integration/StandardFilterTest.php +++ b/tests/Integration/StandardFilterTest.php @@ -267,7 +267,7 @@ assertTemplateResult( '{test=>1234}', '{{ foo | map: "registers" }}', - assigns: [ + staticData: [ 'foo' => $model, ], registers: [ @@ -280,7 +280,7 @@ assertTemplateResult( '4217', '{{ thing | map: "foo" | map: "bar" }}', - assigns: ['thing' => ['foo' => [['bar' => 42], ['bar' => 17]]]] + staticData: ['thing' => ['foo' => [['bar' => 42], ['bar' => 17]]]] ); }); @@ -288,7 +288,7 @@ assertTemplateResult( '42', '{% assign key = \'foo\' %}{{ thing | map: key | map: \'bar\' }}', - assigns: ['thing' => ['foo' => ['bar' => 42]]] + staticData: ['thing' => ['foo' => ['bar' => 42]]] ); }); @@ -298,7 +298,7 @@ assertTemplateResult( 'woot: 1', '{{ foo | sort: "whatever" }}', - assigns: ['foo' => [$t]] + staticData: ['foo' => [$t]] ); expect($t->value)->toBe(1); @@ -311,7 +311,7 @@ assertTemplateResult( 'testfoo', '{{ closures | map: "value" }}', - assigns: ['closures' => [$c]] + staticData: ['closures' => [$c]] ); }); @@ -324,7 +324,7 @@ assertTemplateResult( 'foobar', '{{ drops | map: "closure" }}', - assigns: ['drops' => $drops] + staticData: ['drops' => $drops] ); }); @@ -332,7 +332,7 @@ assertTemplateResult( '123', '{{ foo | map: "foo" }}', - assigns: ['foo' => new \Keepsuit\Liquid\Tests\Stubs\IteratorDrop] + staticData: ['foo' => new \Keepsuit\Liquid\Tests\Stubs\IteratorDrop] ); }); @@ -360,7 +360,7 @@ assertTemplateResult( '213', '{{ foo | sort: "bar" | map: "foo" }}', - assigns: ['foo' => new \Keepsuit\Liquid\Tests\Stubs\IteratorDrop] + staticData: ['foo' => new \Keepsuit\Liquid\Tests\Stubs\IteratorDrop] ); }); @@ -368,12 +368,12 @@ assertTemplateResult( 'foobar', '{{ foo | first }}', - assigns: ['foo' => [new \Keepsuit\Liquid\Tests\Stubs\ThingWithToLiquid]] + staticData: ['foo' => [new \Keepsuit\Liquid\Tests\Stubs\ThingWithToLiquid]] ); assertTemplateResult( 'foobar', '{{ foo | last }}', - assigns: ['foo' => [new \Keepsuit\Liquid\Tests\Stubs\ThingWithToLiquid]] + staticData: ['foo' => [new \Keepsuit\Liquid\Tests\Stubs\ThingWithToLiquid]] ); }); @@ -381,7 +381,7 @@ assertTemplateResult( 'wo...', '{{ foo | truncate: 5 }}', - assigns: ['foo' => new ThingWithParamToLiquid] + staticData: ['foo' => new ThingWithParamToLiquid] ); }); @@ -469,42 +469,42 @@ }); test('strip', function () { - assertTemplateResult('ab c', '{{ source | strip }}', assigns: ['source' => ' ab c ']); - assertTemplateResult('ab c', '{{ source | strip }}', assigns: ['source' => " \tab c \n \t"]); + assertTemplateResult('ab c', '{{ source | strip }}', staticData: ['source' => ' ab c ']); + assertTemplateResult('ab c', '{{ source | strip }}', staticData: ['source' => " \tab c \n \t"]); }); test('lstrip', function () { - assertTemplateResult('ab c ', '{{ source | lstrip }}', assigns: ['source' => ' ab c ']); - assertTemplateResult("ab c \n \t", '{{ source | lstrip }}', assigns: ['source' => " \tab c \n \t"]); + assertTemplateResult('ab c ', '{{ source | lstrip }}', staticData: ['source' => ' ab c ']); + assertTemplateResult("ab c \n \t", '{{ source | lstrip }}', staticData: ['source' => " \tab c \n \t"]); }); test('rstrip', function () { - assertTemplateResult(' ab c', '{{ source | rstrip }}', assigns: ['source' => ' ab c ']); - assertTemplateResult(" \tab c", '{{ source | rstrip }}', assigns: ['source' => " \tab c \n \t"]); + assertTemplateResult(' ab c', '{{ source | rstrip }}', staticData: ['source' => ' ab c ']); + assertTemplateResult(" \tab c", '{{ source | rstrip }}', staticData: ['source' => " \tab c \n \t"]); }); test('strip new lines', function () { - assertTemplateResult('abc', '{{ source | strip_newlines }}', assigns: ['source' => "a\nb\nc"]); - assertTemplateResult('abc', '{{ source | strip_newlines }}', assigns: ['source' => "a\r\nb\nc"]); + assertTemplateResult('abc', '{{ source | strip_newlines }}', staticData: ['source' => "a\nb\nc"]); + assertTemplateResult('abc', '{{ source | strip_newlines }}', staticData: ['source' => "a\r\nb\nc"]); }); test('new lines to br', function () { - assertTemplateResult("a
\nb
\nc", '{{ source | newline_to_br }}', assigns: ['source' => "a\nb\nc"]); - assertTemplateResult("a
\nb
\nc", '{{ source | newline_to_br }}', assigns: ['source' => "a\r\nb\nc"]); + assertTemplateResult("a
\nb
\nc", '{{ source | newline_to_br }}', staticData: ['source' => "a\nb\nc"]); + assertTemplateResult("a
\nb
\nc", '{{ source | newline_to_br }}', staticData: ['source' => "a\r\nb\nc"]); }); test('plus', function () { assertTemplateResult('2', '{{ 1 | plus:1 }}'); assertTemplateResult('2.1', "{{ '1' | plus:'1.1' }}"); - assertTemplateResult('5', "{{ price | plus:'2' }}", assigns: ['price' => new NumberDrop(3)]); + assertTemplateResult('5', "{{ price | plus:'2' }}", staticData: ['price' => new NumberDrop(3)]); }); test('minus', function () { assertTemplateResult('4', '{{ 5 | minus:1 }}'); assertTemplateResult('2.3', "{{ '4.3' | minus:'2' }}"); - assertTemplateResult('5', "{{ price | minus:'2' }}", assigns: ['price' => new NumberDrop(7)]); + assertTemplateResult('5', "{{ price | minus:'2' }}", staticData: ['price' => new NumberDrop(7)]); }); test('abs', function () { @@ -762,7 +762,7 @@ test('sum without property calls to liquid', function () { $t = new ThingWithParamToLiquid; - renderTemplate('{{ foo | sum }}', assigns: ['foo' => [$t]]); + renderTemplate('{{ foo | sum }}', staticData: ['foo' => [$t]]); expect($t->value)->toBe(1); }); @@ -770,7 +770,7 @@ test('sum with property calls to liquid on property values', function () { $t = new ThingWithParamToLiquid; - renderTemplate('{{ foo | sum: "quantity" }}', assigns: ['foo' => [['quantity' => $t]]]); + renderTemplate('{{ foo | sum: "quantity" }}', staticData: ['foo' => [['quantity' => $t]]]); expect($t->value)->toBe(1); }); diff --git a/tests/Integration/StreamTest.php b/tests/Integration/StreamTest.php index 4c739ed..0282992 100644 --- a/tests/Integration/StreamTest.php +++ b/tests/Integration/StreamTest.php @@ -21,7 +21,7 @@ $stream = streamTemplate(<<<'LIQUID' {{ var }} LIQUID, - assigns: [ + staticData: [ 'var' => function () { yield 'text1'; yield 'text2'; @@ -41,7 +41,7 @@ $stream = streamTemplate(<<<'LIQUID' {{ var | join: ',' }} LIQUID, - assigns: [ + staticData: [ 'var' => function () { yield 'text1'; yield 'text2'; diff --git a/tests/Integration/Tags/AssignTagTest.php b/tests/Integration/Tags/AssignTagTest.php index 25e4c59..97b0d54 100644 --- a/tests/Integration/Tags/AssignTagTest.php +++ b/tests/Integration/Tags/AssignTagTest.php @@ -20,13 +20,13 @@ assertTemplateResult( '.foo.', '{% assign foo = values %}.{{ foo[0] }}.', - assigns: ['values' => ['foo', 'bar', 'baz']] + staticData: ['values' => ['foo', 'bar', 'baz']] ); assertTemplateResult( '.bar.', '{% assign foo = values %}.{{ foo[1] }}.', - assigns: ['values' => ['foo', 'bar', 'baz']] + staticData: ['values' => ['foo', 'bar', 'baz']] ); }); @@ -34,7 +34,7 @@ assertTemplateResult( '.bar.', '{% assign foo = values | split: "," %}.{{ foo[1] }}.', - assigns: ['values' => 'foo,bar,baz'] + staticData: ['values' => 'foo,bar,baz'] ); }); @@ -50,7 +50,7 @@ assertTemplateResult( 'result', "{% assign r = a[ 'b' ] %}{{ r }}", - assigns: ['a' => ['b' => 'result']] + staticData: ['a' => ['b' => 'result']] ); }); diff --git a/tests/Integration/Tags/EchoTagTest.php b/tests/Integration/Tags/EchoTagTest.php index 959da30..b61849f 100644 --- a/tests/Integration/Tags/EchoTagTest.php +++ b/tests/Integration/Tags/EchoTagTest.php @@ -1,5 +1,5 @@ 'bar']); + assertTemplateResult('BAR', '{%- echo variable-name | upcase -%}', staticData: ['variable-name' => 'bar']); }); diff --git a/tests/Integration/Tags/ForTagTest.php b/tests/Integration/Tags/ForTagTest.php index 1f111f7..ea1937c 100644 --- a/tests/Integration/Tags/ForTagTest.php +++ b/tests/Integration/Tags/ForTagTest.php @@ -12,22 +12,22 @@ assertTemplateResult( ' yo yo yo yo ', '{%for item in array%} yo {%endfor%}', - assigns: ['array' => [1, 2, 3, 4]] + staticData: ['array' => [1, 2, 3, 4]] ); assertTemplateResult( 'yoyo', '{%for item in array%}yo{%endfor%}', - assigns: ['array' => [1, 2]] + staticData: ['array' => [1, 2]] ); assertTemplateResult( ' yo ', '{%for item in array%} yo {%endfor%}', - assigns: ['array' => [1]] + staticData: ['array' => [1]] ); assertTemplateResult( '', '{%for item in array%}{%endfor%}', - assigns: ['array' => [1, 2]] + staticData: ['array' => [1, 2]] ); assertTemplateResult( <<<'LIQUID' @@ -44,7 +44,7 @@ yo {%endfor%} LIQUID, - assigns: ['array' => [1, 2, 3]] + staticData: ['array' => [1, 2, 3]] ); }); @@ -52,7 +52,7 @@ assertTemplateResult( '321', '{%for item in array reversed %}{{item}}{%endfor%}', - assigns: ['array' => [1, 2, 3]] + staticData: ['array' => [1, 2, 3]] ); }); @@ -62,12 +62,12 @@ '{%for item in (1..3) %} {{item}} {%endfor%}' ); - expect(fn () => renderTemplate('{% for i in (a..2) %}{% endfor %}', assigns: ['a' => [1, 2]]))->toThrow('Invalid expression type \'array\' in range expression'); + expect(fn () => renderTemplate('{% for i in (a..2) %}{% endfor %}', staticData: ['a' => [1, 2]]))->toThrow('Invalid expression type \'array\' in range expression'); assertTemplateResult( ' 0 1 2 3 ', '{% for item in (a..3) %} {{item}} {% endfor %}', - assigns: ['a' => 'invalid integer'] + staticData: ['a' => 'invalid integer'] ); }); @@ -75,17 +75,17 @@ assertTemplateResult( ' 1 2 3 ', '{%for item in (1..foobar) %} {{item}} {%endfor%}', - assigns: ['foobar' => 3] + staticData: ['foobar' => 3] ); assertTemplateResult( ' 1 2 3 ', '{%for item in (1..foobar.value) %} {{item}} {%endfor%}', - assigns: ['foobar' => ['value' => 3]] + staticData: ['foobar' => ['value' => 3]] ); assertTemplateResult( ' 1 2 3 ', '{%for item in (1..foobar.value) %} {{item}} {%endfor%}', - assigns: ['foobar' => new ThingWithValue(3)] + staticData: ['foobar' => new ThingWithValue(3)] ); }); @@ -93,53 +93,53 @@ assertTemplateResult( ' 1 2 3 ', '{%for item in array%} {{item}} {%endfor%}', - assigns: ['array' => [1, 2, 3]] + staticData: ['array' => [1, 2, 3]] ); assertTemplateResult( '123', '{%for item in array%}{{item}}{%endfor%}', - assigns: ['array' => [1, 2, 3]] + staticData: ['array' => [1, 2, 3]] ); assertTemplateResult( '123', '{% for item in array %}{{item}}{% endfor %}', - assigns: ['array' => [1, 2, 3]] + staticData: ['array' => [1, 2, 3]] ); assertTemplateResult( 'abcd', '{%for item in array%}{{item}}{%endfor%}', - assigns: ['array' => ['a', 'b', 'c', 'd']] + staticData: ['array' => ['a', 'b', 'c', 'd']] ); assertTemplateResult( 'a b c', '{%for item in array%}{{item}}{%endfor%}', - assigns: ['array' => ['a', ' ', 'b', ' ', 'c']] + staticData: ['array' => ['a', ' ', 'b', ' ', 'c']] ); assertTemplateResult( 'abc', '{%for item in array%}{{item}}{%endfor%}', - assigns: ['array' => ['a', '', 'b', '', 'c']] + staticData: ['array' => ['a', '', 'b', '', 'c']] ); }); test('for helpers', function () { $assigns = ['array' => [1, 2, 3]]; - assertTemplateResult(' 1/3 2/3 3/3 ', '{%for item in array%} {{forloop.index}}/{{forloop.length}} {%endfor%}', assigns: $assigns); - assertTemplateResult(' 1 2 3 ', '{%for item in array%} {{forloop.index}} {%endfor%}', assigns: $assigns); - assertTemplateResult(' 0 1 2 ', '{%for item in array%} {{forloop.index0}} {%endfor%}', assigns: $assigns); - assertTemplateResult(' 2 1 0 ', '{%for item in array%} {{forloop.rindex0}} {%endfor%}', assigns: $assigns); - assertTemplateResult(' 3 2 1 ', '{%for item in array%} {{forloop.rindex}} {%endfor%}', assigns: $assigns); - assertTemplateResult(' true false false ', '{%for item in array%} {{forloop.first}} {%endfor%}', assigns: $assigns); - assertTemplateResult(' false false true ', '{%for item in array%} {{forloop.last}} {%endfor%}', assigns: $assigns); + assertTemplateResult(' 1/3 2/3 3/3 ', '{%for item in array%} {{forloop.index}}/{{forloop.length}} {%endfor%}', staticData: $assigns); + assertTemplateResult(' 1 2 3 ', '{%for item in array%} {{forloop.index}} {%endfor%}', staticData: $assigns); + assertTemplateResult(' 0 1 2 ', '{%for item in array%} {{forloop.index0}} {%endfor%}', staticData: $assigns); + assertTemplateResult(' 2 1 0 ', '{%for item in array%} {{forloop.rindex0}} {%endfor%}', staticData: $assigns); + assertTemplateResult(' 3 2 1 ', '{%for item in array%} {{forloop.rindex}} {%endfor%}', staticData: $assigns); + assertTemplateResult(' true false false ', '{%for item in array%} {{forloop.first}} {%endfor%}', staticData: $assigns); + assertTemplateResult(' false false true ', '{%for item in array%} {{forloop.last}} {%endfor%}', staticData: $assigns); }); test('for and if', function () { assertTemplateResult( '+--', '{%for item in array%}{% if forloop.first %}+{% else %}-{% endif %}{%endfor%}', - assigns: ['array' => [1, 2, 3]], + staticData: ['array' => [1, 2, 3]], ); }); @@ -151,11 +151,11 @@ test('limiting', function () { $assigns = ['array' => [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]]; - assertTemplateResult('12', '{%for i in array limit:2 %}{{ i }}{%endfor%}', assigns: $assigns); - assertTemplateResult('1234', '{%for i in array limit:4 %}{{ i }}{%endfor%}', assigns: $assigns); - assertTemplateResult('3456', '{%for i in array limit:4 offset:2 %}{{ i }}{%endfor%}', assigns: $assigns); - assertTemplateResult('3456', '{%for i in array limit: 4 offset: 2 %}{{ i }}{%endfor%}', assigns: $assigns); - assertTemplateResult('3456', '{%for i in array, limit: 4, offset: 2 %}{{ i }}{%endfor%}', assigns: $assigns); + assertTemplateResult('12', '{%for i in array limit:2 %}{{ i }}{%endfor%}', staticData: $assigns); + assertTemplateResult('1234', '{%for i in array limit:4 %}{{ i }}{%endfor%}', staticData: $assigns); + assertTemplateResult('3456', '{%for i in array limit:4 offset:2 %}{{ i }}{%endfor%}', staticData: $assigns); + assertTemplateResult('3456', '{%for i in array limit: 4 offset: 2 %}{{ i }}{%endfor%}', staticData: $assigns); + assertTemplateResult('3456', '{%for i in array, limit: 4, offset: 2 %}{{ i }}{%endfor%}', staticData: $assigns); }); test('limiting with invalid limit', function () { @@ -166,7 +166,7 @@ {% endfor %} LIQUID; - expect(fn () => renderTemplate($template, assigns: $assigns))->toThrow(InvalidArgumentException::class, 'Invalid integer'); + expect(fn () => renderTemplate($template, staticData: $assigns))->toThrow(InvalidArgumentException::class, 'Invalid integer'); }); test('limiting with invalid offset', function () { @@ -177,7 +177,7 @@ {% endfor %} LIQUID; - expect(fn () => renderTemplate($template, assigns: $assigns))->toThrow(InvalidArgumentException::class, 'Invalid integer'); + expect(fn () => renderTemplate($template, staticData: $assigns))->toThrow(InvalidArgumentException::class, 'Invalid integer'); }); test('dynamic variable limiting', function () { @@ -186,17 +186,17 @@ 'limit' => 2, 'offset' => 2, ]; - assertTemplateResult('34', '{%for i in array limit: limit offset: offset %}{{ i }}{%endfor%}', assigns: $assigns); + assertTemplateResult('34', '{%for i in array limit: limit offset: offset %}{{ i }}{%endfor%}', staticData: $assigns); }); test('nested for', function () { $assigns = ['array' => [[1, 2], [3, 4], [5, 6]]]; - assertTemplateResult('123456', '{%for item in array%}{%for i in item%}{{ i }}{%endfor%}{%endfor%}', assigns: $assigns); + assertTemplateResult('123456', '{%for item in array%}{%for i in item%}{{ i }}{%endfor%}{%endfor%}', staticData: $assigns); }); test('offset only', function () { $assigns = ['array' => [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]]; - assertTemplateResult('890', '{%for i in array offset:7 %}{{ i }}{%endfor%}', assigns: $assigns); + assertTemplateResult('890', '{%for i in array offset:7 %}{{ i }}{%endfor%}', staticData: $assigns); }); test('pause resume', function () { @@ -217,7 +217,7 @@ 789 HTML; - assertTemplateResult($expected, $markup, assigns: $assigns); + assertTemplateResult($expected, $markup, staticData: $assigns); }); test('pause resume limit', function () { @@ -238,7 +238,7 @@ 7 HTML; - assertTemplateResult($expected, $markup, assigns: $assigns); + assertTemplateResult($expected, $markup, staticData: $assigns); }); test('pause resume big limit', function () { @@ -259,7 +259,7 @@ 7890 HTML; - assertTemplateResult($expected, $markup, assigns: $assigns); + assertTemplateResult($expected, $markup, staticData: $assigns); }); test('pause resume big offset', function () { @@ -280,25 +280,25 @@ HTML; - assertTemplateResult($expected, $markup, assigns: $assigns); + assertTemplateResult($expected, $markup, staticData: $assigns); }); test('for with break', function () { $assigns = ['array' => ['items' => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]]; - assertTemplateResult('', '{% for i in array.items %}{% break %}{% endfor %}', assigns: $assigns); - assertTemplateResult('1', '{% for i in array.items %}{{ i }}{% break %}{% endfor %}', assigns: $assigns); - assertTemplateResult('', '{% for i in array.items %}{% break %}{{ i }}{% endfor %}', assigns: $assigns); - assertTemplateResult('1234', '{% for i in array.items %}{{ i }}{% if i > 3 %}{% break %}{% endif %}{% endfor %}', assigns: $assigns); + assertTemplateResult('', '{% for i in array.items %}{% break %}{% endfor %}', staticData: $assigns); + assertTemplateResult('1', '{% for i in array.items %}{{ i }}{% break %}{% endfor %}', staticData: $assigns); + assertTemplateResult('', '{% for i in array.items %}{% break %}{{ i }}{% endfor %}', staticData: $assigns); + assertTemplateResult('1234', '{% for i in array.items %}{{ i }}{% if i > 3 %}{% break %}{% endif %}{% endfor %}', staticData: $assigns); assertTemplateResult( '3456', '{% for item in array %}{% for i in item %}{% if i == 1 %}{% break %}{% endif %}{{ i }}{% endfor %}{% endfor %}', - assigns: ['array' => [[1, 2], [3, 4], [5, 6]]] + staticData: ['array' => [[1, 2], [3, 4], [5, 6]]] ); assertTemplateResult( '12345', '{% for i in array.items %}{% if i == 9999 %}{% break %}{% endif %}{{ i }}{% endfor %}', - assigns: ['array' => ['items' => [1, 2, 3, 4, 5]]] + staticData: ['array' => ['items' => [1, 2, 3, 4, 5]]] ); }); @@ -320,17 +320,17 @@ test('for with continue', function () { $assigns = ['array' => ['items' => [1, 2, 3, 4, 5]]]; - assertTemplateResult('', '{% for i in array.items %}{% continue %}{% endfor %}', assigns: $assigns); - assertTemplateResult('12345', '{% for i in array.items %}{{ i }}{% continue %}{% endfor %}', assigns: $assigns); - assertTemplateResult('', '{% for i in array.items %}{% continue %}{{ i }}{% endfor %}', assigns: $assigns); - assertTemplateResult('123', '{% for i in array.items %}{% if i > 3 %}{% continue %}{% endif %}{{ i }}{% endfor %}', assigns: $assigns); - assertTemplateResult('1245', '{% for i in array.items %}{% if i == 3 %}{% continue %}{% else %}{{ i }}{% endif %}{% endfor %}', assigns: $assigns); + assertTemplateResult('', '{% for i in array.items %}{% continue %}{% endfor %}', staticData: $assigns); + assertTemplateResult('12345', '{% for i in array.items %}{{ i }}{% continue %}{% endfor %}', staticData: $assigns); + assertTemplateResult('', '{% for i in array.items %}{% continue %}{{ i }}{% endfor %}', staticData: $assigns); + assertTemplateResult('123', '{% for i in array.items %}{% if i > 3 %}{% continue %}{% endif %}{{ i }}{% endfor %}', staticData: $assigns); + assertTemplateResult('1245', '{% for i in array.items %}{% if i == 3 %}{% continue %}{% else %}{{ i }}{% endif %}{% endfor %}', staticData: $assigns); assertTemplateResult( '23456', '{% for item in array %}{% for i in item %}{% if i == 1 %}{% continue %}{% endif %}{{ i }}{% endfor %}{% endfor %}', - assigns: ['array' => [[1, 2], [3, 4], [5, 6]]] + staticData: ['array' => [[1, 2], [3, 4], [5, 6]]] ); - assertTemplateResult('12345', '{% for i in array.items %}{% if i == 9999 %}{% continue %}{% endif %}{{ i }}{% endfor %}', assigns: $assigns); + assertTemplateResult('12345', '{% for i in array.items %}{% if i == 9999 %}{% continue %}{% endif %}{{ i }}{% endfor %}', staticData: $assigns); }); test('for parentloop references parent loop', function () { @@ -350,19 +350,19 @@ }); test('spacing with variable naming in for loop', function () { - assertTemplateResult('12345', '{% for item in items %}{{item}}{% endfor %}', assigns: ['items' => [1, 2, 3, 4, 5]]); + assertTemplateResult('12345', '{% for item in items %}{{item}}{% endfor %}', staticData: ['items' => [1, 2, 3, 4, 5]]); }); test('iterate drop with no limit applied', function () { $loader = new LoaderDrop([1, 2, 3, 4, 5]); - assertTemplateResult('12345', '{% for item in items %}{{item}}{% endfor %}', assigns: ['items' => $loader]); + assertTemplateResult('12345', '{% for item in items %}{{item}}{% endfor %}', staticData: ['items' => $loader]); }); test('iterate drop with limit applied', function () { $loader = new LoaderDrop([1, 2, 3, 4, 5]); - assertTemplateResult('34', '{% for item in items offset:2 limit:2 %}{{item}}{% endfor %}', assigns: ['items' => $loader]); + assertTemplateResult('34', '{% for item in items offset:2 limit:2 %}{{item}}{% endfor %}', staticData: ['items' => $loader]); }); test('for cleans up registers', function () { diff --git a/tests/Integration/Tags/IfTagTest.php b/tests/Integration/Tags/IfTagTest.php index d972d02..f4648bc 100644 --- a/tests/Integration/Tags/IfTagTest.php +++ b/tests/Integration/Tags/IfTagTest.php @@ -46,13 +46,13 @@ test('comparison of strings containing and or or', function () { $awfulMarkup = "a == 'and' and b == 'or' and c == 'foo and bar' and d == 'bar or baz' and e == 'foo' and foo and bar"; $assigns = ['a' => 'and', 'b' => 'or', 'c' => 'foo and bar', 'd' => 'bar or baz', 'e' => 'foo', 'foo' => true, 'bar' => true]; - assertTemplateResult(' YES ', "{% if $awfulMarkup %} YES {% endif %}", assigns: $assigns); + assertTemplateResult(' YES ', "{% if $awfulMarkup %} YES {% endif %}", staticData: $assigns); }); test('comparison of expressions starting with and or or', function () { $assigns = ['order' => ['items_count' => 0], 'android' => ['name' => 'Roy']]; - assertTemplateResult('YES', "{% if android.name == 'Roy' %}YES{% endif %}", assigns: $assigns); - assertTemplateResult('YES', '{% if order.items_count == 0 %}YES{% endif %}', assigns: $assigns); + assertTemplateResult('YES', "{% if android.name == 'Roy' %}YES{% endif %}", staticData: $assigns); + assertTemplateResult('YES', '{% if order.items_count == 0 %}YES{% endif %}', staticData: $assigns); }); test('if and', function () { @@ -62,7 +62,7 @@ }); test('hash miss generates false', function () { - assertTemplateResult('', '{% if foo.bar %} NO {% endif %}', assigns: ['foo' => []]); + assertTemplateResult('', '{% if foo.bar %} NO {% endif %}', staticData: ['foo' => []]); }); test('if from variable', function () { @@ -145,7 +145,7 @@ }); test('multiple conditions', function (string $result, array $assigns) { - assertTemplateResult($result, '{% if a or b and c %}true{% else %}false{% endif %}', assigns: $assigns); + assertTemplateResult($result, '{% if a or b and c %}true{% else %}false{% endif %}', staticData: $assigns); })->with([ ['true', ['a' => true, 'b' => true, 'c' => true]], ['true', ['a' => true, 'b' => true, 'c' => false]], diff --git a/tests/Integration/Tags/IncrementTagTest.php b/tests/Integration/Tags/IncrementTagTest.php index 26c16e5..8342764 100644 --- a/tests/Integration/Tags/IncrementTagTest.php +++ b/tests/Integration/Tags/IncrementTagTest.php @@ -1,7 +1,7 @@ 10]); + assertTemplateResult('0 0', '{%increment port %} {{ port }}', staticData: ['port' => 10]); assertTemplateResult(' 0 1 1', '{{port}} {%increment port %} {%increment port%} {{port}}'); assertTemplateResult( '0|0|1|2|1', @@ -16,7 +16,7 @@ }); test('decrement', function () { - assertTemplateResult('-1 -1', '{%decrement port %} {{ port }}', assigns: ['port' => 10]); + assertTemplateResult('-1 -1', '{%decrement port %} {{ port }}', staticData: ['port' => 10]); assertTemplateResult(' -1 -2 -2', '{{port}} {%decrement port %} {%decrement port%} {{port}}'); assertTemplateResult( '0|1|2|0|3|1|0|2', diff --git a/tests/Integration/Tags/LiquidTagTest.php b/tests/Integration/Tags/LiquidTagTest.php index 51e8f3e..53e8858 100644 --- a/tests/Integration/Tags/LiquidTagTest.php +++ b/tests/Integration/Tags/LiquidTagTest.php @@ -5,7 +5,7 @@ {%- liquid echo array | join: " " -%} - LIQUID, assigns: ['array' => [1, 2, 3]]); + LIQUID, staticData: ['array' => [1, 2, 3]]); assertTemplateResult('1 2 3', <<<'LIQUID' {%- liquid @@ -16,7 +16,7 @@ endunless endfor -%} - LIQUID, assigns: ['array' => [1, 2, 3]]); + LIQUID, staticData: ['array' => [1, 2, 3]]); assertTemplateResult('2', <<<'LIQUID' {%- liquid @@ -31,7 +31,7 @@ echo "else" endcase -%} - LIQUID, assigns: ['value' => 2]); + LIQUID, staticData: ['value' => 2]); assertTemplateResult('4 8 12 6', <<<'LIQUID' {%- liquid @@ -46,7 +46,7 @@ echo " " echo double_value -%} - LIQUID, assigns: ['array' => [1, 2, 3]]); + LIQUID, staticData: ['array' => [1, 2, 3]]); assertTemplateResult('abc', <<<'LIQUID' {%- liquid echo "a" -%} diff --git a/tests/Integration/Tags/RenderTagTest.php b/tests/Integration/Tags/RenderTagTest.php index 1d8241b..ffc93df 100644 --- a/tests/Integration/Tags/RenderTagTest.php +++ b/tests/Integration/Tags/RenderTagTest.php @@ -17,11 +17,20 @@ assertTemplateResult( 'My Product', '{% render "product", inner_product: outer_product %}', - assigns: ['outer_product' => ['title' => 'My Product']], + staticData: ['outer_product' => ['title' => 'My Product']], partials: ['product' => '{{ inner_product.title }}'], ); }); +test('render passes parent variable as named arguments into inner scope', function () { + assertTemplateResult( + 'My Product', + '{% render "product", product: a %}', + data: ['a' => ['title' => 'My Product']], + partials: ['product' => '{{ product.title }}'], + ); +}); + test('render accepts literals as arguments', function () { assertTemplateResult( '123', @@ -149,7 +158,7 @@ assertTemplateResult( 'Product: Draft 151cm ', "{% render 'product' with products[0] %}", - assigns: [ + staticData: [ 'products' => [['title' => 'Draft 151cm'], ['title' => 'Element 155cm']], ], partials: [ @@ -162,7 +171,7 @@ assertTemplateResult( 'Product: Draft 151cm ', "{% render 'product_alias' with products[0] as product %}", - assigns: [ + staticData: [ 'products' => [['title' => 'Draft 151cm'], ['title' => 'Element 155cm']], ], partials: [ @@ -175,7 +184,7 @@ assertTemplateResult( 'Product: Draft 151cm Product: Element 155cm ', "{% render 'product' for products %}", - assigns: [ + staticData: [ 'products' => [['title' => 'Draft 151cm'], ['title' => 'Element 155cm']], ], partials: [ @@ -188,7 +197,7 @@ assertTemplateResult( 'Product: Draft 151cm Product: Element 155cm ', "{% render 'product_alias' for products as product %}", - assigns: [ + staticData: [ 'products' => [['title' => 'Draft 151cm'], ['title' => 'Element 155cm']], ], partials: [ @@ -201,7 +210,7 @@ assertTemplateResult( 'Product: Draft 151cm first index:1 Product: Element 155cm last index:2 ', "{% render 'product' for products %}", - assigns: [ + staticData: [ 'products' => [['title' => 'Draft 151cm'], ['title' => 'Element 155cm']], ], partials: [ @@ -214,7 +223,7 @@ assertTemplateResult( '123', "{% render 'loop' for iterator as value %}", - assigns: [ + staticData: [ 'iterator' => new \Keepsuit\Liquid\Tests\Stubs\IteratorDrop, ], partials: [ @@ -227,7 +236,7 @@ assertTemplateResult( '1', "{% render 'loop' with data as value %}", - assigns: [ + staticData: [ 'data' => 1, ], partials: [ @@ -240,7 +249,7 @@ assertTemplateResult( 'Liquid error (foo line 1): Standard error', "{% render 'foo' with errors %}", - assigns: [ + staticData: [ 'errors' => new \Keepsuit\Liquid\Tests\Stubs\ErrorDrop, ], partials: [ @@ -253,7 +262,7 @@ test('render stream', function () { $stream = streamTemplate( "{% render 'product' for products %}", - assigns: [ + staticData: [ 'products' => [['title' => 'Draft 151cm'], ['title' => 'Element 155cm']], ], partials: [ diff --git a/tests/Integration/Tags/StandardTagTest.php b/tests/Integration/Tags/StandardTagTest.php index a4b609b..b4cf542 100644 --- a/tests/Integration/Tags/StandardTagTest.php +++ b/tests/Integration/Tags/StandardTagTest.php @@ -53,7 +53,7 @@ assertTemplateResult( 'a-b:1 a-b:2', 'a-b:{{a-b}} {%assign a-b = 2 %}a-b:{{a-b}}', - assigns: ['a-b' => '1'] + staticData: ['a-b' => '1'] ); }); @@ -61,7 +61,7 @@ assertTemplateResult( 'var2: 1', '{%assign var2 = var["a:b c"].paged %}var2: {{var2}}', - assigns: ['var' => ['a:b c' => ['paged' => '1']]] + staticData: ['var' => ['a:b c' => ['paged' => '1']]] ); }); @@ -69,7 +69,7 @@ assertTemplateResult( 'content foo content foo ', '{{ var2 }}{% capture var2 %}{{ var }} foo {% endcapture %}{{ var2 }}{{ var2 }}', - assigns: ['var' => 'content'] + staticData: ['var' => 'content'] ); }); @@ -77,7 +77,7 @@ assertMatchSyntaxError( 'Liquid syntax error (line 1): Syntax Error in \'capture\' - Valid syntax: capture [var]', '{{ var2 }}{% capture %}{{ var }} foo {% endcapture %}{{ var2 }}{{ var2 }}', - assigns: ['var' => 'content'] + staticData: ['var' => 'content'] ); }); @@ -85,28 +85,28 @@ assertTemplateResult( ' its 2 ', '{% case condition %}{% when 1 %} its 1 {% when 2 %} its 2 {% endcase %}', - assigns: ['condition' => 2] + staticData: ['condition' => 2] ); assertTemplateResult( ' its 1 ', '{% case condition %}{% when 1 %} its 1 {% when 2 %} its 2 {% endcase %}', - assigns: ['condition' => 1] + staticData: ['condition' => 1] ); assertTemplateResult( '', '{% case condition %}{% when 1 %} its 1 {% when 2 %} its 2 {% endcase %}', - assigns: ['condition' => 3] + staticData: ['condition' => 3] ); assertTemplateResult( ' hit ', '{% case condition %}{% when "string here" %} hit {% endcase %}', - assigns: ['condition' => 'string here'] + staticData: ['condition' => 'string here'] ); assertTemplateResult( '', '{% case condition %}{% when "string here" %} hit {% endcase %}', - assigns: ['condition' => 'bad string here'] + staticData: ['condition' => 'bad string here'] ); }); @@ -114,17 +114,17 @@ assertTemplateResult( ' hit ', '{% case condition %}{% when 5 %} hit {% else %} else {% endcase %}', - assigns: ['condition' => 5] + staticData: ['condition' => 5] ); assertTemplateResult( ' else ', '{% case condition %}{% when 5 %} hit {% else %} else {% endcase %}', - assigns: ['condition' => 6] + staticData: ['condition' => 6] ); assertTemplateResult( ' else ', '{% case condition %} {% when 5 %} hit {% else %} else {% endcase %}', - assigns: ['condition' => 6] + staticData: ['condition' => 6] ); }); @@ -141,32 +141,32 @@ assertTemplateResult( 'else', '{% case a.size %}{% when 1 %}1{% when 2 %}2{% else %}else{% endcase %}', - assigns: ['a' => []], + staticData: ['a' => []], ); assertTemplateResult( '1', '{% case a.size %}{% when 1 %}1{% when 2 %}2{% else %}else{% endcase %}', - assigns: ['a' => [1]], + staticData: ['a' => [1]], ); assertTemplateResult( '2', '{% case a.size %}{% when 1 %}1{% when 2 %}2{% else %}else{% endcase %}', - assigns: ['a' => [1, 1]], + staticData: ['a' => [1, 1]], ); assertTemplateResult( 'else', '{% case a.size %}{% when 1 %}1{% when 2 %}2{% else %}else{% endcase %}', - assigns: ['a' => [1, 1, 1]], + staticData: ['a' => [1, 1, 1]], ); assertTemplateResult( 'else', '{% case a.size %}{% when 1 %}1{% when 2 %}2{% else %}else{% endcase %}', - assigns: ['a' => [1, 1, 1, 1]], + staticData: ['a' => [1, 1, 1, 1]], ); assertTemplateResult( 'else', '{% case a.size %}{% when 1 %}1{% when 2 %}2{% else %}else{% endcase %}', - assigns: ['a' => [1, 1, 1, 1, 1]], + staticData: ['a' => [1, 1, 1, 1, 1]], ); }); @@ -243,7 +243,7 @@ assertTemplateResult( 'result', '{% case condition %}{% when 1, 2 %} {% assign r = "result" %} {% endcase %}{{ r }}', - assigns: ['condition' => 2] + staticData: ['condition' => 2] ); }); @@ -255,7 +255,7 @@ assertTemplateResult( 'var2: var2:content', 'var2:{{var2}} {%assign var2 = var%} var2:{{var2}}', - assigns: ['var' => 'content'] + staticData: ['var' => 'content'] ); }); @@ -298,7 +298,7 @@ assertTemplateResult( 'one one two two one one', '{%cycle var1: "one", "two" %} {%cycle var2: "one", "two" %} {%cycle var1: "one", "two" %} {%cycle var2: "one", "two" %} {%cycle var1: "one", "two" %} {%cycle var2: "one", "two" %}', - assigns: ['var1' => 1, 'var2' => 2], + staticData: ['var1' => 1, 'var2' => 2], ); }); @@ -306,7 +306,7 @@ assertTemplateResult( 'array has 4 elements', 'array has {{ array.size }} elements', - assigns: ['array' => [1, 2, 3, 4]], + staticData: ['array' => [1, 2, 3, 4]], ); }); @@ -314,7 +314,7 @@ assertTemplateResult( 'hash has 4 elements', 'hash has {{ hash.size }} elements', - assigns: ['hash' => ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4]], + staticData: ['hash' => ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4]], ); }); @@ -322,7 +322,7 @@ assertTemplateResult( 'array has 4 elements', 'array has {{ array.size }} elements', - assigns: ['array' => new \Keepsuit\Liquid\Tests\Stubs\Collection([1, 2, 3, 4])], + staticData: ['array' => new \Keepsuit\Liquid\Tests\Stubs\Collection([1, 2, 3, 4])], ); }); @@ -337,13 +337,13 @@ assertTemplateResult( '123', '{%for item in array%}{%ifchanged%}{{item}}{% endifchanged %}{%endfor%}', - assigns: ['array' => [1, 1, 2, 2, 3, 3]] + staticData: ['array' => [1, 1, 2, 2, 3, 3]] ); assertTemplateResult( '1', '{%for item in array%}{%ifchanged%}{{item}}{% endifchanged %}{%endfor%}', - assigns: ['array' => [1, 1, 1, 1]] + staticData: ['array' => [1, 1, 1, 1]] ); }); diff --git a/tests/Integration/Tags/UnlessTagTest.php b/tests/Integration/Tags/UnlessTagTest.php index 6f90b91..afb52f5 100644 --- a/tests/Integration/Tags/UnlessTagTest.php +++ b/tests/Integration/Tags/UnlessTagTest.php @@ -25,7 +25,7 @@ assertTemplateResult( '23', '{% for i in choices %}{% unless i %}{{ forloop.index }}{% endunless %}{% endfor %}', - assigns: ['choices' => [1, null, false]] + staticData: ['choices' => [1, null, false]] ); }); @@ -33,6 +33,6 @@ assertTemplateResult( ' TRUE 2 3 ', '{% for i in choices %}{% unless i %} {{ forloop.index }} {% else %} TRUE {% endunless %}{% endfor %}', - assigns: ['choices' => [1, null, false]] + staticData: ['choices' => [1, null, false]] ); }); diff --git a/tests/Pest.php b/tests/Pest.php index e10ecc0..e3a69df 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -25,12 +25,14 @@ function parseTemplate( } function buildRenderContext( - array $assigns = [], + array $data = [], + array $staticData = [], array $registers = [], ?Environment $environment = null ) { $context = ($environment ?? Environment::default())->newRenderContext( - staticData: $assigns, + data: $data, + staticData: $staticData, ); foreach ($registers as $key => $value) { @@ -45,7 +47,8 @@ function buildRenderContext( */ function renderTemplate( string $template, - array $assigns = [], + array $data = [], + array $staticData = [], array $registers = [], array $partials = [], bool $renderErrors = false, @@ -61,7 +64,8 @@ function renderTemplate( $template = $environment->parseString($template); $context = buildRenderContext( - assigns: $assigns, + data: $data, + staticData: $staticData, registers: $registers, environment: $environment, ); @@ -76,7 +80,8 @@ function renderTemplate( */ function streamTemplate( string $template, - array $assigns = [], + array $data = [], + array $staticData = [], array $registers = [], array $partials = [], bool $renderErrors = false, @@ -92,7 +97,8 @@ function streamTemplate( $template = $environment->parseString($template); $context = buildRenderContext( - assigns: $assigns, + data: $data, + staticData: $staticData, registers: $registers, environment: $environment, ); @@ -103,7 +109,8 @@ function streamTemplate( function assertTemplateResult( string $expected, string $template, - array $assigns = [], + array $data = [], + array $staticData = [], array $registers = [], array $partials = [], bool $renderErrors = false, @@ -112,7 +119,8 @@ function assertTemplateResult( ): void { expect(renderTemplate( template: $template, - assigns: $assigns, + data: $data, + staticData: $staticData, registers: $registers, partials: $partials, renderErrors: $renderErrors, @@ -124,12 +132,13 @@ function assertTemplateResult( function assertMatchSyntaxError( string $error, string $template, - array $assigns = [], + array $data = [], + array $staticData = [], array $registers = [], array $partials = [], ): void { try { - renderTemplate(template: $template, assigns: $assigns, registers: $registers, partials: $partials); + renderTemplate(template: $template, data: $data, staticData: $staticData, registers: $registers, partials: $partials); } catch (SyntaxException $exception) { expect($exception->toLiquidErrorMessage())->toBe($error);