207 lines
5.3 KiB
PHP
Executable File
207 lines
5.3 KiB
PHP
Executable File
<?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\Component\PropertyAccess\Tests;
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
use Symfony\Component\PropertyAccess\PropertyPath;
|
|
|
|
class PropertyPathTest extends TestCase
|
|
{
|
|
public function testToString()
|
|
{
|
|
$path = new PropertyPath('reference.traversable[index].property');
|
|
|
|
$this->assertEquals('reference.traversable[index].property', $path->__toString());
|
|
}
|
|
|
|
/**
|
|
* @expectedException \Symfony\Component\PropertyAccess\Exception\InvalidPropertyPathException
|
|
*/
|
|
public function testDotIsRequiredBeforeProperty()
|
|
{
|
|
new PropertyPath('[index]property');
|
|
}
|
|
|
|
/**
|
|
* @expectedException \Symfony\Component\PropertyAccess\Exception\InvalidPropertyPathException
|
|
*/
|
|
public function testDotCannotBePresentAtTheBeginning()
|
|
{
|
|
new PropertyPath('.property');
|
|
}
|
|
|
|
public function providePathsContainingUnexpectedCharacters()
|
|
{
|
|
return array(
|
|
array('property.'),
|
|
array('property.['),
|
|
array('property..'),
|
|
array('property['),
|
|
array('property[['),
|
|
array('property[.'),
|
|
array('property[]'),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providePathsContainingUnexpectedCharacters
|
|
* @expectedException \Symfony\Component\PropertyAccess\Exception\InvalidPropertyPathException
|
|
*/
|
|
public function testUnexpectedCharacters($path)
|
|
{
|
|
new PropertyPath($path);
|
|
}
|
|
|
|
/**
|
|
* @expectedException \Symfony\Component\PropertyAccess\Exception\InvalidPropertyPathException
|
|
*/
|
|
public function testPathCannotBeEmpty()
|
|
{
|
|
new PropertyPath('');
|
|
}
|
|
|
|
/**
|
|
* @expectedException \Symfony\Component\PropertyAccess\Exception\InvalidArgumentException
|
|
*/
|
|
public function testPathCannotBeNull()
|
|
{
|
|
new PropertyPath(null);
|
|
}
|
|
|
|
/**
|
|
* @expectedException \Symfony\Component\PropertyAccess\Exception\InvalidArgumentException
|
|
*/
|
|
public function testPathCannotBeFalse()
|
|
{
|
|
new PropertyPath(false);
|
|
}
|
|
|
|
public function testZeroIsValidPropertyPath()
|
|
{
|
|
$propertyPath = new PropertyPath('0');
|
|
|
|
$this->assertSame('0', (string) $propertyPath);
|
|
}
|
|
|
|
public function testGetParentWithDot()
|
|
{
|
|
$propertyPath = new PropertyPath('grandpa.parent.child');
|
|
|
|
$this->assertEquals(new PropertyPath('grandpa.parent'), $propertyPath->getParent());
|
|
}
|
|
|
|
public function testGetParentWithIndex()
|
|
{
|
|
$propertyPath = new PropertyPath('grandpa.parent[child]');
|
|
|
|
$this->assertEquals(new PropertyPath('grandpa.parent'), $propertyPath->getParent());
|
|
}
|
|
|
|
public function testGetParentWhenThereIsNoParent()
|
|
{
|
|
$propertyPath = new PropertyPath('path');
|
|
|
|
$this->assertNull($propertyPath->getParent());
|
|
}
|
|
|
|
public function testCopyConstructor()
|
|
{
|
|
$propertyPath = new PropertyPath('grandpa.parent[child]');
|
|
$copy = new PropertyPath($propertyPath);
|
|
|
|
$this->assertEquals($propertyPath, $copy);
|
|
}
|
|
|
|
public function testGetElement()
|
|
{
|
|
$propertyPath = new PropertyPath('grandpa.parent[child]');
|
|
|
|
$this->assertEquals('child', $propertyPath->getElement(2));
|
|
}
|
|
|
|
/**
|
|
* @expectedException \OutOfBoundsException
|
|
*/
|
|
public function testGetElementDoesNotAcceptInvalidIndices()
|
|
{
|
|
$propertyPath = new PropertyPath('grandpa.parent[child]');
|
|
|
|
$propertyPath->getElement(3);
|
|
}
|
|
|
|
/**
|
|
* @expectedException \OutOfBoundsException
|
|
*/
|
|
public function testGetElementDoesNotAcceptNegativeIndices()
|
|
{
|
|
$propertyPath = new PropertyPath('grandpa.parent[child]');
|
|
|
|
$propertyPath->getElement(-1);
|
|
}
|
|
|
|
public function testIsProperty()
|
|
{
|
|
$propertyPath = new PropertyPath('grandpa.parent[child]');
|
|
|
|
$this->assertTrue($propertyPath->isProperty(1));
|
|
$this->assertFalse($propertyPath->isProperty(2));
|
|
}
|
|
|
|
/**
|
|
* @expectedException \OutOfBoundsException
|
|
*/
|
|
public function testIsPropertyDoesNotAcceptInvalidIndices()
|
|
{
|
|
$propertyPath = new PropertyPath('grandpa.parent[child]');
|
|
|
|
$propertyPath->isProperty(3);
|
|
}
|
|
|
|
/**
|
|
* @expectedException \OutOfBoundsException
|
|
*/
|
|
public function testIsPropertyDoesNotAcceptNegativeIndices()
|
|
{
|
|
$propertyPath = new PropertyPath('grandpa.parent[child]');
|
|
|
|
$propertyPath->isProperty(-1);
|
|
}
|
|
|
|
public function testIsIndex()
|
|
{
|
|
$propertyPath = new PropertyPath('grandpa.parent[child]');
|
|
|
|
$this->assertFalse($propertyPath->isIndex(1));
|
|
$this->assertTrue($propertyPath->isIndex(2));
|
|
}
|
|
|
|
/**
|
|
* @expectedException \OutOfBoundsException
|
|
*/
|
|
public function testIsIndexDoesNotAcceptInvalidIndices()
|
|
{
|
|
$propertyPath = new PropertyPath('grandpa.parent[child]');
|
|
|
|
$propertyPath->isIndex(3);
|
|
}
|
|
|
|
/**
|
|
* @expectedException \OutOfBoundsException
|
|
*/
|
|
public function testIsIndexDoesNotAcceptNegativeIndices()
|
|
{
|
|
$propertyPath = new PropertyPath('grandpa.parent[child]');
|
|
|
|
$propertyPath->isIndex(-1);
|
|
}
|
|
}
|