From 8e81bbbb4eb0a12349161b217ec6ac328f52718b Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Thu, 11 Feb 2010 20:11:30 +0100 Subject: [PATCH] [Yaml] added specific exception classes --- src/Symfony/Components/Yaml/Exception.php | 23 +++++++++++++++++++ src/Symfony/Components/Yaml/Inline.php | 10 ++++---- src/Symfony/Components/Yaml/Parser.php | 16 ++++++------- .../Components/Yaml/ParserException.php | 23 +++++++++++++++++++ .../Symfony/Components/Yaml/ParserTest.php | 3 ++- 5 files changed, 61 insertions(+), 14 deletions(-) create mode 100644 src/Symfony/Components/Yaml/Exception.php create mode 100644 src/Symfony/Components/Yaml/ParserException.php diff --git a/src/Symfony/Components/Yaml/Exception.php b/src/Symfony/Components/Yaml/Exception.php new file mode 100644 index 000000000000..49cb7949ee6d --- /dev/null +++ b/src/Symfony/Components/Yaml/Exception.php @@ -0,0 +1,23 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Exception class used by all exceptions thrown by the component. + * + * @package symfony + * @subpackage yaml + * @author Fabien Potencier + */ +class Exception extends \Exception +{ +} diff --git a/src/Symfony/Components/Yaml/Inline.php b/src/Symfony/Components/Yaml/Inline.php index c78a5f1e65f6..5abb3e002c31 100644 --- a/src/Symfony/Components/Yaml/Inline.php +++ b/src/Symfony/Components/Yaml/Inline.php @@ -63,7 +63,7 @@ static public function dump($value) switch (true) { case is_resource($value): - throw new \InvalidArgumentException('Unable to dump PHP resources in a YAML file.'); + throw new Exception('Unable to dump PHP resources in a YAML file.'); case is_object($value): return '!!php/object:'.serialize($value); case is_array($value): @@ -171,7 +171,7 @@ static public function parseScalar($scalar, $delimiters = null, $stringDelimiter } else { - throw new \InvalidArgumentException(sprintf('Malformed inline YAML string (%s).', $scalar)); + throw new ParserException(sprintf('Malformed inline YAML string (%s).', $scalar)); } $output = $evaluate ? self::evaluateScalar($output) : $output; @@ -192,7 +192,7 @@ static protected function parseQuotedScalar($scalar, &$i) { if (!preg_match('/'.self::REGEX_QUOTED_STRING.'/A', substr($scalar, $i), $match)) { - throw new \InvalidArgumentException(sprintf('Malformed inline YAML string (%s).', substr($scalar, $i))); + throw new ParserException(sprintf('Malformed inline YAML string (%s).', substr($scalar, $i))); } $output = substr($match[0], 1, strlen($match[0]) - 2); @@ -270,7 +270,7 @@ static protected function parseSequence($sequence, &$i = 0) ++$i; } - throw new \InvalidArgumentException(sprintf('Malformed inline YAML string %s', $sequence)); + throw new ParserException(sprintf('Malformed inline YAML string %s', $sequence)); } /** @@ -337,7 +337,7 @@ static protected function parseMapping($mapping, &$i = 0) } } - throw new \InvalidArgumentException(sprintf('Malformed inline YAML string %s', $mapping)); + throw new ParserException(sprintf('Malformed inline YAML string %s', $mapping)); } /** diff --git a/src/Symfony/Components/Yaml/Parser.php b/src/Symfony/Components/Yaml/Parser.php index bd167db28c28..c9720f7ccabb 100644 --- a/src/Symfony/Components/Yaml/Parser.php +++ b/src/Symfony/Components/Yaml/Parser.php @@ -63,7 +63,7 @@ public function parse($value) // tab? if (preg_match('#^\t+#', $this->currentLine)) { - throw new \InvalidArgumentException(sprintf('A YAML file cannot contain tabs as indentation at line %d (%s).', $this->getRealCurrentLineNb() + 1, $this->currentLine)); + throw new ParserException(sprintf('A YAML file cannot contain tabs as indentation at line %d (%s).', $this->getRealCurrentLineNb() + 1, $this->currentLine)); } $isRef = $isInPlace = $isProcessed = false; @@ -106,7 +106,7 @@ public function parse($value) $isInPlace = substr($values['value'], 1); if (!array_key_exists($isInPlace, $this->refs)) { - throw new \InvalidArgumentException(sprintf('Reference "%s" does not exist at line %s (%s).', $isInPlace, $this->getRealCurrentLineNb() + 1, $this->currentLine)); + throw new ParserException(sprintf('Reference "%s" does not exist at line %s (%s).', $isInPlace, $this->getRealCurrentLineNb() + 1, $this->currentLine)); } } else @@ -127,7 +127,7 @@ public function parse($value) $merged = array(); if (!is_array($parsed)) { - throw new \InvalidArgumentException(sprintf("YAML merge keys used with a scalar value instead of an array at line %s (%s)", $this->getRealCurrentLineNb() + 1, $this->currentLine)); + throw new ParserException(sprintf("YAML merge keys used with a scalar value instead of an array at line %s (%s)", $this->getRealCurrentLineNb() + 1, $this->currentLine)); } else if (isset($parsed[0])) { @@ -136,7 +136,7 @@ public function parse($value) { if (!is_array($parsedItem)) { - throw new \InvalidArgumentException(sprintf("Merge items must be arrays at line %s (%s).", $this->getRealCurrentLineNb() + 1, $parsedItem)); + throw new ParserException(sprintf("Merge items must be arrays at line %s (%s).", $this->getRealCurrentLineNb() + 1, $parsedItem)); } $merged = array_merge($parsedItem, $merged); } @@ -233,7 +233,7 @@ public function parse($value) $error = 'Unable to parse line'; } - throw new \InvalidArgumentException(sprintf('%s %d (%s).', $error, $this->getRealCurrentLineNb() + 1, $this->currentLine)); + throw new ParserException(sprintf('%s %d (%s).', $error, $this->getRealCurrentLineNb() + 1, $this->currentLine)); } if ($isRef) @@ -278,7 +278,7 @@ protected function getNextEmbedBlock() if (!$this->isCurrentLineEmpty() && 0 == $newIndent) { - throw new \InvalidArgumentException(sprintf('Indentation problem at line %d (%s)', $this->getRealCurrentLineNb() + 1, $this->currentLine)); + throw new ParserException(sprintf('Indentation problem at line %d (%s)', $this->getRealCurrentLineNb() + 1, $this->currentLine)); } $data = array(substr($this->currentLine, $newIndent)); @@ -314,7 +314,7 @@ protected function getNextEmbedBlock() } else { - throw new \InvalidArgumentException(sprintf('Indentation problem at line %d (%s)', $this->getRealCurrentLineNb() + 1, $this->currentLine)); + throw new ParserException(sprintf('Indentation problem at line %d (%s)', $this->getRealCurrentLineNb() + 1, $this->currentLine)); } } @@ -366,7 +366,7 @@ protected function parseValue($value) if (!array_key_exists($value, $this->refs)) { - throw new \InvalidArgumentException(sprintf('Reference "%s" does not exist (%s).', $value, $this->currentLine)); + throw new ParserException(sprintf('Reference "%s" does not exist (%s).', $value, $this->currentLine)); } return $this->refs[$value]; } diff --git a/src/Symfony/Components/Yaml/ParserException.php b/src/Symfony/Components/Yaml/ParserException.php new file mode 100644 index 000000000000..5ba22291de9e --- /dev/null +++ b/src/Symfony/Components/Yaml/ParserException.php @@ -0,0 +1,23 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Exception class used by all exceptions thrown by the component. + * + * @package symfony + * @subpackage yaml + * @author Fabien Potencier + */ +class ParserException extends Exception +{ +} diff --git a/tests/unit/Symfony/Components/Yaml/ParserTest.php b/tests/unit/Symfony/Components/Yaml/ParserTest.php index 200dd5c6d849..a7ab9e4035bd 100644 --- a/tests/unit/Symfony/Components/Yaml/ParserTest.php +++ b/tests/unit/Symfony/Components/Yaml/ParserTest.php @@ -12,6 +12,7 @@ use Symfony\Components\Yaml\Yaml; use Symfony\Components\Yaml\Parser; +use Symfony\Components\Yaml\ParserException; Yaml::setSpecVersion('1.1'); @@ -64,7 +65,7 @@ $content = $parser->parse($yaml); $t->fail('YAML files must not contain tabs'); } - catch (InvalidArgumentException $e) + catch (ParserException $e) { $t->pass('YAML files must not contain tabs'); }