Merge branch '3.4' into 4.3
* 3.4: fix PHP 5.6 compatibility [Cache] fixed TagAwareAdapter returning invalid cache [PropertyInfo] Respect property name case when guessing from public method name
This commit is contained in:
commit
eb5e01e063
@ -160,7 +160,14 @@ class TagAwareAdapter implements TagAwareAdapterInterface, TagAwareCacheInterfac
|
|||||||
if (!$this->pool->hasItem($key)) {
|
if (!$this->pool->hasItem($key)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!$itemTags = $this->pool->getItem(static::TAGS_PREFIX.$key)->get()) {
|
|
||||||
|
$itemTags = $this->pool->getItem(static::TAGS_PREFIX.$key);
|
||||||
|
|
||||||
|
if (!$itemTags->isHit()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$itemTags = $itemTags->get()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -300,7 +307,10 @@ class TagAwareAdapter implements TagAwareAdapterInterface, TagAwareCacheInterfac
|
|||||||
}
|
}
|
||||||
|
|
||||||
unset($tagKeys[$key]);
|
unset($tagKeys[$key]);
|
||||||
$itemTags[$key] = $item->get() ?: [];
|
|
||||||
|
if ($item->isHit()) {
|
||||||
|
$itemTags[$key] = $item->get() ?: [];
|
||||||
|
}
|
||||||
|
|
||||||
if (!$tagKeys) {
|
if (!$tagKeys) {
|
||||||
$tagVersions = $this->getTagVersions($itemTags);
|
$tagVersions = $this->getTagVersions($itemTags);
|
||||||
|
@ -99,6 +99,84 @@ class TagAwareAdapterTest extends AdapterTestCase
|
|||||||
$this->assertTrue($pool->getItem('foo')->isHit());
|
$this->assertTrue($pool->getItem('foo')->isHit());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testTagEntryIsCreatedForItemWithoutTags()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
|
||||||
|
$itemKey = 'foo';
|
||||||
|
$item = $pool->getItem($itemKey);
|
||||||
|
$pool->save($item);
|
||||||
|
|
||||||
|
$adapter = new FilesystemAdapter();
|
||||||
|
$this->assertTrue($adapter->hasItem(TagAwareAdapter::TAGS_PREFIX.$itemKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHasItemReturnsFalseWhenPoolDoesNotHaveItemTags()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
|
||||||
|
$itemKey = 'foo';
|
||||||
|
$item = $pool->getItem($itemKey);
|
||||||
|
$pool->save($item);
|
||||||
|
|
||||||
|
$anotherPool = $this->createCachePool();
|
||||||
|
|
||||||
|
$adapter = new FilesystemAdapter();
|
||||||
|
$adapter->deleteItem(TagAwareAdapter::TAGS_PREFIX.$itemKey); //simulate item losing tags pair
|
||||||
|
|
||||||
|
$this->assertFalse($anotherPool->hasItem($itemKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetItemReturnsCacheMissWhenPoolDoesNotHaveItemTags()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
|
||||||
|
$itemKey = 'foo';
|
||||||
|
$item = $pool->getItem($itemKey);
|
||||||
|
$pool->save($item);
|
||||||
|
|
||||||
|
$anotherPool = $this->createCachePool();
|
||||||
|
|
||||||
|
$adapter = new FilesystemAdapter();
|
||||||
|
$adapter->deleteItem(TagAwareAdapter::TAGS_PREFIX.$itemKey); //simulate item losing tags pair
|
||||||
|
|
||||||
|
$item = $anotherPool->getItem($itemKey);
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHasItemReturnsFalseWhenPoolDoesNotHaveItemAndOnlyHasTags()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
|
||||||
|
$itemKey = 'foo';
|
||||||
|
$item = $pool->getItem($itemKey);
|
||||||
|
$pool->save($item);
|
||||||
|
|
||||||
|
$anotherPool = $this->createCachePool();
|
||||||
|
|
||||||
|
$adapter = new FilesystemAdapter();
|
||||||
|
$adapter->deleteItem($itemKey); //simulate losing item but keeping tags
|
||||||
|
|
||||||
|
$this->assertFalse($anotherPool->hasItem($itemKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetItemReturnsCacheMissWhenPoolDoesNotHaveItemAndOnlyHasTags()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
|
||||||
|
$itemKey = 'foo';
|
||||||
|
$item = $pool->getItem($itemKey);
|
||||||
|
$pool->save($item);
|
||||||
|
|
||||||
|
$anotherPool = $this->createCachePool();
|
||||||
|
|
||||||
|
$adapter = new FilesystemAdapter();
|
||||||
|
$adapter->deleteItem($itemKey); //simulate losing item but keeping tags
|
||||||
|
|
||||||
|
$item = $anotherPool->getItem($itemKey);
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return MockObject|PruneableCacheInterface
|
* @return MockObject|PruneableCacheInterface
|
||||||
*/
|
*/
|
||||||
|
@ -119,8 +119,8 @@ class ReflectionExtractor implements PropertyListExtractorInterface, PropertyTyp
|
|||||||
if (!$propertyName || isset($properties[$propertyName])) {
|
if (!$propertyName || isset($properties[$propertyName])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!$reflectionClass->hasProperty($propertyName) && !preg_match('/^[A-Z]{2,}/', $propertyName)) {
|
if ($reflectionClass->hasProperty($lowerCasedPropertyName = lcfirst($propertyName)) || (!$reflectionClass->hasProperty($propertyName) && !preg_match('/^[A-Z]{2,}/', $propertyName))) {
|
||||||
$propertyName = lcfirst($propertyName);
|
$propertyName = $lowerCasedPropertyName;
|
||||||
}
|
}
|
||||||
$properties[$propertyName] = $propertyName;
|
$properties[$propertyName] = $propertyName;
|
||||||
}
|
}
|
||||||
|
@ -67,6 +67,8 @@ class ReflectionExtractorTest extends TestCase
|
|||||||
'123',
|
'123',
|
||||||
'self',
|
'self',
|
||||||
'realParent',
|
'realParent',
|
||||||
|
'xTotals',
|
||||||
|
'YT',
|
||||||
'c',
|
'c',
|
||||||
'd',
|
'd',
|
||||||
'e',
|
'e',
|
||||||
|
@ -93,6 +93,16 @@ class Dummy extends ParentDummy
|
|||||||
*/
|
*/
|
||||||
public $j;
|
public $j;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $xTotals;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $YT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This should not be removed.
|
* This should not be removed.
|
||||||
*
|
*
|
||||||
@ -181,4 +191,18 @@ class Dummy extends ParentDummy
|
|||||||
public function setRealParent(parent $realParent)
|
public function setRealParent(parent $realParent)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getXTotals()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getYT()
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user