--- /dev/null
+<?php
+
+namespace Doctrine\Tests\Common\Cache;
+
+use Doctrine\Common\Cache\ApcCache;
+use Doctrine\Common\Cache\ArrayCache;
+use Doctrine\Common\Cache\ChainCache;
+
+class ChainCacheTest extends CacheTest
+{
+ protected function _getCacheDriver()
+ {
+ return new ChainCache(array(new ArrayCache()));
+ }
+
+ public function testLifetime()
+ {
+ $this->markTestSkipped('The ChainCache test uses ArrayCache which does not implement TTL currently.');
+ }
+
+ public function testGetStats()
+ {
+ $cache = $this->_getCacheDriver();
+ $stats = $cache->getStats();
+
+ $this->assertInternalType('array', $stats);
+ }
+
+ public function testOnlyFetchFirstOne()
+ {
+ $cache1 = new ArrayCache();
+ $cache2 = $this->getMockForAbstractClass('Doctrine\Common\Cache\CacheProvider');
+
+ $cache2->expects($this->never())->method('doFetch');
+
+ $chainCache = new ChainCache(array($cache1, $cache2));
+ $chainCache->save('id', 'bar');
+
+ $this->assertEquals('bar', $chainCache->fetch('id'));
+ }
+
+ public function testFetchPropagateToFastestCache()
+ {
+ $cache1 = new ArrayCache();
+ $cache2 = new ArrayCache();
+
+ $cache2->save('bar', 'value');
+
+ $chainCache = new ChainCache(array($cache1, $cache2));
+
+ $this->assertFalse($cache1->contains('bar'));
+
+ $result = $chainCache->fetch('bar');
+
+ $this->assertEquals('value', $result);
+ $this->assertTrue($cache2->contains('bar'));
+ }
+
+ public function testNamespaceIsPropagatedToAllProviders()
+ {
+ $cache1 = new ArrayCache();
+ $cache2 = new ArrayCache();
+
+ $chainCache = new ChainCache(array($cache1, $cache2));
+ $chainCache->setNamespace('bar');
+
+ $this->assertEquals('bar', $cache1->getNamespace());
+ $this->assertEquals('bar', $cache2->getNamespace());
+ }
+
+ public function testDeleteToAllProviders()
+ {
+ $cache1 = $this->getMockForAbstractClass('Doctrine\Common\Cache\CacheProvider');
+ $cache2 = $this->getMockForAbstractClass('Doctrine\Common\Cache\CacheProvider');
+
+ $cache1->expects($this->once())->method('doDelete');
+ $cache2->expects($this->once())->method('doDelete');
+
+ $chainCache = new ChainCache(array($cache1, $cache2));
+ $chainCache->delete('bar');
+ }
+
+ public function testFlushToAllProviders()
+ {
+ $cache1 = $this->getMockForAbstractClass('Doctrine\Common\Cache\CacheProvider');
+ $cache2 = $this->getMockForAbstractClass('Doctrine\Common\Cache\CacheProvider');
+
+ $cache1->expects($this->once())->method('doFlush');
+ $cache2->expects($this->once())->method('doFlush');
+
+ $chainCache = new ChainCache(array($cache1, $cache2));
+ $chainCache->flushAll();
+ }
+
+ protected function isSharedStorage()
+ {
+ return false;
+ }
+}
\ No newline at end of file