assertEquals($body, $node->getNode('body')); $this->assertEquals($arguments, $node->getNode('arguments')); $this->assertEquals('foo', $node->getAttribute('name')); } public function getTests() { $tests = []; $arguments = new Node([ 'foo' => new ConstantExpression(null, 1), 'bar' => new ConstantExpression('Foo', 1), ], [], 1); $body = new TextNode('foo', 1); $node = new MacroNode('foo', $body, $arguments, 1); if ($this->getEnvironment()->useYield()) { $text[] = [$node, <<macros; \$context = \$this->env->mergeGlobals([ "foo" => \$__foo__, "bar" => \$__bar__, "varargs" => \$__varargs__, ]); \$blocks = []; return new Markup(implode('', iterator_to_array((function () use (\$context, \$macros, \$blocks) { yield "foo"; })() ?? new \EmptyIterator())), \$this->env->getCharset()); } EOF , new Environment(new ArrayLoader()), ]; } else { $body = new TextNode('foo', 1); $node = new MacroNode('foo', $body, $arguments, 1); $tests[] = [$node, <<macros; \$context = \$this->env->mergeGlobals([ "foo" => \$__foo__, "bar" => \$__bar__, "varargs" => \$__varargs__, ]); \$blocks = []; return (function () use (&\$context, \$macros) { ob_start(function () { return ''; }); try { echo "foo"; return ('' === \$tmp = ob_get_contents()) ? '' : new Markup(\$tmp, \$this->env->getCharset()); } finally { ob_end_clean(); } })(); } EOF , new Environment(new ArrayLoader()), ]; } return $tests; } }