Переглянути джерело

[Yaml] added specific exception classes

Fabien Potencier 15 роки тому
батько
коміт
8e81bbbb4e

+ 23 - 0
src/Symfony/Components/Yaml/Exception.php

@@ -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
+{
+}

+ 5 - 5
src/Symfony/Components/Yaml/Inline.php

@@ -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));
   }
 
   /**

+ 8 - 8
src/Symfony/Components/Yaml/Parser.php

@@ -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];
     }

+ 23 - 0
src/Symfony/Components/Yaml/ParserException.php

@@ -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
+{
+}

+ 2 - 1
tests/unit/Symfony/Components/Yaml/ParserTest.php

@@ -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');
   }