public function testSetInvisiblePropertyByProperty()
{
$mother = new Mother();
$child = new Child();
Util::setInvisibleProperty($mother, 'privateProperty', 'private2');
$this->assertSame('private2', Util::getInvisibleProperty($mother, 'invalidProperty', 'getPrivateProperty'));
Util::setInvisibleProperty($mother, 'privateProperty', 'private3', 'invalidMethod');
$this->assertSame('private3', Util::getInvisibleProperty($mother, 'invalidProperty', 'getPrivateProperty'));
Util::setInvisibleProperty($child, 'privateProperty', 'private2');
$this->assertSame('private2', Util::getInvisibleProperty($child, 'invalidProperty', 'getPrivateProperty'));
Util::setInvisibleProperty($child, 'privateProperty', 'private3', 'invalidMethod');
$this->assertSame('private3', Util::getInvisibleProperty($child, 'invalidProperty', 'getPrivateProperty'));
Util::setInvisibleProperty($child, 'protectedProperty', 'protected2');
$this->assertSame('protected2', Util::getInvisibleProperty($child, 'invalidProperty', 'getProtectedProperty'));
Util::setInvisibleProperty($child, 'protectedProperty', 'protected3', 'invalidMethod');
$this->assertSame('protected3', Util::getInvisibleProperty($child, 'invalidProperty', 'getProtectedProperty'));
Util::setInvisibleProperty($mother, 'publicProperty', 'public2');
$this->assertSame('public2', Util::getInvisibleProperty($mother, 'invalidProperty', 'getPublicProperty'));
Util::setInvisibleProperty($mother, 'publicProperty', 'public3', 'methodName');
$this->assertSame('public3', Util::getInvisibleProperty($mother, 'invalidProperty', 'getPublicProperty'));
Util::setInvisibleProperty($child, 'publicProperty', 'public2');
$this->assertSame('public2', Util::getInvisibleProperty($child, 'invalidProperty', 'getPublicProperty'));
Util::setInvisibleProperty($child, 'publicProperty', 'public3', 'methodName');
$this->assertSame('public3', Util::getInvisibleProperty($child, 'invalidProperty', 'getPublicProperty'));
}