* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\PropertyAccess\Tests; use PHPUnit\Framework\TestCase; use Symfony\Component\PropertyAccess\PropertyPath; use Symfony\Component\PropertyAccess\PropertyPathBuilder; /** * @author Bernhard Schussek */ class PropertyPathBuilderTest extends TestCase { const PREFIX = 'old1[old2].old3[old4][old5].old6'; /** * @var PropertyPathBuilder */ private $builder; protected function setUp() { $this->builder = new PropertyPathBuilder(new PropertyPath(self::PREFIX)); } public function testCreateEmpty() { $builder = new PropertyPathBuilder(); $this->assertNull($builder->getPropertyPath()); } public function testCreateCopyPath() { $this->assertEquals(new PropertyPath(self::PREFIX), $this->builder->getPropertyPath()); } public function testAppendIndex() { $this->builder->appendIndex('new1'); $path = new PropertyPath(self::PREFIX.'[new1]'); $this->assertEquals($path, $this->builder->getPropertyPath()); } public function testAppendProperty() { $this->builder->appendProperty('new1'); $path = new PropertyPath(self::PREFIX.'.new1'); $this->assertEquals($path, $this->builder->getPropertyPath()); } public function testAppend() { $this->builder->append(new PropertyPath('new1[new2]')); $path = new PropertyPath(self::PREFIX.'.new1[new2]'); $this->assertEquals($path, $this->builder->getPropertyPath()); } public function testAppendUsingString() { $this->builder->append('new1[new2]'); $path = new PropertyPath(self::PREFIX.'.new1[new2]'); $this->assertEquals($path, $this->builder->getPropertyPath()); } public function testAppendWithOffset() { $this->builder->append(new PropertyPath('new1[new2].new3'), 1); $path = new PropertyPath(self::PREFIX.'[new2].new3'); $this->assertEquals($path, $this->builder->getPropertyPath()); } public function testAppendWithOffsetAndLength() { $this->builder->append(new PropertyPath('new1[new2].new3'), 1, 1); $path = new PropertyPath(self::PREFIX.'[new2]'); $this->assertEquals($path, $this->builder->getPropertyPath()); } public function testReplaceByIndex() { $this->builder->replaceByIndex(1, 'new1'); $path = new PropertyPath('old1[new1].old3[old4][old5].old6'); $this->assertEquals($path, $this->builder->getPropertyPath()); } public function testReplaceByIndexWithoutName() { $this->builder->replaceByIndex(0); $path = new PropertyPath('[old1][old2].old3[old4][old5].old6'); $this->assertEquals($path, $this->builder->getPropertyPath()); } /** * @expectedException \OutOfBoundsException */ public function testReplaceByIndexDoesNotAllowInvalidOffsets() { $this->builder->replaceByIndex(6, 'new1'); } /** * @expectedException \OutOfBoundsException */ public function testReplaceByIndexDoesNotAllowNegativeOffsets() { $this->builder->replaceByIndex(-1, 'new1'); } public function testReplaceByProperty() { $this->builder->replaceByProperty(1, 'new1'); $path = new PropertyPath('old1.new1.old3[old4][old5].old6'); $this->assertEquals($path, $this->builder->getPropertyPath()); } public function testReplaceByPropertyWithoutName() { $this->builder->replaceByProperty(1); $path = new PropertyPath('old1.old2.old3[old4][old5].old6'); $this->assertEquals($path, $this->builder->getPropertyPath()); } /** * @expectedException \OutOfBoundsException */ public function testReplaceByPropertyDoesNotAllowInvalidOffsets() { $this->builder->replaceByProperty(6, 'new1'); } /** * @expectedException \OutOfBoundsException */ public function testReplaceByPropertyDoesNotAllowNegativeOffsets() { $this->builder->replaceByProperty(-1, 'new1'); } public function testReplace() { $this->builder->replace(1, 1, new PropertyPath('new1[new2].new3')); $path = new PropertyPath('old1.new1[new2].new3.old3[old4][old5].old6'); $this->assertEquals($path, $this->builder->getPropertyPath()); } public function testReplaceUsingString() { $this->builder->replace(1, 1, 'new1[new2].new3'); $path = new PropertyPath('old1.new1[new2].new3.old3[old4][old5].old6'); $this->assertEquals($path, $this->builder->getPropertyPath()); } public function testReplaceNegative() { $this->builder->replace(-1, 1, new PropertyPath('new1[new2].new3')); $path = new PropertyPath('old1[old2].old3[old4][old5].new1[new2].new3'); $this->assertEquals($path, $this->builder->getPropertyPath()); } /** * @dataProvider provideInvalidOffsets * @expectedException \OutOfBoundsException */ public function testReplaceDoesNotAllowInvalidOffsets($offset) { $this->builder->replace($offset, 1, new PropertyPath('new1[new2].new3')); } public function provideInvalidOffsets() { return array( array(6), array(-7), ); } public function testReplaceWithLengthGreaterOne() { $this->builder->replace(0, 2, new PropertyPath('new1[new2].new3')); $path = new PropertyPath('new1[new2].new3.old3[old4][old5].old6'); $this->assertEquals($path, $this->builder->getPropertyPath()); } public function testReplaceSubstring() { $this->builder->replace(1, 1, new PropertyPath('new1[new2].new3.new4[new5]'), 1, 3); $path = new PropertyPath('old1[new2].new3.new4.old3[old4][old5].old6'); $this->assertEquals($path, $this->builder->getPropertyPath()); } public function testReplaceSubstringWithLengthGreaterOne() { $this->builder->replace(1, 2, new PropertyPath('new1[new2].new3.new4[new5]'), 1, 3); $path = new PropertyPath('old1[new2].new3.new4[old4][old5].old6'); $this->assertEquals($path, $this->builder->getPropertyPath()); } // https://github.com/symfony/symfony/issues/5605 public function testReplaceWithLongerPath() { // error occurs when path contains at least two more elements // than the builder $path = new PropertyPath('new1.new2.new3'); $builder = new PropertyPathBuilder(new PropertyPath('old1')); $builder->replace(0, 1, $path); $this->assertEquals($path, $builder->getPropertyPath()); } public function testReplaceWithLongerPathKeepsOrder() { $path = new PropertyPath('new1.new2.new3'); $expected = new PropertyPath('new1.new2.new3.old2'); $builder = new PropertyPathBuilder(new PropertyPath('old1.old2')); $builder->replace(0, 1, $path); $this->assertEquals($expected, $builder->getPropertyPath()); } public function testRemove() { $this->builder->remove(3); $path = new PropertyPath('old1[old2].old3[old5].old6'); $this->assertEquals($path, $this->builder->getPropertyPath()); } /** * @expectedException \OutOfBoundsException */ public function testRemoveDoesNotAllowInvalidOffsets() { $this->builder->remove(6); } /** * @expectedException \OutOfBoundsException */ public function testRemoveDoesNotAllowNegativeOffsets() { $this->builder->remove(-1); } } __halt_compiler();----SIGNATURE:----k9tQkxO14i/WCuRw3ZBDlxgqwwFM9p9B7onkE4i96ZQhHOsQJP582MGX9iRSKUwAp/q+d6hB2o7NlFgEFLRm10iiTVP0o9Bp6UttbqGVRUJLNrQof9BV9gjdaEzui2mDEcgaCTAFTAJ3SmbBWnHwmPpNIRUfe6jieVkAeD8PQv+xPvinsmBPfjh6bUrn5oUUDVEDgwSF+mk1lEJNqvnGntK4kWkBW4C6IUxGOxEE4ZHztqOzyUIJRZppqKBobgxRUh3bSfax8upRUCDbJ5KDkBWv3tiJS2aGn255/VCbYmVVsVvlm8wtZ/fgV7vLb+yZNMPCizfhO+GbtJNGN8UP+varDNdDYhlns8Q9/0ci1Eji0K3KYb+AzfX6Y/dTWHUTdZYXwwxBwaSAPRu2gVL2Ti0vjiQuGFOt+eyiycyrOdQA+wxzwf7LxcPXY916lbWHuaHcnPokNe4V9MEGMXgKK5ZxcKoFSUQvQ6/qrGS1t4plZCxbNRN/tLbMVBTAdgFDBTJ+/aMJ6XePJqE1ZKYhLhpKa/pgo4tuehIhWz3jQKGQs3gBuuPlj+kh3YJUNHI3XRNsBtCE1XGdj6Mhdd9bLvTVQsTzryKMxO54uqCs8JKPso2wGwMA16FvkG3Wymt5cXwNXYnUqArGyLbHMFI+stOM9fLVorz7+xI7gA7oi8M=----ATTACHMENT:----ODQ3MjIwMjcxMzI2MzQ1NiA3MTU0NDAzOTcwMjU0OTcwIDE5NDU3MTI0OTkxODU1MzQ=