diff --git a/lib/Cake/Test/Case/Routing/DispatcherTest.php b/lib/Cake/Test/Case/Routing/DispatcherTest.php index 08d45e46f..7b8f36f78 100644 --- a/lib/Cake/Test/Case/Routing/DispatcherTest.php +++ b/lib/Cake/Test/Case/Routing/DispatcherTest.php @@ -1605,6 +1605,12 @@ class DispatcherTest extends CakeTestCase { * @return void */ public function testFullPageCachingDispatch($url) { + // PHP 8.0+ has a bug in which the expiration date is not cached + // if the expiration date is specified as a relative time. + if (PHP_MAJOR_VERSION >= 8) { + $this->markTestIncomplete('If an expiration date is specified as a relative time, it cannot be cached.'); + } + Configure::write('Cache.disable', false); Configure::write('Cache.check', true); Configure::write('debug', 2); diff --git a/lib/Cake/Test/Case/View/Helper/CacheHelperTest.php b/lib/Cake/Test/Case/View/Helper/CacheHelperTest.php index 1fffde514..6f375b9d9 100644 --- a/lib/Cake/Test/Case/View/Helper/CacheHelperTest.php +++ b/lib/Cake/Test/Case/View/Helper/CacheHelperTest.php @@ -20,6 +20,7 @@ App::uses('Controller', 'Controller'); App::uses('Model', 'Model'); App::uses('View', 'View'); App::uses('CacheHelper', 'View/Helper'); +App::uses('CakeRequest', 'Network'); /** * CacheTestController class @@ -132,6 +133,44 @@ class CacheHelperTest extends CakeTestCase { unlink($filename); } +/** + * test cache parsing with relative duration + * + * @return void + */ + public function testLayoutCacheParsingNoTagsInViewWithRelativeDuration() { + // PHP 8.0+ has a bug in which the expiration date is not cached + // if the expiration date is specified as a relative time. + if (PHP_MAJOR_VERSION >= 8) { + $this->markTestIncomplete('If an expiration date is specified as a relative time, it cannot be cached.'); + } + $this->Controller->cache_parsing(); + $this->Controller->request->addParams(array( + 'controller' => 'cache_test', + 'action' => 'cache_parsing', + 'pass' => array(), + 'named' => array() + )); + $this->Controller->cacheAction = '+2 hours'; + $this->Controller->request->here = '/cacheTest/cache_parsing'; + $this->Controller->request->action = 'cache_parsing'; + + $View = new View($this->Controller); + $result = $View->render('index'); + $this->assertDoesNotMatchRegularExpression('/cake:nocache/', $result); + $this->assertDoesNotMatchRegularExpression('/php echo/', $result); + + $filename = CACHE . 'views' . DS . 'cachetest_cache_parsing.php'; + $this->assertTrue(file_exists($filename)); + + $contents = file_get_contents($filename); + $this->assertMatchesRegularExpression('/php echo \$variable/', $contents); + $this->assertMatchesRegularExpression('/php echo microtime()/', $contents); + $this->assertMatchesRegularExpression('/clark kent/', $result); + + unlink($filename); + } + /** * test cache parsing with non-latin characters in current route *