* * 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:----LJ33BvsCnChAJX1/lnWRU1Qoxoc/iPkDdyn7sCeJvWIWb+6v9JicAz6blDg9LEx3X3vNWJPbwW7yN8SK+F0nVxKmT/VhBbTPczr2JcGpApBrWC8OsoDJ7OigPYjZM8Jf2TmWfSqeoc/wumDp6xcBtCqSVJ0vUQghEudMGodyoq3OUhmI26v4fTfeUrQH5uLq2OQ4NSErxuVO+24SJcu+oAnltKSSDxYySmPxp6JnpuHsRwTod1SL/QM1E2RXyi0ClV4iujCMnHTUzQj+HXzfHvbov4Pb8zyGDUNqgSv5149lSydI4Kpug9HW8IDN7nFDWnIJXIEZmZXtC3V3jN8tUj/jdu9+ffBBWCvL4ZZX5BwdykRVOBVB8Y2GcfMYE3EsDveFiyKA5VsuHS+JADH/mIPOhZaBjigbxxUcv+PC23OLJLPA1r2yPBHbCT+1c1Rm9CfJi71Yntf9/Vw/2kzq7wGWQ/aN8tMs/f3zmKyZXkFYLveMBEm403FIug64Kt482fpnZclCWlkRIDd4DsdpQs62WLs32oEFbi/on4yAbkf8aDHLa3G2imMFht4XMOp7dk3BsBnzuvdXqVqtQKHumZfxSPoKPR6IZ0Fzseij0sd72BP8KyGgRYnOjdwJMZf4YLA/8qn/swml7iN/VJfR+HWuDf2rF2upU8w03DzrCbQ=----ATTACHMENT:----NDA0Njc4MDYyNDQ3Nzg1MyAzNDQxOTkxNzU4Nzg1Mjg4IDkyNDk5NzM2NjYwODY3OA==