assertEquals($body, $node->getNode('body')); $this->assertEquals($arguments, $node->getNode('arguments')); $this->assertEquals('foo', $node->getAttribute('name')); } public static function provideTests(): iterable { $arguments = new ArrayExpression([ new LocalVariable('foo', 1), new ConstantExpression(null, 1), new LocalVariable('bar', 1), new ConstantExpression('Foo', 1), new LocalVariable('_underscore', 1), new ConstantExpression(null, 1), ], 1); $body = new BodyNode([new TextNode('foo', 1)]); $node = new MacroNode('foo', $body, $arguments, 1); yield 'with use_yield = true' => [$node, <<macros; \$context = [ "foo" => \$foo, "bar" => \$bar, "_underscore" => \$_underscore, "varargs" => \$varargs, ] + \$this->env->getGlobals(); \$blocks = []; return ('' === \$tmp = implode('', iterator_to_array((function () use (&\$context, \$macros, \$blocks) { yield "foo"; yield from []; })(), false))) ? '' : new Markup(\$tmp, \$this->env->getCharset()); } EOF, new Environment(new ArrayLoader(), ['use_yield' => true]), ]; yield 'with use_yield = false' => [$node, <<macros; \$context = [ "foo" => \$foo, "bar" => \$bar, "_underscore" => \$_underscore, "varargs" => \$varargs, ] + \$this->env->getGlobals(); \$blocks = []; return ('' === \$tmp = \\Twig\\Extension\\CoreExtension::captureOutput((function () use (&\$context, \$macros, \$blocks) { yield "foo"; yield from []; })())) ? '' : new Markup(\$tmp, \$this->env->getCharset()); } EOF, new Environment(new ArrayLoader(), ['use_yield' => false]), ]; } }