From e77022ba6d15817f44f8cdb37b2e3e57dce79e37 Mon Sep 17 00:00:00 2001 From: "Issei.M" Date: Wed, 6 Aug 2014 12:51:22 +0900 Subject: [PATCH] [Form] allowed CallbackTransformer to use callable --- .../Component/Form/CallbackTransformer.php | 21 ++++++++--- .../Form/Tests/CallbackTransformerTest.php | 37 +++++++++++++++++++ 2 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 src/Symfony/Component/Form/Tests/CallbackTransformerTest.php diff --git a/src/Symfony/Component/Form/CallbackTransformer.php b/src/Symfony/Component/Form/CallbackTransformer.php index c53c6df788..03459d4e8a 100644 --- a/src/Symfony/Component/Form/CallbackTransformer.php +++ b/src/Symfony/Component/Form/CallbackTransformer.php @@ -18,24 +18,33 @@ class CallbackTransformer implements DataTransformerInterface { /** * The callback used for forward transform - * @var \Closure + * @var callable */ private $transform; /** * The callback used for reverse transform - * @var \Closure + * @var callable */ private $reverseTransform; /** * Constructor. * - * @param \Closure $transform The forward transform callback - * @param \Closure $reverseTransform The reverse transform callback + * @param callable $transform The forward transform callback + * @param callable $reverseTransform The reverse transform callback + * + * @throws \InvalidArgumentException when the given callbacks is invalid */ - public function __construct(\Closure $transform, \Closure $reverseTransform) + public function __construct($transform, $reverseTransform) { + if (!is_callable($transform)) { + throw new \InvalidArgumentException('Argument 1 should be a callable'); + } + if (!is_callable($reverseTransform)) { + throw new \InvalidArgumentException('Argument 2 should be a callable'); + } + $this->transform = $transform; $this->reverseTransform = $reverseTransform; } @@ -47,7 +56,7 @@ class CallbackTransformer implements DataTransformerInterface * * @return mixed The value in the transformed representation * - * @throws UnexpectedTypeException when the argument is not a string + * @throws UnexpectedTypeException when the argument is not of the expected type * @throws TransformationFailedException when the transformation fails */ public function transform($data) diff --git a/src/Symfony/Component/Form/Tests/CallbackTransformerTest.php b/src/Symfony/Component/Form/Tests/CallbackTransformerTest.php new file mode 100644 index 0000000000..706bc076ec --- /dev/null +++ b/src/Symfony/Component/Form/Tests/CallbackTransformerTest.php @@ -0,0 +1,37 @@ +assertEquals('foo has been transformed', $transformer->transform('foo')); + $this->assertEquals('bar has reversely been transformed', $transformer->reverseTransform('bar')); + } + + /** + * @dataProvider invalidCallbacksProvider + * + * @expectedException \InvalidArgumentException + */ + public function testConstructorWithInvalidCallbacks($transformCallback, $reverseTransformCallback) + { + new CallbackTransformer($transformCallback, $reverseTransformCallback); + } + + public function invalidCallbacksProvider() + { + return array( + array( null, function(){} ), + array( function(){}, null ), + ); + } +}