123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- <?php
-
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
- namespace Symfony\Tests\Component\Yaml;
-
- use Symfony\Component\Yaml\Yaml;
- use Symfony\Component\Yaml\Inline;
-
- class InlineTest extends \PHPUnit_Framework_TestCase
- {
- public function testParse()
- {
- foreach ($this->getTestsForParse() as $yaml => $value) {
- $this->assertEquals($value, Inline::parse($yaml), sprintf('::parse() converts an inline YAML to a PHP structure (%s)', $yaml));
- }
- }
-
- public function testDump()
- {
- $testsForDump = $this->getTestsForDump();
-
- foreach ($testsForDump as $yaml => $value) {
- $this->assertEquals($yaml, Inline::dump($value), sprintf('::dump() converts a PHP structure to an inline YAML (%s)', $yaml));
- }
-
- foreach ($this->getTestsForParse() as $yaml => $value) {
- $this->assertEquals($value, Inline::parse(Inline::dump($value)), 'check consistency');
- }
-
- foreach ($testsForDump as $yaml => $value) {
- $this->assertEquals($value, Inline::parse(Inline::dump($value)), 'check consistency');
- }
- }
-
- public function testDumpNumericValueWithLocale()
- {
- $locale = setlocale(LC_NUMERIC, 0);
- if (false === $locale) {
- $this->markTestSkipped('Your platform does not support locales.');
- }
-
- $required_locales = array('fr_FR.UTF-8', 'fr_FR.UTF8', 'fr_FR.utf-8', 'fr_FR.utf8', 'French_France.1252');
- if (false === setlocale(LC_ALL, $required_locales)) {
- $this->markTestSkipped('Could not set any of required locales: ' . implode(", ", $required_locales));
- }
-
- $this->assertEquals('1.2', Inline::dump(1.2));
- $this->assertContains('fr', strtolower(setlocale(LC_NUMERIC, 0)));
-
- setlocale(LC_ALL, $locale);
- }
-
- public function testHashStringsResemblingExponentialNumericsShouldNotBeChangedToINF()
- {
- $value = '686e444';
-
- $this->assertSame($value, Inline::parse(Inline::dump($value)));
- }
-
- protected function getTestsForParse()
- {
- return array(
- '' => '',
- 'null' => null,
- 'false' => false,
- 'true' => true,
- '12' => 12,
- '"quoted string"' => 'quoted string',
- "'quoted string'" => 'quoted string',
- '12.30e+02' => 12.30e+02,
- '0x4D2' => 0x4D2,
- '02333' => 02333,
- '.Inf' => -log(0),
- '-.Inf' => log(0),
- "'686e444'" => '686e444',
- '686e444' => 646e444,
- '123456789123456789' => '123456789123456789',
- '"foo\r\nbar"' => "foo\r\nbar",
- "'foo#bar'" => 'foo#bar',
- "'foo # bar'" => 'foo # bar',
- "'#cfcfcf'" => '#cfcfcf',
-
- '2007-10-30' => mktime(0, 0, 0, 10, 30, 2007),
- '2007-10-30T02:59:43Z' => gmmktime(2, 59, 43, 10, 30, 2007),
- '2007-10-30 02:59:43 Z' => gmmktime(2, 59, 43, 10, 30, 2007),
-
- '"a \\"string\\" with \'quoted strings inside\'"' => 'a "string" with \'quoted strings inside\'',
- "'a \"string\" with ''quoted strings inside'''" => 'a "string" with \'quoted strings inside\'',
-
- // sequences
- // urls are no key value mapping. see #3609. Valid yaml "key: value" mappings require a space after the colon
- '[foo, http://urls.are/no/mappings, false, null, 12]' => array('foo', 'http://urls.are/no/mappings', false, null, 12),
- '[ foo , bar , false , null , 12 ]' => array('foo', 'bar', false, null, 12),
- '[\'foo,bar\', \'foo bar\']' => array('foo,bar', 'foo bar'),
-
- // mappings
- '{foo:bar,bar:foo,false:false,null:null,integer:12}' => array('foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12),
- '{ foo : bar, bar : foo, false : false, null : null, integer : 12 }' => array('foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12),
- '{foo: \'bar\', bar: \'foo: bar\'}' => array('foo' => 'bar', 'bar' => 'foo: bar'),
- '{\'foo\': \'bar\', "bar": \'foo: bar\'}' => array('foo' => 'bar', 'bar' => 'foo: bar'),
- '{\'foo\'\'\': \'bar\', "bar\"": \'foo: bar\'}' => array('foo\'' => 'bar', "bar\"" => 'foo: bar'),
- '{\'foo: \': \'bar\', "bar: ": \'foo: bar\'}' => array('foo: ' => 'bar', "bar: " => 'foo: bar'),
-
- // nested sequences and mappings
- '[foo, [bar, foo]]' => array('foo', array('bar', 'foo')),
- '[foo, {bar: foo}]' => array('foo', array('bar' => 'foo')),
- '{ foo: {bar: foo} }' => array('foo' => array('bar' => 'foo')),
- '{ foo: [bar, foo] }' => array('foo' => array('bar', 'foo')),
-
- '[ foo, [ bar, foo ] ]' => array('foo', array('bar', 'foo')),
-
- '[{ foo: {bar: foo} }]' => array(array('foo' => array('bar' => 'foo'))),
-
- '[foo, [bar, [foo, [bar, foo]], foo]]' => array('foo', array('bar', array('foo', array('bar', 'foo')), 'foo')),
-
- '[foo, {bar: foo, foo: [foo, {bar: foo}]}, [foo, {bar: foo}]]' => array('foo', array('bar' => 'foo', 'foo' => array('foo', array('bar' => 'foo'))), array('foo', array('bar' => 'foo'))),
-
- '[foo, bar: { foo: bar }]' => array('foo', '1' => array('bar' => array('foo' => 'bar'))),
- );
- }
-
- protected function getTestsForDump()
- {
- return array(
- 'null' => null,
- 'false' => false,
- 'true' => true,
- '12' => 12,
- "'quoted string'" => 'quoted string',
- '12.30e+02' => 12.30e+02,
- '1234' => 0x4D2,
- '1243' => 02333,
- '.Inf' => -log(0),
- '-.Inf' => log(0),
- "'686e444'" => '686e444',
- '.Inf' => 646e444,
- '"foo\r\nbar"' => "foo\r\nbar",
- "'foo#bar'" => 'foo#bar',
- "'foo # bar'" => 'foo # bar',
- "'#cfcfcf'" => '#cfcfcf',
-
- "'a \"string\" with ''quoted strings inside'''" => 'a "string" with \'quoted strings inside\'',
-
- // sequences
- '[foo, bar, false, null, 12]' => array('foo', 'bar', false, null, 12),
- '[\'foo,bar\', \'foo bar\']' => array('foo,bar', 'foo bar'),
-
- // mappings
- '{ foo: bar, bar: foo, \'false\': false, \'null\': null, integer: 12 }' => array('foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12),
- '{ foo: bar, bar: \'foo: bar\' }' => array('foo' => 'bar', 'bar' => 'foo: bar'),
-
- // nested sequences and mappings
- '[foo, [bar, foo]]' => array('foo', array('bar', 'foo')),
-
- '[foo, [bar, [foo, [bar, foo]], foo]]' => array('foo', array('bar', array('foo', array('bar', 'foo')), 'foo')),
-
- '{ foo: { bar: foo } }' => array('foo' => array('bar' => 'foo')),
-
- '[foo, { bar: foo }]' => array('foo', array('bar' => 'foo')),
-
- '[foo, { bar: foo, foo: [foo, { bar: foo }] }, [foo, { bar: foo }]]' => array('foo', array('bar' => 'foo', 'foo' => array('foo', array('bar' => 'foo'))), array('foo', array('bar' => 'foo'))),
- );
- }
- }
|