getName() != $name) { continue; } $this->assertEquals($callback, $function->getCallable()); return; } $this->fail(sprintf('Filter %s not found', $name)); } /** * Assert that a twig function or filter was registered * * @param TwigFunction[]|TwigFilter[] $functions * @throws Exception */ protected function assertExtensionExists( string $name, mixed $callback, array $functions, array $options = [] ): void { foreach ($functions as $function) { if ($function->getName() != $name) { continue; } $this->assertEquals($callback, $function->getCallable()); if (isset($options['is_save'])) { /** @var TwigNode|MockObject $twigNode */ $twigNode = $this->createMock(TwigNode::class); $this->assertArraySubset($options['is_save'], $function->getSafe($twigNode)); } return; } $this->fail(sprintf('Function %s not found', $name)); } /** * Assert that a global exists * * @param mixed[] $globals * @throws Exception */ protected function assertGlobalsExists(string $name, mixed $value, array $globals): void { if (array_key_exists($name, $globals)) { $this->assertArraySubset([$name => $value], $globals); return; } $this->fail(sprintf('Global %s not found', $name)); } }