diff --git a/src/Twig/Functions/IconExtension.php b/src/Twig/Functions/IconExtension.php index 84137f1..0a65dc6 100644 --- a/src/Twig/Functions/IconExtension.php +++ b/src/Twig/Functions/IconExtension.php @@ -4,7 +4,6 @@ declare(strict_types=1); namespace Pcm\IconBundle\Twig\Functions; -use InvalidArgumentException; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; @@ -23,7 +22,7 @@ final class IconExtension extends AbstractExtension public function __construct(private array $directories, private array $palletes) { if (empty($this->directories)) - throw new InvalidArgumentException('Directories array must contain at least one path!'); + throw new \InvalidArgumentException('Directories array must contain at least one path!'); $dirsContainNonString = array_reduce($this->directories, fn($notString, $path) => $notString || !is_string($path)); @@ -32,7 +31,7 @@ final class IconExtension extends AbstractExtension throw new \TypeError('Directories array must only contain strings!'); if (empty($this->palletes)) - throw new InvalidArgumentException('Palletes array must contain at least one pallet!'); + throw new \InvalidArgumentException('Palletes array must contain at least one pallet!'); $pelletesContainNonarray = array_reduce($this->palletes, fn($notArray, $path) => $notArray || !is_array($path)); @@ -82,13 +81,14 @@ final class IconExtension extends AbstractExtension { $options = $this->mergeUserOptionsWithDefaults($userOptions); + $this->throwIfUnrecognisedOptionExists($options); + $iconFilepath = $this->findSvgFilepath($options['icon']); $rawSvgMarkup = $this->getSvgMarkup($iconFilepath); $cleanSvgMarkup = $this->cleanSvgMarkup($rawSvgMarkup); $mainPallete = $this->getPallete($options['colour']); - $colourClasses = "{$mainPallete['stroke']} {$mainPallete['fill']}"; if (null !== $options['hover']) { @@ -121,6 +121,14 @@ final class IconExtension extends AbstractExtension return array_merge(self::DEFAULT_OPTIONS, $userOptions); } + private function throwIfUnrecognisedOptionExists(array $options): void + { + foreach (array_keys($options) as $key) { + if (!key_exists($key, self::DEFAULT_OPTIONS)) + throw new \InvalidArgumentException("Unrecognised option '{$key}'!"); + } + } + private function findSvgFilepath(string $iconName): string { foreach ($this->directories as $directory) { diff --git a/tests/Twig/Functions/IconExtensionTest.php b/tests/Twig/Functions/IconExtensionTest.php index ae6f3aa..45962d7 100644 --- a/tests/Twig/Functions/IconExtensionTest.php +++ b/tests/Twig/Functions/IconExtensionTest.php @@ -299,4 +299,11 @@ class IconExtensionTest extends TestCase $this->assertMatchesRegularExpression('//', $contents); $this->assertMatchesRegularExpression('//', $contents); } + + public function testThrowsIfInvalidOptionPassed(): void + { + $this->expectException(\InvalidArgumentException::class); + $this->icon->renderIcon(['icon' => self::ICON, 'fake-key-should-throw' => null]); + + } }