Add tests for the StringToListTransformer class

This commit is contained in:
Kévin Gomez 2015-10-12 21:43:24 +02:00
parent f530f7f5e1
commit 003fa77438
2 changed files with 62 additions and 2 deletions

View File

@ -6,10 +6,20 @@ use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\Form\DataTransformerInterface;
use Symfony\Component\Form\Exception\TransformationFailedException;
/**
* Transforms a comma-separated list to a proper PHP array.
* Example: the string "foo, bar" will become the array ["foo", "bar"]
*/
class StringToListTransformer implements DataTransformerInterface
{
/**
* @var string
*/
private $separator;
/**
* @param string $separator The separator used in the list.
*/
public function __construct($separator = ',')
{
$this->separator = $separator;
@ -40,10 +50,10 @@ class StringToListTransformer implements DataTransformerInterface
*/
public function reverseTransform($string)
{
if (!$string) {
if ($string === null) {
return null;
}
return array_filter(array_map('trim', explode($this->separator, $string)));
return array_values(array_filter(array_map('trim', explode($this->separator, $string))));
}
}

View File

@ -0,0 +1,50 @@
<?php
namespace Wallabag\CoreBundle\Tests\Form\DataTransformer;
use Wallabag\CoreBundle\Form\DataTransformer\StringToListTransformer;
class StringToListTransformerTest extends \PHPUnit_Framework_TestCase
{
/**
* @dataProvider transformProvider
*/
public function testTransformWithValidData($inputData, $expectedResult)
{
$transformer = new StringToListTransformer();
$this->assertSame($expectedResult, $transformer->transform($inputData));
}
public function transformProvider()
{
return array(
array( null, '' ),
array( array(), '' ),
array( array('single value'), 'single value' ),
array( array('first value', 'second value'), 'first value,second value' ),
);
}
/**
* @dataProvider reverseTransformProvider
*/
public function testReverseTransformWithValidData($inputData, $expectedResult)
{
$transformer = new StringToListTransformer();
$this->assertSame($expectedResult, $transformer->reverseTransform($inputData));
}
public function reverseTransformProvider()
{
return array(
array( null, null ),
array( '', array() ),
array( 'single value', array('single value') ),
array( 'first value,second value', array('first value', 'second value') ),
array( 'first value, second value', array('first value', 'second value') ),
array( 'first value, , second value', array('first value', 'second value') ),
);
}
}