[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)
{
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 @@ class Inline
}
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 @@ class Inline
{
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 @@ class Inline
++$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?
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 @@ class Parser
$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 @@ class Parser
$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 @@ class Parser
{
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 @@ class Parser
$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 @@ class Parser
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 @@ class Parser
}
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))
{
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];
}

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\Parser;
use Symfony\Components\Yaml\ParserException;
Yaml::setSpecVersion('1.1');
@ -64,7 +65,7 @@ foreach ($yamls as $yaml)
$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');
}