[Yaml] added specific exception classes

This commit is contained in:
Fabien Potencier 2010-02-11 20:11:30 +01:00
parent 97d6f76633
commit 8e81bbbb4e
5 changed files with 61 additions and 14 deletions

View File

@ -0,0 +1,23 @@
<?php
namespace Symfony\Components\Yaml;
/*
* This file is part of the symfony package.
*
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
*
* 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 <fabien.potencier@symfony-project.com>
*/
class Exception extends \Exception
{
}

View File

@ -63,7 +63,7 @@ class Inline
switch (true) switch (true)
{ {
case is_resource($value): 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): case is_object($value):
return '!!php/object:'.serialize($value); return '!!php/object:'.serialize($value);
case is_array($value): case is_array($value):
@ -171,7 +171,7 @@ class Inline
} }
else 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; $output = $evaluate ? self::evaluateScalar($output) : $output;
@ -192,7 +192,7 @@ class Inline
{ {
if (!preg_match('/'.self::REGEX_QUOTED_STRING.'/A', substr($scalar, $i), $match)) 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); $output = substr($match[0], 1, strlen($match[0]) - 2);
@ -270,7 +270,7 @@ class Inline
++$i; ++$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 @@ class Inline
} }
} }
throw new \InvalidArgumentException(sprintf('Malformed inline YAML string %s', $mapping)); throw new ParserException(sprintf('Malformed inline YAML string %s', $mapping));
} }
/** /**

View File

@ -63,7 +63,7 @@ class Parser
// tab? // tab?
if (preg_match('#^\t+#', $this->currentLine)) 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; $isRef = $isInPlace = $isProcessed = false;
@ -106,7 +106,7 @@ class Parser
$isInPlace = substr($values['value'], 1); $isInPlace = substr($values['value'], 1);
if (!array_key_exists($isInPlace, $this->refs)) 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 else
@ -127,7 +127,7 @@ class Parser
$merged = array(); $merged = array();
if (!is_array($parsed)) 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])) else if (isset($parsed[0]))
{ {
@ -136,7 +136,7 @@ class Parser
{ {
if (!is_array($parsedItem)) 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); $merged = array_merge($parsedItem, $merged);
} }
@ -233,7 +233,7 @@ class Parser
$error = 'Unable to parse line'; $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) if ($isRef)
@ -278,7 +278,7 @@ class Parser
if (!$this->isCurrentLineEmpty() && 0 == $newIndent) 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)); $data = array(substr($this->currentLine, $newIndent));
@ -314,7 +314,7 @@ class Parser
} }
else 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 @@ class Parser
if (!array_key_exists($value, $this->refs)) 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]; return $this->refs[$value];
} }

View File

@ -0,0 +1,23 @@
<?php
namespace Symfony\Components\Yaml;
/*
* This file is part of the symfony package.
*
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
*
* 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 <fabien.potencier@symfony-project.com>
*/
class ParserException extends Exception
{
}

View File

@ -12,6 +12,7 @@ require_once __DIR__.'/../../../bootstrap.php';
use Symfony\Components\Yaml\Yaml; use Symfony\Components\Yaml\Yaml;
use Symfony\Components\Yaml\Parser; use Symfony\Components\Yaml\Parser;
use Symfony\Components\Yaml\ParserException;
Yaml::setSpecVersion('1.1'); Yaml::setSpecVersion('1.1');
@ -64,7 +65,7 @@ foreach ($yamls as $yaml)
$content = $parser->parse($yaml); $content = $parser->parse($yaml);
$t->fail('YAML files must not contain tabs'); $t->fail('YAML files must not contain tabs');
} }
catch (InvalidArgumentException $e) catch (ParserException $e)
{ {
$t->pass('YAML files must not contain tabs'); $t->pass('YAML files must not contain tabs');
} }