Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit a3e8e4d

Browse filesBrowse files
committed
[Cache] Create NullAdapter to disable cache if needed
1 parent ea9d6e7 commit a3e8e4d
Copy full SHA for a3e8e4d

File tree

2 files changed

+245
-0
lines changed
Filter options

2 files changed

+245
-0
lines changed
+121Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Cache\Adapter;
13+
14+
use Psr\Cache\CacheItemInterface;
15+
use Symfony\Component\Cache\CacheItem;
16+
17+
/**
18+
* @author Titouan Galopin <galopintitouan@gmail.com>
19+
*/
20+
class NullAdapter implements AdapterInterface
21+
{
22+
private $createCacheItem;
23+
24+
public function __construct()
25+
{
26+
$this->createCacheItem = \Closure::bind(
27+
function ($key) {
28+
$item = new CacheItem();
29+
$item->key = $key;
30+
$item->isHit = false;
31+
32+
return $item;
33+
},
34+
$this,
35+
CacheItem::class
36+
);
37+
}
38+
39+
/**
40+
* {@inheritdoc}
41+
*/
42+
public function getItem($key)
43+
{
44+
$f = $this->createCacheItem;
45+
46+
return $f($key);
47+
}
48+
49+
/**
50+
* {@inheritdoc}
51+
*/
52+
public function getItems(array $keys = array())
53+
{
54+
return $this->generateItems($keys);
55+
}
56+
57+
/**
58+
* {@inheritdoc}
59+
*/
60+
public function hasItem($key)
61+
{
62+
return false;
63+
}
64+
65+
/**
66+
* {@inheritdoc}
67+
*/
68+
public function clear()
69+
{
70+
return true;
71+
}
72+
73+
/**
74+
* {@inheritdoc}
75+
*/
76+
public function deleteItem($key)
77+
{
78+
return true;
79+
}
80+
81+
/**
82+
* {@inheritdoc}
83+
*/
84+
public function deleteItems(array $keys)
85+
{
86+
return true;
87+
}
88+
89+
/**
90+
* {@inheritdoc}
91+
*/
92+
public function save(CacheItemInterface $item)
93+
{
94+
return false;
95+
}
96+
97+
/**
98+
* {@inheritdoc}
99+
*/
100+
public function saveDeferred(CacheItemInterface $item)
101+
{
102+
return false;
103+
}
104+
105+
/**
106+
* {@inheritdoc}
107+
*/
108+
public function commit()
109+
{
110+
return false;
111+
}
112+
113+
private function generateItems(array $keys)
114+
{
115+
$f = $this->createCacheItem;
116+
117+
foreach ($keys as $key) {
118+
yield $key => $f($key);
119+
}
120+
}
121+
}
+124Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Cache\Tests\Adapter;
13+
14+
use Psr\Cache\CacheItemInterface;
15+
use Symfony\Component\Cache\Adapter\NullAdapter;
16+
17+
class NullAdapterTest extends \PHPUnit_Framework_TestCase
18+
{
19+
public function createCachePool()
20+
{
21+
return new NullAdapter();
22+
}
23+
24+
public function testGetItem()
25+
{
26+
$adapter = $this->createCachePool();
27+
28+
$item = $adapter->getItem('key');
29+
$this->assertFalse($item->isHit());
30+
$this->assertNull($item->get(), "Item's value must be null when isHit is false.");
31+
}
32+
33+
public function testHasItem()
34+
{
35+
$this->assertFalse($this->createCachePool()->hasItem('key'));
36+
}
37+
38+
public function testGetItems()
39+
{
40+
$adapter = $this->createCachePool();
41+
42+
$keys = array('foo', 'bar', 'baz', 'biz');
43+
44+
/** @var CacheItemInterface[] $items */
45+
$items = $adapter->getItems($keys);
46+
$count = 0;
47+
48+
foreach ($items as $key => $item) {
49+
$itemKey = $item->getKey();
50+
51+
$this->assertEquals($itemKey, $key, 'Keys must be preserved when fetching multiple items');
52+
$this->assertTrue(in_array($key, $keys), 'Cache key can not change.');
53+
$this->assertFalse($item->isHit());
54+
55+
// Remove $key for $keys
56+
foreach ($keys as $k => $v) {
57+
if ($v === $key) {
58+
unset($keys[$k]);
59+
}
60+
}
61+
62+
++$count;
63+
}
64+
65+
$this->assertSame(4, $count);
66+
}
67+
68+
public function testIsHit()
69+
{
70+
$adapter = $this->createCachePool();
71+
72+
$item = $adapter->getItem('key');
73+
$this->assertFalse($item->isHit());
74+
}
75+
76+
public function testClear()
77+
{
78+
$this->assertTrue($this->createCachePool()->clear());
79+
}
80+
81+
public function testDeleteItem()
82+
{
83+
$this->assertTrue($this->createCachePool()->deleteItem('key'));
84+
}
85+
86+
public function testDeleteItems()
87+
{
88+
$this->assertTrue($this->createCachePool()->deleteItems(array('key', 'foo', 'bar')));
89+
}
90+
91+
public function testSave()
92+
{
93+
$adapter = $this->createCachePool();
94+
95+
$item = $adapter->getItem('key');
96+
$this->assertFalse($item->isHit());
97+
$this->assertNull($item->get(), "Item's value must be null when isHit is false.");
98+
99+
$this->assertFalse($adapter->save($item));
100+
}
101+
102+
public function testDeferredSave()
103+
{
104+
$adapter = $this->createCachePool();
105+
106+
$item = $adapter->getItem('key');
107+
$this->assertFalse($item->isHit());
108+
$this->assertNull($item->get(), "Item's value must be null when isHit is false.");
109+
110+
$this->assertFalse($adapter->saveDeferred($item));
111+
}
112+
113+
public function testCommit()
114+
{
115+
$adapter = $this->createCachePool();
116+
117+
$item = $adapter->getItem('key');
118+
$this->assertFalse($item->isHit());
119+
$this->assertNull($item->get(), "Item's value must be null when isHit is false.");
120+
121+
$this->assertFalse($adapter->saveDeferred($item));
122+
$this->assertFalse($this->createCachePool()->commit());
123+
}
124+
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.