Browse Source

[Form] Changed value transformers to throw UnexpectedTypeException instances

Bernhard Schussek 14 years ago
parent
commit
acdd5c06de
22 changed files with 84 additions and 46 deletions
  1. 3 3
      src/Symfony/Component/Form/ChoiceField.php
  2. 1 1
      src/Symfony/Component/Form/CollectionField.php
  3. 4 0
      src/Symfony/Component/Form/Exception/UnexpectedTypeException.php
  4. 1 1
      src/Symfony/Component/Form/FieldGroup.php
  5. 4 2
      src/Symfony/Component/Form/ValueTransformer/BooleanToStringTransformer.php
  6. 3 3
      src/Symfony/Component/Form/ValueTransformer/DateTimeToArrayTransformer.php
  7. 3 3
      src/Symfony/Component/Form/ValueTransformer/DateTimeToLocalizedStringTransformer.php
  8. 7 3
      src/Symfony/Component/Form/ValueTransformer/DateTimeToStringTransformer.php
  9. 6 2
      src/Symfony/Component/Form/ValueTransformer/DateTimeToTimestampTransformer.php
  10. 2 2
      src/Symfony/Component/Form/ValueTransformer/MoneyToLocalizedStringTransformer.php
  11. 3 3
      src/Symfony/Component/Form/ValueTransformer/NumberToLocalizedStringTransformer.php
  12. 3 3
      src/Symfony/Component/Form/ValueTransformer/PercentToLocalizedStringTransformer.php
  13. 2 2
      src/Symfony/Component/Form/ValueTransformer/ValueTransformerInterface.php
  14. 2 2
      tests/Symfony/Tests/Component/Form/ChoiceFieldTest.php
  15. 2 2
      tests/Symfony/Tests/Component/Form/ValueTransformer/BooleanToStringTransformerTest.php
  16. 2 2
      tests/Symfony/Tests/Component/Form/ValueTransformer/DateTimeToArrayTransformerTest.php
  17. 2 2
      tests/Symfony/Tests/Component/Form/ValueTransformer/DateTimeToLocalizedStringTransformerTest.php
  18. 13 2
      tests/Symfony/Tests/Component/Form/ValueTransformer/DateTimeToStringTransformerTest.php
  19. 4 2
      tests/Symfony/Tests/Component/Form/ValueTransformer/DateTimeToTimestampTransformerTest.php
  20. 13 2
      tests/Symfony/Tests/Component/Form/ValueTransformer/MoneyToLocalizedStringTransformerTest.php
  21. 2 2
      tests/Symfony/Tests/Component/Form/ValueTransformer/NumberToLocalizedStringTransformerTest.php
  22. 2 2
      tests/Symfony/Tests/Component/Form/ValueTransformer/PercentToLocalizedStringTransformerTest.php

+ 3 - 3
src/Symfony/Component/Form/ChoiceField.php

@@ -11,7 +11,7 @@ namespace Symfony\Component\Form;
  * with this source code in the file LICENSE.
  */
 
-use Symfony\Component\Form\Exception\UnexpectedTypeException;
+use Symfony\Component\Form\Exception\InvalidOptionsException;
 
 /**
  * Lets the user select between different choices
@@ -39,11 +39,11 @@ class ChoiceField extends HybridField
         $this->addOption('empty_value', '');
 
         if (!is_array($this->getOption('choices'))) {
-            throw new UnexpectedTypeException('The choices option must be an array');
+            throw new InvalidOptionsException('The choices option must be an array', array('choices'));
         }
 
         if (!is_array($this->getOption('preferred_choices'))) {
-            throw new UnexpectedTypeException('The preferred_choices option must be an array');
+            throw new InvalidOptionsException('The preferred_choices option must be an array', array('preferred_choices'));
         }
 
         if (count($this->getOption('preferred_choices')) > 0) {

+ 1 - 1
src/Symfony/Component/Form/CollectionField.php

@@ -60,7 +60,7 @@ class CollectionField extends FieldGroup
     public function setData($collection)
     {
         if (!is_array($collection) && !$collection instanceof \Traversable) {
-            throw new UnexpectedTypeException('The data passed to the CollectionField must be an array or a Traversable');
+            throw new UnexpectedTypeException($collection, 'array or \Traversable');
         }
 
         foreach ($this as $name => $field) {

+ 4 - 0
src/Symfony/Component/Form/Exception/UnexpectedTypeException.php

@@ -13,4 +13,8 @@ namespace Symfony\Component\Form\Exception;
 
 class UnexpectedTypeException extends FormException
 {
+    public function __construct($value, $expectedType)
+    {
+        parent::__construct(sprintf('Expected argument of type %s, %s given', $expectedType, gettype($value)));
+    }
 }

+ 1 - 1
src/Symfony/Component/Form/FieldGroup.php

@@ -281,7 +281,7 @@ class FieldGroup extends Field implements \IteratorAggregate, FieldGroupInterfac
         }
 
         if (!is_array($taintedData)) {
-            throw new UnexpectedTypeException('You must pass an array parameter to the bind() method');
+            throw new UnexpectedTypeException($taintedData, 'array');
         }
 
         foreach ($this->fields as $key => $field) {

+ 4 - 2
src/Symfony/Component/Form/ValueTransformer/BooleanToStringTransformer.php

@@ -11,6 +11,8 @@ namespace Symfony\Component\Form\ValueTransformer;
  * with this source code in the file LICENSE.
  */
 
+use Symfony\Component\Form\Exception\UnexpectedTypeException;
+
 /**
  * Transforms between a boolean and a string.
  *
@@ -32,7 +34,7 @@ class BooleanToStringTransformer extends BaseValueTransformer
         }
 
         if (!is_bool($value)) {
-            throw new \InvalidArgumentException(sprintf('Expected argument of type boolean but got %s.', gettype($value)));
+            throw new UnexpectedTypeException($value, 'boolean');
         }
 
         return true === $value ? '1' : '';
@@ -47,7 +49,7 @@ class BooleanToStringTransformer extends BaseValueTransformer
     public function reverseTransform($value, $originalValue)
     {
         if (!is_string($value)) {
-            throw new \InvalidArgumentException(sprintf('Expected argument of type string but got %s.', gettype($value)));
+            throw new UnexpectedTypeException($value, 'string');
         }
 
         return '' !== $value;

+ 3 - 3
src/Symfony/Component/Form/ValueTransformer/DateTimeToArrayTransformer.php

@@ -11,7 +11,7 @@ namespace Symfony\Component\Form\ValueTransformer;
  * with this source code in the file LICENSE.
  */
 
-use \Symfony\Component\Form\ValueTransformer\ValueTransformerException;
+use Symfony\Component\Form\Exception\UnexpectedTypeException;
 
 /**
  * Transforms between a normalized time and a localized time string/array.
@@ -61,7 +61,7 @@ class DateTimeToArrayTransformer extends BaseDateTimeTransformer
         }
 
         if (!$dateTime instanceof \DateTime) {
-            throw new \InvalidArgumentException('Expected value of type \DateTime');
+            throw new UnexpectedTypeException($dateTime, '\DateTime');
         }
 
         $inputTimezone = $this->getOption('input_timezone');
@@ -106,7 +106,7 @@ class DateTimeToArrayTransformer extends BaseDateTimeTransformer
         $outputTimezone = $this->getOption('output_timezone');
 
         if (!is_array($value)) {
-            throw new \InvalidArgumentException(sprintf('Expected argument of type array, %s given', gettype($value)));
+            throw new UnexpectedTypeException($value, 'array');
         }
 
         if (implode('', $value) === '') {

+ 3 - 3
src/Symfony/Component/Form/ValueTransformer/DateTimeToLocalizedStringTransformer.php

@@ -11,7 +11,7 @@ namespace Symfony\Component\Form\ValueTransformer;
  * with this source code in the file LICENSE.
  */
 
-use \Symfony\Component\Form\ValueTransformer\ValueTransformerException;
+use Symfony\Component\Form\Exception\UnexpectedTypeException;
 
 /**
  * Transforms between a normalized time and a localized time string
@@ -62,7 +62,7 @@ class DateTimeToLocalizedStringTransformer extends BaseDateTimeTransformer
         }
 
         if (!$dateTime instanceof \DateTime) {
-            throw new \InvalidArgumentException('Expected value of type \DateTime');
+            throw new UnexpectedTypeException($dateTime, '\DateTime');
         }
 
         $inputTimezone = $this->getOption('input_timezone');
@@ -92,7 +92,7 @@ class DateTimeToLocalizedStringTransformer extends BaseDateTimeTransformer
         $inputTimezone = $this->getOption('input_timezone');
 
         if (!is_string($value)) {
-            throw new \InvalidArgumentException(sprintf('Expected argument of type string, %s given', gettype($value)));
+            throw new UnexpectedTypeException($value, 'string');
         }
 
         if ('' === $value) {

+ 7 - 3
src/Symfony/Component/Form/ValueTransformer/DateTimeToStringTransformer.php

@@ -11,7 +11,7 @@ namespace Symfony\Component\Form\ValueTransformer;
  * with this source code in the file LICENSE.
  */
 
-use \Symfony\Component\Form\ValueTransformer\ValueTransformerException;
+use Symfony\Component\Form\Exception\UnexpectedTypeException;
 
 /**
  * Transforms between a date string and a DateTime object
@@ -47,7 +47,7 @@ class DateTimeToStringTransformer extends BaseValueTransformer
         }
 
         if (!$value instanceof \DateTime) {
-            throw new \InvalidArgumentException('Expected value of type \DateTime');
+            throw new UnexpectedTypeException($value, '\DateTime');
         }
 
         $value->setTimezone(new \DateTimeZone($this->getOption('output_timezone')));
@@ -63,10 +63,14 @@ class DateTimeToStringTransformer extends BaseValueTransformer
      */
     public function reverseTransform($value, $originalValue)
     {
-        if ('' === $value) {
+        if (empty($value)) {
             return null;
         }
 
+        if (!is_string($value)) {
+            throw new UnexpectedTypeException($value, 'string');
+        }
+
         $outputTimezone = $this->getOption('output_timezone');
         $inputTimezone = $this->getOption('input_timezone');
 

+ 6 - 2
src/Symfony/Component/Form/ValueTransformer/DateTimeToTimestampTransformer.php

@@ -11,7 +11,7 @@ namespace Symfony\Component\Form\ValueTransformer;
  * with this source code in the file LICENSE.
  */
 
-use \Symfony\Component\Form\ValueTransformer\ValueTransformerException;
+use Symfony\Component\Form\Exception\UnexpectedTypeException;
 
 /**
  * Transforms between a timestamp and a DateTime object
@@ -45,7 +45,7 @@ class DateTimeToTimestampTransformer extends BaseValueTransformer
         }
 
         if (!$value instanceof \DateTime) {
-            throw new \InvalidArgumentException('Expected value of type \DateTime');
+            throw new UnexpectedTypeException($value, '\DateTime');
         }
 
         $value->setTimezone(new \DateTimeZone($this->getOption('output_timezone')));
@@ -65,6 +65,10 @@ class DateTimeToTimestampTransformer extends BaseValueTransformer
             return null;
         }
 
+        if (!is_numeric($value)) {
+            throw new UnexpectedTypeException($value, 'numeric');
+        }
+
         $outputTimezone = $this->getOption('output_timezone');
         $inputTimezone = $this->getOption('input_timezone');
 

+ 2 - 2
src/Symfony/Component/Form/ValueTransformer/MoneyToLocalizedStringTransformer.php

@@ -11,7 +11,7 @@ namespace Symfony\Component\Form\ValueTransformer;
  * with this source code in the file LICENSE.
  */
 
-use \Symfony\Component\Form\ValueTransformer\ValueTransformerException;
+use Symfony\Component\Form\Exception\UnexpectedTypeException;
 
 /**
  * Transforms between a normalized format and a localized money string.
@@ -43,7 +43,7 @@ class MoneyToLocalizedStringTransformer extends NumberToLocalizedStringTransform
     {
         if (null !== $value) {
             if (!is_numeric($value)) {
-                throw new \InvalidArgumentException(sprintf('Numeric argument expected, %s given', gettype($value)));
+                throw new UnexpectedTypeException($value, 'numeric');
             }
 
             $value /= $this->getOption('divisor');

+ 3 - 3
src/Symfony/Component/Form/ValueTransformer/NumberToLocalizedStringTransformer.php

@@ -11,7 +11,7 @@ namespace Symfony\Component\Form\ValueTransformer;
  * with this source code in the file LICENSE.
  */
 
-use \Symfony\Component\Form\ValueTransformer\ValueTransformerException;
+use Symfony\Component\Form\Exception\UnexpectedTypeException;
 
 /**
  * Transforms between a number type and a localized number with grouping
@@ -55,7 +55,7 @@ class NumberToLocalizedStringTransformer extends BaseValueTransformer
         }
 
         if (!is_numeric($value)) {
-            throw new \InvalidArgumentException(sprintf('Numeric argument expected, %s given', gettype($value)));
+            throw new UnexpectedTypeException($value, 'numeric');
         }
 
         $formatter = $this->getNumberFormatter();
@@ -76,7 +76,7 @@ class NumberToLocalizedStringTransformer extends BaseValueTransformer
     public function reverseTransform($value, $originalValue)
     {
         if (!is_string($value)) {
-            throw new \InvalidArgumentException(sprintf('Expected argument of type string, %s given', gettype($value)));
+            throw new UnexpectedTypeException($value, 'string');
         }
 
         if ('' === $value) {

+ 3 - 3
src/Symfony/Component/Form/ValueTransformer/PercentToLocalizedStringTransformer.php

@@ -11,7 +11,7 @@ namespace Symfony\Component\Form\ValueTransformer;
  * with this source code in the file LICENSE.
  */
 
-use \Symfony\Component\Form\ValueTransformer\ValueTransformerException;
+use Symfony\Component\Form\Exception\UnexpectedTypeException;
 
 /**
  * Transforms between a normalized format (integer or float) and a percentage value.
@@ -57,7 +57,7 @@ class PercentToLocalizedStringTransformer extends BaseValueTransformer
         }
 
         if (!is_numeric($value)) {
-            throw new \InvalidArgumentException(sprintf('Numeric argument expected, %s given', gettype($value)));
+            throw new UnexpectedTypeException($value, 'numeric');
         }
 
         if (self::FRACTIONAL == $this->getOption('type')) {
@@ -84,7 +84,7 @@ class PercentToLocalizedStringTransformer extends BaseValueTransformer
     public function reverseTransform($value, $originalValue)
     {
         if (!is_string($value)) {
-            throw new \InvalidArgumentException(sprintf('Expected argument of type string, %s given', gettype($value)));
+            throw new UnexpectedTypeException($value, 'string');
         }
 
         if ('' === $value) {

+ 2 - 2
src/Symfony/Component/Form/ValueTransformer/ValueTransformerInterface.php

@@ -43,7 +43,7 @@ interface ValueTransformerInterface extends Localizable
      *
      * @param  mixed $value               The value in the original representation
      * @return mixed                      The value in the transformed representation
-     * @throws InvalidArgumentException   when the argument is no string
+     * @throws UnexpectedTypeException    when the argument is no string
      * @throws ValueTransformerException  when the transformation fails
      */
     function transform($value);
@@ -69,7 +69,7 @@ interface ValueTransformerInterface extends Localizable
      * @param  mixed $value               The value in the transformed representation
      * @param  mixed $originalValue       The original value from the datasource that is about to be overwritten by the new value.
      * @return mixed                      The value in the original representation
-     * @throws InvalidArgumentException   when the argument is not of the
+     * @throws UnexpectedTypeException    when the argument is not of the
      *                                    expected type
      * @throws ValueTransformerException  when the transformation fails
      */

+ 2 - 2
tests/Symfony/Tests/Component/Form/ChoiceFieldTest.php

@@ -38,7 +38,7 @@ class ChoiceFieldTest extends \PHPUnit_Framework_TestCase
     );
 
     /**
-     * @expectedException Symfony\Component\Form\Exception\UnexpectedTypeException
+     * @expectedException Symfony\Component\Form\Exception\InvalidOptionsException
      */
     public function testConfigureChoicesWithNonArray()
     {
@@ -48,7 +48,7 @@ class ChoiceFieldTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException Symfony\Component\Form\Exception\UnexpectedTypeException
+     * @expectedException Symfony\Component\Form\Exception\InvalidOptionsException
      */
     public function testConfigurePreferredChoicesWithNonArray()
     {

+ 2 - 2
tests/Symfony/Tests/Component/Form/ValueTransformer/BooleanToStringTransformerTest.php

@@ -22,14 +22,14 @@ class BooleanToStringTransformerTest extends \PHPUnit_Framework_TestCase
 
     public function testTransformExpectsBoolean()
     {
-        $this->setExpectedException('\InvalidArgumentException');
+        $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException');
 
         $this->transformer->transform('1');
     }
 
     public function testReverseTransformExpectsString()
     {
-        $this->setExpectedException('\InvalidArgumentException');
+        $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException');
 
         $this->transformer->reverseTransform(1, null);
     }

+ 2 - 2
tests/Symfony/Tests/Component/Form/ValueTransformer/DateTimeToArrayTransformerTest.php

@@ -115,7 +115,7 @@ class DateTimeToArrayTransformerTest extends DateTimeTestCase
     {
         $transformer = new DateTimeToArrayTransformer();
 
-        $this->setExpectedException('\InvalidArgumentException');
+        $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException');
 
         $transformer->reverseTransform('12345', null);
     }
@@ -212,7 +212,7 @@ class DateTimeToArrayTransformerTest extends DateTimeTestCase
     {
         $transformer = new DateTimeToArrayTransformer();
 
-        $this->setExpectedException('\InvalidArgumentException');
+        $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException');
 
         $transformer->reverseTransform('12345', null);
     }

+ 2 - 2
tests/Symfony/Tests/Component/Form/ValueTransformer/DateTimeToLocalizedStringTransformerTest.php

@@ -155,7 +155,7 @@ class DateTimeToLocalizedStringTransformerTest extends DateTimeTestCase
     {
         $transformer = new DateTimeToLocalizedStringTransformer();
 
-        $this->setExpectedException('\InvalidArgumentException');
+        $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException');
 
         $transformer->transform('2010-01-01');
     }
@@ -294,7 +294,7 @@ class DateTimeToLocalizedStringTransformerTest extends DateTimeTestCase
     {
         $transformer = new DateTimeToLocalizedStringTransformer();
 
-        $this->setExpectedException('\InvalidArgumentException');
+        $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException');
 
         $transformer->reverseTransform(12345, null);
     }

+ 13 - 2
tests/Symfony/Tests/Component/Form/ValueTransformer/DateTimeToStringTransformerTest.php

@@ -49,7 +49,8 @@ class DateTimeToStringTransformerTest extends DateTimeTestCase
     {
         $transformer = new DateTimeToStringTransformer();
 
-        $this->setExpectedException('\InvalidArgumentException');
+        $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException');
+
         $transformer->transform('1234');
     }
 
@@ -87,11 +88,21 @@ class DateTimeToStringTransformerTest extends DateTimeTestCase
         $this->assertDateTimeEquals($output, $reverseTransformer->reverseTransform($input, null));
     }
 
-    public function testReverseTransformExpectsValidString()
+    public function testReverseTransformExpectsString()
+    {
+        $reverseTransformer = new DateTimeToStringTransformer();
+
+        $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException');
+
+        $reverseTransformer->reverseTransform(1234, null);
+    }
+
+    public function testReverseTransformExpectsValidDateString()
     {
         $reverseTransformer = new DateTimeToStringTransformer();
 
         $this->setExpectedException('\InvalidArgumentException');
+
         $reverseTransformer->reverseTransform('2010-2010-2010', null);
     }
 }

+ 4 - 2
tests/Symfony/Tests/Component/Form/ValueTransformer/DateTimeToTimestampTransformerTest.php

@@ -63,7 +63,8 @@ class DateTimeToTimestampTransformerTest extends DateTimeTestCase
     {
         $transformer = new DateTimeToTimestampTransformer();
 
-        $this->setExpectedException('\InvalidArgumentException');
+        $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException');
+
         $transformer->transform('1234');
     }
 
@@ -105,7 +106,8 @@ class DateTimeToTimestampTransformerTest extends DateTimeTestCase
     {
         $reverseTransformer = new DateTimeToTimestampTransformer();
 
-        $this->setExpectedException('\InvalidArgumentException');
+        $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException');
+
         $reverseTransformer->reverseTransform('2010-2010-2010', null);
     }
 }

+ 13 - 2
tests/Symfony/Tests/Component/Form/ValueTransformer/MoneyToLocalizedStringTransformerTest.php

@@ -20,13 +20,13 @@ class MoneyToLocalizedStringTransformerTest extends LocalizedTestCase
         $this->assertEquals('1,23', $transformer->transform(123));
     }
 
-    public function testTransformThrowsExceptionIfNotNumeric()
+    public function testTransformExpectsNumeric()
     {
         $transformer = new MoneyToLocalizedStringTransformer(array(
             'divisor' => 100,
         ));
 
-        $this->setExpectedException('InvalidArgumentException');
+        $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException');
 
         $transformer->transform('abcd');
     }
@@ -48,6 +48,17 @@ class MoneyToLocalizedStringTransformerTest extends LocalizedTestCase
         $this->assertEquals(123, $transformer->reverseTransform('1,23', null));
     }
 
+    public function testReverseTransformExpectsString()
+    {
+        $transformer = new MoneyToLocalizedStringTransformer(array(
+            'divisor' => 100,
+        ));
+
+        $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException');
+
+        $transformer->reverseTransform(12345, null);
+    }
+
     public function testReverseTransform_empty()
     {
         $transformer = new MoneyToLocalizedStringTransformer();

+ 2 - 2
tests/Symfony/Tests/Component/Form/ValueTransformer/NumberToLocalizedStringTransformerTest.php

@@ -102,7 +102,7 @@ class NumberToLocalizedStringTransformerTest extends LocalizedTestCase
     {
         $transformer = new NumberToLocalizedStringTransformer();
 
-        $this->setExpectedException('\InvalidArgumentException');
+        $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException');
 
         $transformer->transform('foo');
     }
@@ -111,7 +111,7 @@ class NumberToLocalizedStringTransformerTest extends LocalizedTestCase
     {
         $transformer = new NumberToLocalizedStringTransformer();
 
-        $this->setExpectedException('\InvalidArgumentException');
+        $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException');
 
         $transformer->reverseTransform(1, null);
     }

+ 2 - 2
tests/Symfony/Tests/Component/Form/ValueTransformer/PercentToLocalizedStringTransformerTest.php

@@ -96,7 +96,7 @@ class PercentToLocalizedStringTransformerTest extends LocalizedTestCase
     {
         $transformer = new PercentToLocalizedStringTransformer();
 
-        $this->setExpectedException('\InvalidArgumentException');
+        $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException');
 
         $transformer->transform('foo');
     }
@@ -105,7 +105,7 @@ class PercentToLocalizedStringTransformerTest extends LocalizedTestCase
     {
         $transformer = new PercentToLocalizedStringTransformer();
 
-        $this->setExpectedException('\InvalidArgumentException');
+        $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException');
 
         $transformer->reverseTransform(1, null);
     }