Files
instafeed/vendor/react/cache/tests/ArrayCacheTest.php
2022-10-23 01:39:27 +02:00

323 lines
8.7 KiB
PHP
Executable File

<?php
namespace React\Tests\Cache;
use React\Cache\ArrayCache;
class ArrayCacheTest extends TestCase
{
/**
* @var ArrayCache
*/
private $cache;
public function setUp()
{
$this->cache = new ArrayCache();
}
/** @test */
public function getShouldResolvePromiseWithNullForNonExistentKey()
{
$success = $this->createCallableMock();
$success
->expects($this->once())
->method('__invoke')
->with(null);
$this->cache
->get('foo')
->then(
$success,
$this->expectCallableNever()
);
}
/** @test */
public function setShouldSetKey()
{
$setPromise = $this->cache
->set('foo', 'bar');
$mock = $this->createCallableMock();
$mock
->expects($this->once())
->method('__invoke')
->with($this->identicalTo(true));
$setPromise->then($mock);
$success = $this->createCallableMock();
$success
->expects($this->once())
->method('__invoke')
->with('bar');
$this->cache
->get('foo')
->then($success);
}
/** @test */
public function deleteShouldDeleteKey()
{
$this->cache
->set('foo', 'bar');
$deletePromise = $this->cache
->delete('foo');
$mock = $this->createCallableMock();
$mock
->expects($this->once())
->method('__invoke')
->with($this->identicalTo(true));
$deletePromise->then($mock);
$this->cache
->get('foo')
->then(
$this->expectCallableOnce(),
$this->expectCallableNever()
);
}
public function testGetWillResolveWithNullForCacheMiss()
{
$this->cache = new ArrayCache();
$this->cache->get('foo')->then($this->expectCallableOnceWith(null));
}
public function testGetWillResolveWithDefaultValueForCacheMiss()
{
$this->cache = new ArrayCache();
$this->cache->get('foo', 'bar')->then($this->expectCallableOnceWith('bar'));
}
public function testGetWillResolveWithExplicitNullValueForCacheHit()
{
$this->cache = new ArrayCache();
$this->cache->set('foo', null);
$this->cache->get('foo', 'bar')->then($this->expectCallableOnceWith(null));
}
public function testLimitSizeToZeroDoesNotStoreAnyData()
{
$this->cache = new ArrayCache(0);
$this->cache->set('foo', 'bar');
$this->cache->get('foo')->then($this->expectCallableOnceWith(null));
}
public function testLimitSizeToOneWillOnlyReturnLastWrite()
{
$this->cache = new ArrayCache(1);
$this->cache->set('foo', '1');
$this->cache->set('bar', '2');
$this->cache->get('foo')->then($this->expectCallableOnceWith(null));
$this->cache->get('bar')->then($this->expectCallableOnceWith('2'));
}
public function testOverwriteWithLimitedSizeWillUpdateLRUInfo()
{
$this->cache = new ArrayCache(2);
$this->cache->set('foo', '1');
$this->cache->set('bar', '2');
$this->cache->set('foo', '3');
$this->cache->set('baz', '4');
$this->cache->get('foo')->then($this->expectCallableOnceWith('3'));
$this->cache->get('bar')->then($this->expectCallableOnceWith(null));
$this->cache->get('baz')->then($this->expectCallableOnceWith('4'));
}
public function testGetWithLimitedSizeWillUpdateLRUInfo()
{
$this->cache = new ArrayCache(2);
$this->cache->set('foo', '1');
$this->cache->set('bar', '2');
$this->cache->get('foo')->then($this->expectCallableOnceWith('1'));
$this->cache->set('baz', '3');
$this->cache->get('foo')->then($this->expectCallableOnceWith('1'));
$this->cache->get('bar')->then($this->expectCallableOnceWith(null));
$this->cache->get('baz')->then($this->expectCallableOnceWith('3'));
}
public function testGetWillResolveWithValueIfItemIsNotExpired()
{
$this->cache = new ArrayCache();
$this->cache->set('foo', '1', 10);
$this->cache->get('foo')->then($this->expectCallableOnceWith('1'));
}
public function testGetWillResolveWithDefaultIfItemIsExpired()
{
$this->cache = new ArrayCache();
$this->cache->set('foo', '1', 0);
$this->cache->get('foo')->then($this->expectCallableOnceWith(null));
}
public function testSetWillOverwritOldestItemIfNoEntryIsExpired()
{
$this->cache = new ArrayCache(2);
$this->cache->set('foo', '1', 10);
$this->cache->set('bar', '2', 20);
$this->cache->set('baz', '3', 30);
$this->cache->get('foo')->then($this->expectCallableOnceWith(null));
}
public function testSetWillOverwriteExpiredItemIfAnyEntryIsExpired()
{
$this->cache = new ArrayCache(2);
$this->cache->set('foo', '1', 10);
$this->cache->set('bar', '2', 0);
$this->cache->set('baz', '3', 30);
$this->cache->get('foo')->then($this->expectCallableOnceWith('1'));
$this->cache->get('bar')->then($this->expectCallableOnceWith(null));
}
public function testGetMultiple()
{
$this->cache = new ArrayCache();
$this->cache->set('foo', '1');
$this->cache
->getMultiple(array('foo', 'bar'), 'baz')
->then($this->expectCallableOnceWith(array('foo' => '1', 'bar' => 'baz')));
}
public function testSetMultiple()
{
$this->cache = new ArrayCache();
$this->cache->setMultiple(array('foo' => '1', 'bar' => '2'), 10);
$this->cache
->getMultiple(array('foo', 'bar'))
->then($this->expectCallableOnceWith(array('foo' => '1', 'bar' => '2')));
}
public function testDeleteMultiple()
{
$this->cache = new ArrayCache();
$this->cache->setMultiple(array('foo' => 1, 'bar' => 2, 'baz' => 3));
$this->cache
->deleteMultiple(array('foo', 'baz'))
->then($this->expectCallableOnceWith(true));
$this->cache
->has('foo')
->then($this->expectCallableOnceWith(false));
$this->cache
->has('bar')
->then($this->expectCallableOnceWith(true));
$this->cache
->has('baz')
->then($this->expectCallableOnceWith(false));
}
public function testClearShouldClearCache()
{
$this->cache = new ArrayCache();
$this->cache->setMultiple(array('foo' => 1, 'bar' => 2, 'baz' => 3));
$this->cache->clear();
$this->cache
->has('foo')
->then($this->expectCallableOnceWith(false));
$this->cache
->has('bar')
->then($this->expectCallableOnceWith(false));
$this->cache
->has('baz')
->then($this->expectCallableOnceWith(false));
}
public function hasShouldResolvePromiseForExistingKey()
{
$this->cache = new ArrayCache();
$this->cache->set('foo', 'bar');
$this->cache
->has('foo')
->then($this->expectCallableOnceWith(true));
}
public function hasShouldResolvePromiseForNonExistentKey()
{
$this->cache = new ArrayCache();
$this->cache->set('foo', 'bar');
$this->cache
->has('foo')
->then($this->expectCallableOnceWith(false));
}
public function testHasWillResolveIfItemIsNotExpired()
{
$this->cache = new ArrayCache();
$this->cache->set('foo', '1', 10);
$this->cache
->has('foo')
->then($this->expectCallableOnceWith(true));
}
public function testHasWillResolveIfItemIsExpired()
{
$this->cache = new ArrayCache();
$this->cache->set('foo', '1', 0);
$this->cache
->has('foo')
->then($this->expectCallableOnceWith(false));
}
public function testHasWillResolveForExplicitNullValue()
{
$this->cache = new ArrayCache();
$this->cache->set('foo', null);
$this->cache
->has('foo')
->then($this->expectCallableOnceWith(true));
}
public function testHasWithLimitedSizeWillUpdateLRUInfo()
{
$this->cache = new ArrayCache(2);
$this->cache->set('foo', 1);
$this->cache->set('bar', 2);
$this->cache->has('foo')->then($this->expectCallableOnceWith(true));
$this->cache->set('baz', 3);
$this->cache->has('foo')->then($this->expectCallableOnceWith(1));
$this->cache->has('bar')->then($this->expectCallableOnceWith(false));
$this->cache->has('baz')->then($this->expectCallableOnceWith(3));
}
}