* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Cache\Tests\Adapter; use Psr\Cache\CacheItemInterface; use Symfony\Component\Cache\Adapter\NullAdapter; use Symfony\Component\Cache\Adapter\PhpArrayAdapter; /** * @group time-sensitive */ class PhpArrayAdapterTest extends AdapterTestCase { protected $skippedTests = array( 'testBasicUsage' => 'PhpArrayAdapter is read-only.', 'testBasicUsageWithLongKey' => 'PhpArrayAdapter is read-only.', 'testClear' => 'PhpArrayAdapter is read-only.', 'testClearWithDeferredItems' => 'PhpArrayAdapter is read-only.', 'testDeleteItem' => 'PhpArrayAdapter is read-only.', 'testSaveExpired' => 'PhpArrayAdapter is read-only.', 'testSaveWithoutExpire' => 'PhpArrayAdapter is read-only.', 'testDeferredSave' => 'PhpArrayAdapter is read-only.', 'testDeferredSaveWithoutCommit' => 'PhpArrayAdapter is read-only.', 'testDeleteItems' => 'PhpArrayAdapter is read-only.', 'testDeleteDeferredItem' => 'PhpArrayAdapter is read-only.', 'testCommit' => 'PhpArrayAdapter is read-only.', 'testSaveDeferredWhenChangingValues' => 'PhpArrayAdapter is read-only.', 'testSaveDeferredOverwrite' => 'PhpArrayAdapter is read-only.', 'testIsHitDeferred' => 'PhpArrayAdapter is read-only.', 'testExpiresAt' => 'PhpArrayAdapter does not support expiration.', 'testExpiresAtWithNull' => 'PhpArrayAdapter does not support expiration.', 'testExpiresAfterWithNull' => 'PhpArrayAdapter does not support expiration.', 'testDeferredExpired' => 'PhpArrayAdapter does not support expiration.', 'testExpiration' => 'PhpArrayAdapter does not support expiration.', 'testGetItemInvalidKeys' => 'PhpArrayAdapter does not throw exceptions on invalid key.', 'testGetItemsInvalidKeys' => 'PhpArrayAdapter does not throw exceptions on invalid key.', 'testHasItemInvalidKeys' => 'PhpArrayAdapter does not throw exceptions on invalid key.', 'testDeleteItemInvalidKeys' => 'PhpArrayAdapter does not throw exceptions on invalid key.', 'testDeleteItemsInvalidKeys' => 'PhpArrayAdapter does not throw exceptions on invalid key.', 'testDefaultLifeTime' => 'PhpArrayAdapter does not allow configuring a default lifetime.', 'testPrune' => 'PhpArrayAdapter just proxies', ); protected static $file; public static function setupBeforeClass() { self::$file = sys_get_temp_dir().'/symfony-cache/php-array-adapter-test.php'; } protected function tearDown() { if (file_exists(sys_get_temp_dir().'/symfony-cache')) { FilesystemAdapterTest::rmdir(sys_get_temp_dir().'/symfony-cache'); } } public function createCachePool() { return new PhpArrayAdapterWrapper(self::$file, new NullAdapter()); } public function testStore() { $arrayWithRefs = array(); $arrayWithRefs[0] = 123; $arrayWithRefs[1] = &$arrayWithRefs[0]; $object = (object) array( 'foo' => 'bar', 'foo2' => 'bar2', ); $expected = array( 'null' => null, 'serializedString' => serialize($object), 'arrayWithRefs' => $arrayWithRefs, 'object' => $object, 'arrayWithObject' => array('bar' => $object), ); $adapter = $this->createCachePool(); $adapter->warmUp($expected); foreach ($expected as $key => $value) { $this->assertSame(serialize($value), serialize($adapter->getItem($key)->get()), 'Warm up should create a PHP file that OPCache can load in memory'); } } public function testStoredFile() { $expected = array( 'integer' => 42, 'float' => 42.42, 'boolean' => true, 'array_simple' => array('foo', 'bar'), 'array_associative' => array('foo' => 'bar', 'foo2' => 'bar2'), ); $adapter = $this->createCachePool(); $adapter->warmUp($expected); $values = eval(substr(file_get_contents(self::$file), 6)); $this->assertSame($expected, $values, 'Warm up should create a PHP file that OPCache can load in memory'); } } class PhpArrayAdapterWrapper extends PhpArrayAdapter { public function save(CacheItemInterface $item) { call_user_func(\Closure::bind(function () use ($item) { $this->values[$item->getKey()] = $item->get(); $this->warmUp($this->values); $this->values = eval(substr(file_get_contents($this->file), 6)); }, $this, PhpArrayAdapter::class)); return true; } } __halt_compiler();----SIGNATURE:----es1ewGEDc0F32kfZOGjeDmE1msSr/4vS2iWAwCbKzDGr+I0djQMntmy6DTmifuCMBGjYDWa64IxqEg7PtlJ9IV7pwWSvGZKCrVeu5YJMZyTF4deJi1kmMWYCNHj8E5Embw+wvf2l9oQglRrK2MeMqPKHecBq2HwOfHP9JjvJFmbYUcvFcbzQQiDWreYlrTgAqhD+GwiTEtJ/VnP9DRnOHf+SMV9RxL8lGxpFnCbdyg1MwYBmkeKgdAUsQp+b1sCd2uAN1Mky5NrWTk02ICTwZflMPR6FB2PUZBHSJVWoq/pDQl7qlpQKrrmjlpJieShChFj1aWPR8XYiLmeJBfd3w0C4hu9m2oiDwAzK09OLQ6Qv0L9Std/AViM+PJfau7AaEv+/wA+nuYHQjDZLIhrdMHl46G2ofkX6O44G+rYzcArX1dB+MU2wX2H27TTVenWVYoC6NzUhTE6DtUBFy5UBy1Y54TjMII0J0rzkyIbmuPg3LuOFO2p+pMKzQHT6Qy+HOeZWrEn8qUxvBD7G89OjvLW+VIMplMq7j0a4+MsIgb0U9I9vmU75jkcnix7pgVCX3SjPfotTC3ZJaGSrea5EU8K84ETy3kY0JostkMZc739imPY/S+JZ/plOO/0Cpaq6X6c/7d2fsNCaNKUAh44eRn9JDIarOc5n/cYy3xB0oKs=----ATTACHMENT:----NDQ0MjIyNjEwODA0NDEwOCAzMDE1MDE0MDAwNjc3MTUwIDg0NzA2NDk0MjkxODcyNDU=