* * 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\Validator\ViolationMapper; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Extension\Validator\ViolationMapper\ViolationPath; /** * @author Bernhard Schussek */ class ViolationPathTest extends TestCase { public function providePaths() { return array( array('children[address]', array( array('address', true, true), )), array('children[address].children[street]', array( array('address', true, true), array('street', true, true), )), array('children[address][street]', array( array('address', true, true), array('street', true, true), ), 'children[address].children[street]'), array('children[address].data', array( array('address', true, true), ), 'children[address]'), array('children[address].data.street', array( array('address', true, true), array('street', false, false), )), array('children[address].data[street]', array( array('address', true, true), array('street', false, true), )), array('children[address].children[street].data.name', array( array('address', true, true), array('street', true, true), array('name', false, false), )), array('children[address].children[street].data[name]', array( array('address', true, true), array('street', true, true), array('name', false, true), )), array('data.address', array( array('address', false, false), )), array('data[address]', array( array('address', false, true), )), array('data.address.street', array( array('address', false, false), array('street', false, false), )), array('data[address].street', array( array('address', false, true), array('street', false, false), )), array('data.address[street]', array( array('address', false, false), array('street', false, true), )), array('data[address][street]', array( array('address', false, true), array('street', false, true), )), // A few invalid examples array('data', array(), ''), array('children', array(), ''), array('children.address', array(), ''), array('children.address[street]', array(), ''), ); } /** * @dataProvider providePaths */ public function testCreatePath($string, $entries, $slicedPath = null) { if (null === $slicedPath) { $slicedPath = $string; } $path = new ViolationPath($string); $this->assertSame($slicedPath, $path->__toString()); $this->assertCount(count($entries), $path->getElements()); $this->assertSame(count($entries), $path->getLength()); foreach ($entries as $index => $entry) { $this->assertEquals($entry[0], $path->getElement($index)); $this->assertSame($entry[1], $path->mapsForm($index)); $this->assertSame($entry[2], $path->isIndex($index)); $this->assertSame(!$entry[2], $path->isProperty($index)); } } public function provideParents() { return array( array('children[address]', null), array('children[address].children[street]', 'children[address]'), array('children[address].data.street', 'children[address]'), array('children[address].data[street]', 'children[address]'), array('data.address', null), array('data.address.street', 'data.address'), array('data.address[street]', 'data.address'), array('data[address].street', 'data[address]'), array('data[address][street]', 'data[address]'), ); } /** * @dataProvider provideParents */ public function testGetParent($violationPath, $parentPath) { $path = new ViolationPath($violationPath); $parent = null === $parentPath ? null : new ViolationPath($parentPath); $this->assertEquals($parent, $path->getParent()); } public function testGetElement() { $path = new ViolationPath('children[address].data[street].name'); $this->assertEquals('street', $path->getElement(1)); } /** * @expectedException \OutOfBoundsException */ public function testGetElementDoesNotAcceptInvalidIndices() { $path = new ViolationPath('children[address].data[street].name'); $path->getElement(3); } /** * @expectedException \OutOfBoundsException */ public function testGetElementDoesNotAcceptNegativeIndices() { $path = new ViolationPath('children[address].data[street].name'); $path->getElement(-1); } public function testIsProperty() { $path = new ViolationPath('children[address].data[street].name'); $this->assertFalse($path->isProperty(1)); $this->assertTrue($path->isProperty(2)); } /** * @expectedException \OutOfBoundsException */ public function testIsPropertyDoesNotAcceptInvalidIndices() { $path = new ViolationPath('children[address].data[street].name'); $path->isProperty(3); } /** * @expectedException \OutOfBoundsException */ public function testIsPropertyDoesNotAcceptNegativeIndices() { $path = new ViolationPath('children[address].data[street].name'); $path->isProperty(-1); } public function testIsIndex() { $path = new ViolationPath('children[address].data[street].name'); $this->assertTrue($path->isIndex(1)); $this->assertFalse($path->isIndex(2)); } /** * @expectedException \OutOfBoundsException */ public function testIsIndexDoesNotAcceptInvalidIndices() { $path = new ViolationPath('children[address].data[street].name'); $path->isIndex(3); } /** * @expectedException \OutOfBoundsException */ public function testIsIndexDoesNotAcceptNegativeIndices() { $path = new ViolationPath('children[address].data[street].name'); $path->isIndex(-1); } public function testMapsForm() { $path = new ViolationPath('children[address].data[street].name'); $this->assertTrue($path->mapsForm(0)); $this->assertFalse($path->mapsForm(1)); $this->assertFalse($path->mapsForm(2)); } /** * @expectedException \OutOfBoundsException */ public function testMapsFormDoesNotAcceptInvalidIndices() { $path = new ViolationPath('children[address].data[street].name'); $path->mapsForm(3); } /** * @expectedException \OutOfBoundsException */ public function testMapsFormDoesNotAcceptNegativeIndices() { $path = new ViolationPath('children[address].data[street].name'); $path->mapsForm(-1); } } __halt_compiler();----SIGNATURE:----i1LO1+CzDfN5kqn3r7ae92CQQtoII6G3wINSlvxx214lmOeLAMA5x4M5XuhRRtTQy42UlRyukwVAFg5vgK9/3WXfintMhazpCRD5P8ly07/5mV0BpUDG7znsCXg3LjQCbycv7SKvMR75YzSeeuOJ9E8tXnalI8I1ExkwNorzUmD1PU8XhUes2x41vxsnkJxRFrHJUT9amxE+Xms1bMil8G9Sl8Ps8+YAEs4OkWzKt6eI4mMGLTe0Gu+6GJ93s3IuOudfeeCnwtMzkcuBSMW4+lCru8pyF6SxSvFyCbjRGZZ90+sjqXGy1uSof7Tf2FGH25Sx2g5q/KM4zo2txxSZpSI3NB4ov0pUJ6+kQ87+PsovmVeuwUV3l9C99AYpzoFtAjEcOpPCY8zCJq8d1uYCg85AiMGEGjRqKMlFWORTGPz2RUPJ7SjZKw99sZCjF9b7ck6A+h13Nh1a+bn5NZXXjlj/824RFFxWFCZPa39i2fTA4TR10CFwGliLUai0YijbzA7spjEdpsoJRi0nJI0hKlFBGVo3BbC2mJnJZjMr2ndBO84+Y2he6lxbk+OiNfqIxot4NRQim8cljEjomPtVNT+FXe5qN4NyVx959ZDpvAgzvPJndF7TU3eIo5OiU+QLL2fIenUHpbWpbTMewHBoAz2e+ey/TsKCnW3Y0hLo5Qk=----ATTACHMENT:----NDgyMjkzOTU3MTAzODA3NSA3ODM4ODg1NzQ1MjY0NzY1IDQ4OTIzMzkzOTIyNjQxNTA=