<?php
namespace Symfony\Component\HttpKernel\Tests\HttpCache;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\HttpCache\Esi;
use Symfony\Component\HttpKernel\HttpCache\HttpCache;
use Symfony\Component\HttpKernel\HttpCache\Store;
use Symfony\Component\HttpKernel\HttpKernelInterface;
class HttpCacheTestCase extends \PHPUnit_Framework_TestCase {
protected $kernel;
protected $cache;
protected $caches;
protected $cacheConfig;
protected $request;
protected $response;
protected $responses;
protected $catch;
protected $esi;
protected function setUp() {
if (!class_exists('Symfony\\Component\\HttpFoundation\\Request')) {
$this
->markTestSkipped('The "HttpFoundation" component is not available');
}
$this->kernel = null;
$this->cache = null;
$this->esi = null;
$this->caches = array();
$this->cacheConfig = array();
$this->request = null;
$this->response = null;
$this->responses = array();
$this->catch = false;
$this
->clearDirectory(sys_get_temp_dir() . '/http_cache');
}
protected function tearDown() {
$this->kernel = null;
$this->cache = null;
$this->caches = null;
$this->request = null;
$this->response = null;
$this->responses = null;
$this->cacheConfig = null;
$this->catch = null;
$this->esi = null;
$this
->clearDirectory(sys_get_temp_dir() . '/http_cache');
}
public function assertHttpKernelIsCalled() {
$this
->assertTrue($this->kernel
->hasBeenCalled());
}
public function assertHttpKernelIsNotCalled() {
$this
->assertFalse($this->kernel
->hasBeenCalled());
}
public function assertResponseOk() {
$this
->assertEquals(200, $this->response
->getStatusCode());
}
public function assertTraceContains($trace) {
$traces = $this->cache
->getTraces();
$traces = current($traces);
$this
->assertRegExp('/' . $trace . '/', implode(', ', $traces));
}
public function assertTraceNotContains($trace) {
$traces = $this->cache
->getTraces();
$traces = current($traces);
$this
->assertNotRegExp('/' . $trace . '/', implode(', ', $traces));
}
public function assertExceptionsAreCaught() {
$this
->assertTrue($this->kernel
->isCatchingExceptions());
}
public function assertExceptionsAreNotCaught() {
$this
->assertFalse($this->kernel
->isCatchingExceptions());
}
public function request($method, $uri = '/', $server = array(), $cookies = array(), $esi = false) {
if (null === $this->kernel) {
throw new \LogicException('You must call setNextResponse() before calling request().');
}
$this->kernel
->reset();
$this->store = new Store(sys_get_temp_dir() . '/http_cache');
$this->cacheConfig['debug'] = true;
$this->esi = $esi ? new Esi() : null;
$this->cache = new HttpCache($this->kernel, $this->store, $this->esi, $this->cacheConfig);
$this->request = Request::create($uri, $method, array(), $cookies, array(), $server);
$this->response = $this->cache
->handle($this->request, HttpKernelInterface::MASTER_REQUEST, $this->catch);
$this->responses[] = $this->response;
}
public function getMetaStorageValues() {
$values = array();
foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator(sys_get_temp_dir() . '/http_cache/md', \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::LEAVES_ONLY) as $file) {
$values[] = file_get_contents($file);
}
return $values;
}
public function setNextResponse($statusCode = 200, array $headers = array(), $body = 'Hello World', \Closure $customizer = null) {
$this->kernel = new TestHttpKernel($body, $statusCode, $headers, $customizer);
}
public function setNextResponses($responses) {
$this->kernel = new TestMultipleHttpKernel($responses);
}
public function catchExceptions($catch = true) {
$this->catch = $catch;
}
public static function clearDirectory($directory) {
if (!is_dir($directory)) {
return;
}
$fp = opendir($directory);
while (false !== ($file = readdir($fp))) {
if (!in_array($file, array(
'.',
'..',
))) {
if (is_link($directory . '/' . $file)) {
unlink($directory . '/' . $file);
}
elseif (is_dir($directory . '/' . $file)) {
self::clearDirectory($directory . '/' . $file);
rmdir($directory . '/' . $file);
}
else {
unlink($directory . '/' . $file);
}
}
}
closedir($fp);
}
}