* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Form\Tests\Extension\Core\DataTransformer; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Extension\Core\DataTransformer\PercentToLocalizedStringTransformer; use Symfony\Component\Intl\Util\IntlTestHelper; class PercentToLocalizedStringTransformerTest extends TestCase { protected function setUp() { parent::setUp(); \Locale::setDefault('en'); } public function testTransform() { $transformer = new PercentToLocalizedStringTransformer(); $this->assertEquals('10', $transformer->transform(0.1)); $this->assertEquals('15', $transformer->transform(0.15)); $this->assertEquals('12', $transformer->transform(0.1234)); $this->assertEquals('200', $transformer->transform(2)); } public function testTransformEmpty() { $transformer = new PercentToLocalizedStringTransformer(); $this->assertEquals('', $transformer->transform(null)); } public function testTransformWithInteger() { $transformer = new PercentToLocalizedStringTransformer(null, 'integer'); $this->assertEquals('0', $transformer->transform(0.1)); $this->assertEquals('1', $transformer->transform(1)); $this->assertEquals('15', $transformer->transform(15)); $this->assertEquals('16', $transformer->transform(15.9)); } public function testTransformWithScale() { // Since we test against "de_AT", we need the full implementation IntlTestHelper::requireFullIntl($this, false); \Locale::setDefault('de_AT'); $transformer = new PercentToLocalizedStringTransformer(2); $this->assertEquals('12,34', $transformer->transform(0.1234)); } public function testReverseTransform() { $transformer = new PercentToLocalizedStringTransformer(); $this->assertEquals(0.1, $transformer->reverseTransform('10')); $this->assertEquals(0.15, $transformer->reverseTransform('15')); $this->assertEquals(0.12, $transformer->reverseTransform('12')); $this->assertEquals(2, $transformer->reverseTransform('200')); } public function testReverseTransformEmpty() { $transformer = new PercentToLocalizedStringTransformer(); $this->assertNull($transformer->reverseTransform('')); } public function testReverseTransformWithInteger() { $transformer = new PercentToLocalizedStringTransformer(null, 'integer'); $this->assertEquals(10, $transformer->reverseTransform('10')); $this->assertEquals(15, $transformer->reverseTransform('15')); $this->assertEquals(12, $transformer->reverseTransform('12')); $this->assertEquals(200, $transformer->reverseTransform('200')); } public function testReverseTransformWithScale() { // Since we test against "de_AT", we need the full implementation IntlTestHelper::requireFullIntl($this, false); \Locale::setDefault('de_AT'); $transformer = new PercentToLocalizedStringTransformer(2); $this->assertEquals(0.1234, $transformer->reverseTransform('12,34')); } public function testTransformExpectsNumeric() { $transformer = new PercentToLocalizedStringTransformer(); $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Form\Exception\TransformationFailedException'); $transformer->transform('foo'); } public function testReverseTransformExpectsString() { $transformer = new PercentToLocalizedStringTransformer(); $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Form\Exception\TransformationFailedException'); $transformer->reverseTransform(1); } public function testDecimalSeparatorMayBeDotIfGroupingSeparatorIsNotDot() { IntlTestHelper::requireFullIntl($this, '4.8.1.1'); \Locale::setDefault('fr'); $transformer = new PercentToLocalizedStringTransformer(1, 'integer'); // completely valid format $this->assertEquals(1234.5, $transformer->reverseTransform('1 234,5')); // accept dots $this->assertEquals(1234.5, $transformer->reverseTransform('1 234.5')); // omit group separator $this->assertEquals(1234.5, $transformer->reverseTransform('1234,5')); $this->assertEquals(1234.5, $transformer->reverseTransform('1234.5')); } /** * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException */ public function testDecimalSeparatorMayNotBeDotIfGroupingSeparatorIsDot() { // Since we test against "de_DE", we need the full implementation IntlTestHelper::requireFullIntl($this, '4.8.1.1'); \Locale::setDefault('de_DE'); $transformer = new PercentToLocalizedStringTransformer(1, 'integer'); $transformer->reverseTransform('1.234.5'); } /** * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException */ public function testDecimalSeparatorMayNotBeDotIfGroupingSeparatorIsDotWithNoGroupSep() { // Since we test against "de_DE", we need the full implementation IntlTestHelper::requireFullIntl($this, '4.8.1.1'); \Locale::setDefault('de_DE'); $transformer = new PercentToLocalizedStringTransformer(1, 'integer'); $transformer->reverseTransform('1234.5'); } public function testDecimalSeparatorMayBeDotIfGroupingSeparatorIsDotButNoGroupingUsed() { // Since we test against other locales, we need the full implementation IntlTestHelper::requireFullIntl($this, false); \Locale::setDefault('fr'); $transformer = new PercentToLocalizedStringTransformer(1, 'integer'); $this->assertEquals(1234.5, $transformer->reverseTransform('1234,5')); $this->assertEquals(1234.5, $transformer->reverseTransform('1234.5')); } public function testDecimalSeparatorMayBeCommaIfGroupingSeparatorIsNotComma() { // Since we test against other locales, we need the full implementation IntlTestHelper::requireFullIntl($this, '4.8.1.1'); \Locale::setDefault('bg'); $transformer = new PercentToLocalizedStringTransformer(1, 'integer'); // completely valid format $this->assertEquals(1234.5, $transformer->reverseTransform('1 234.5')); // accept commas $this->assertEquals(1234.5, $transformer->reverseTransform('1 234,5')); // omit group separator $this->assertEquals(1234.5, $transformer->reverseTransform('1234.5')); $this->assertEquals(1234.5, $transformer->reverseTransform('1234,5')); } /** * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException */ public function testDecimalSeparatorMayNotBeCommaIfGroupingSeparatorIsComma() { IntlTestHelper::requireFullIntl($this, '4.8.1.1'); $transformer = new PercentToLocalizedStringTransformer(1, 'integer'); $transformer->reverseTransform('1,234,5'); } /** * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException */ public function testDecimalSeparatorMayNotBeCommaIfGroupingSeparatorIsCommaWithNoGroupSep() { IntlTestHelper::requireFullIntl($this, '4.8.1.1'); $transformer = new PercentToLocalizedStringTransformer(1, 'integer'); $transformer->reverseTransform('1234,5'); } public function testDecimalSeparatorMayBeCommaIfGroupingSeparatorIsCommaButNoGroupingUsed() { $formatter = new \NumberFormatter(\Locale::getDefault(), \NumberFormatter::DECIMAL); $formatter->setAttribute(\NumberFormatter::FRACTION_DIGITS, 1); $formatter->setAttribute(\NumberFormatter::GROUPING_USED, false); $transformer = $this->getMockBuilder('Symfony\Component\Form\Extension\Core\DataTransformer\PercentToLocalizedStringTransformer') ->setMethods(array('getNumberFormatter')) ->setConstructorArgs(array(1, 'integer')) ->getMock(); $transformer->expects($this->any()) ->method('getNumberFormatter') ->willReturn($formatter); $this->assertEquals(1234.5, $transformer->reverseTransform('1234,5')); $this->assertEquals(1234.5, $transformer->reverseTransform('1234.5')); } /** * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException */ public function testReverseTransformDisallowsLeadingExtraCharacters() { $transformer = new PercentToLocalizedStringTransformer(); $transformer->reverseTransform('foo123'); } /** * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException * @expectedExceptionMessage The number contains unrecognized characters: "foo3" */ public function testReverseTransformDisallowsCenteredExtraCharacters() { $transformer = new PercentToLocalizedStringTransformer(); $transformer->reverseTransform('12foo3'); } /** * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException * @expectedExceptionMessage The number contains unrecognized characters: "foo8" * @requires extension mbstring */ public function testReverseTransformDisallowsCenteredExtraCharactersMultibyte() { // Since we test against other locales, we need the full implementation IntlTestHelper::requireFullIntl($this, false); \Locale::setDefault('ru'); $transformer = new PercentToLocalizedStringTransformer(); $transformer->reverseTransform("12\xc2\xa0345,67foo8"); } /** * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException * @expectedExceptionMessage The number contains unrecognized characters: "foo" */ public function testReverseTransformDisallowsTrailingExtraCharacters() { $transformer = new PercentToLocalizedStringTransformer(); $transformer->reverseTransform('123foo'); } /** * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException * @expectedExceptionMessage The number contains unrecognized characters: "foo" * @requires extension mbstring */ public function testReverseTransformDisallowsTrailingExtraCharactersMultibyte() { // Since we test against other locales, we need the full implementation IntlTestHelper::requireFullIntl($this, false); \Locale::setDefault('ru'); $transformer = new PercentToLocalizedStringTransformer(); $transformer->reverseTransform("12\xc2\xa0345,678foo"); } } __halt_compiler();----SIGNATURE:----UbeZWdAoQ9b6/NaCNjpPG+JjAPitRUGaxZpWftYK3vdJFo4KgzPDBTdf0m0f5lxrCFOwX/xF42t2xFFWR31jvuCQho4PWJzmrVjDRhTP2BpyXmQx7aqYZ1eAyBQfYkZVBABmfS1RHoeqF7W//HstzGXjkm8Pz27RzZCSvm+ZvFp36+xlcRj96mkdbdIG+7+0OKjG6/QFvwT3ix2EFigPrjVyqaS/fzTiITGIDcEpCXsLUXB1hlmbyU1/w2hUXVnzAoGK+oqCXq52f6TweAZPtpQUsUxyPL7iQoGHlNzLF2F0WZ2uygd6PKGWUrlHOuNQGkaZtQZbqg24y6KwGMPP6oUpU7TOHxOOdydKyKepxbNclNc9sdGdJGyRlZPTY/dCg72WjArRHp3JxLGZFaAa3TGDM2RXj7s9EZ7hiBR3Uzw93yeJK6APLcybGbkxD7FsfED0qXYkx8ncFS4h6GzxLY+T/zWvyen5INFBNYzBhXhMMY8UgAIXhDb30vDqtOCXpqoLrjx0abkfHieYSRsPnQNr6Cnu6swuVVDVlYDXUsK2wyQoe5kXhDOQ05ndRYjn18O6LClyswDlnz4CYav+6ID66jd1DZM7KUNPTsNRci39gG22HLvfCsL1/PnnlWrB3BGNoZJxc4kQuwklCp/rXozo9t2C5W4OU5fhjLfBY74=----ATTACHMENT:----ODYyNDAxNTUxMDE1ODk3OCA2NzMzNjg5MTIwNjUxMjE0IDk5NTkwNzcxMDU1Mjk0OQ==