class CacheContextsManagerTest
Same name in other branches
- 9 core/tests/Drupal/Tests/Core/Cache/Context/CacheContextsManagerTest.php \Drupal\Tests\Core\Cache\Context\CacheContextsManagerTest
- 8.9.x core/tests/Drupal/Tests/Core/Cache/Context/CacheContextsManagerTest.php \Drupal\Tests\Core\Cache\Context\CacheContextsManagerTest
- 10 core/tests/Drupal/Tests/Core/Cache/Context/CacheContextsManagerTest.php \Drupal\Tests\Core\Cache\Context\CacheContextsManagerTest
@coversDefaultClass \Drupal\Core\Cache\Context\CacheContextsManager @group Cache
Hierarchy
- class \Drupal\Tests\UnitTestCase extends \PHPUnit\Framework\TestCase uses \Drupal\Tests\PhpUnitCompatibilityTrait, \Prophecy\PhpUnit\ProphecyTrait, \Drupal\TestTools\Extension\DeprecationBridge\ExpectDeprecationTrait, \Drupal\Tests\RandomGeneratorTrait
- class \Drupal\Tests\Core\Cache\Context\CacheContextsManagerTest extends \Drupal\Tests\UnitTestCase
Expanded class hierarchy of CacheContextsManagerTest
File
-
core/
tests/ Drupal/ Tests/ Core/ Cache/ Context/ CacheContextsManagerTest.php, line 21
Namespace
Drupal\Tests\Core\Cache\ContextView source
class CacheContextsManagerTest extends UnitTestCase {
/**
* @covers ::optimizeTokens
*
* @dataProvider providerTestOptimizeTokens
*/
public function testOptimizeTokens(array $context_tokens, array $optimized_context_tokens) : void {
$container = $this->getMockBuilder('Drupal\\Core\\DependencyInjection\\Container')
->disableOriginalConstructor()
->getMock();
$container->expects($this->any())
->method('get')
->willReturnMap([
[
'cache_context.a',
Container::EXCEPTION_ON_INVALID_REFERENCE,
new FooCacheContext(),
],
[
'cache_context.a.b',
Container::EXCEPTION_ON_INVALID_REFERENCE,
new FooCacheContext(),
],
[
'cache_context.a.b.c',
Container::EXCEPTION_ON_INVALID_REFERENCE,
new BazCacheContext(),
],
[
'cache_context.x',
Container::EXCEPTION_ON_INVALID_REFERENCE,
new BazCacheContext(),
],
[
'cache_context.a.b.no-optimize',
Container::EXCEPTION_ON_INVALID_REFERENCE,
new NoOptimizeCacheContext(),
],
]);
$cache_contexts_manager = new CacheContextsManager($container, $this->getContextsFixture());
$this->assertSame($optimized_context_tokens, $cache_contexts_manager->optimizeTokens($context_tokens));
}
/**
* Provides a list of context token sets.
*/
public static function providerTestOptimizeTokens() {
return [
[
[
'a',
'x',
],
[
'a',
'x',
],
],
[
[
'a.b',
'x',
],
[
'a.b',
'x',
],
],
// Direct ancestor, single-level hierarchy.
[
[
'a',
'a.b',
],
[
'a',
],
],
[
[
'a.b',
'a',
],
[
'a',
],
],
// Direct ancestor, multi-level hierarchy.
[
[
'a.b',
'a.b.c',
],
[
'a.b',
],
],
[
[
'a.b.c',
'a.b',
],
[
'a.b',
],
],
// Indirect ancestor.
[
[
'a',
'a.b.c',
],
[
'a',
],
],
[
[
'a.b.c',
'a',
],
[
'a',
],
],
// Direct & indirect ancestors.
[
[
'a',
'a.b',
'a.b.c',
],
[
'a',
],
],
[
[
'a',
'a.b.c',
'a.b',
],
[
'a',
],
],
[
[
'a.b',
'a',
'a.b.c',
],
[
'a',
],
],
[
[
'a.b',
'a.b.c',
'a',
],
[
'a',
],
],
[
[
'a.b.c',
'a.b',
'a',
],
[
'a',
],
],
[
[
'a.b.c',
'a',
'a.b',
],
[
'a',
],
],
// Using parameters.
[
[
'a',
'a.b.c:foo',
],
[
'a',
],
],
[
[
'a.b.c:foo',
'a',
],
[
'a',
],
],
[
[
'a.b.c:foo',
'a.b.c',
],
[
'a.b.c',
],
],
// max-age 0 is treated as non-optimizable.
[
[
'a.b.no-optimize',
'a.b',
'a',
],
[
'a.b.no-optimize',
'a',
],
],
];
}
/**
* @covers ::convertTokensToKeys
*/
public function testConvertTokensToKeys() : void {
$container = $this->getMockContainer();
$cache_contexts_manager = new CacheContextsManager($container, $this->getContextsFixture());
$new_keys = $cache_contexts_manager->convertTokensToKeys([
'foo',
'baz:parameterA',
'baz:parameterB',
]);
$expected = [
'[baz:parameterA]=cnenzrgreN',
'[baz:parameterB]=cnenzrgreO',
'[foo]=bar',
];
$this->assertEquals($expected, $new_keys->getKeys());
}
/**
* @covers ::convertTokensToKeys
*/
public function testInvalidContext() : void {
$container = $this->getMockContainer();
$cache_contexts_manager = new CacheContextsManager($container, $this->getContextsFixture());
$this->expectException(\AssertionError::class);
$cache_contexts_manager->convertTokensToKeys([
"non-cache-context",
]);
}
/**
* @covers ::convertTokensToKeys
*
* @dataProvider providerTestInvalidCalculatedContext
*/
public function testInvalidCalculatedContext($context_token) : void {
$container = $this->getMockContainer();
$cache_contexts_manager = new CacheContextsManager($container, $this->getContextsFixture());
$this->expectException(\Exception::class);
$cache_contexts_manager->convertTokensToKeys([
$context_token,
]);
}
/**
* Provides a list of invalid 'baz' cache contexts: the parameter is missing.
*/
public static function providerTestInvalidCalculatedContext() {
return [
[
'baz',
],
[
'baz:',
],
];
}
public function testAvailableContextStrings() : void {
$cache_contexts_manager = new CacheContextsManager($this->getMockContainer(), $this->getContextsFixture());
$contexts = $cache_contexts_manager->getAll();
$this->assertEquals([
"foo",
"baz",
], $contexts);
}
public function testAvailableContextLabels() : void {
$container = $this->getMockContainer();
$cache_contexts_manager = new CacheContextsManager($container, $this->getContextsFixture());
$labels = $cache_contexts_manager->getLabels();
$expected = [
"foo" => "Foo",
];
$this->assertEquals($expected, $labels);
}
protected function getContextsFixture() : array {
return [
'foo',
'baz',
];
}
protected function getMockContainer() {
$container = $this->getMockBuilder('Drupal\\Core\\DependencyInjection\\Container')
->disableOriginalConstructor()
->getMock();
$container->expects($this->any())
->method('get')
->willReturnMap([
[
'cache_context.foo',
Container::EXCEPTION_ON_INVALID_REFERENCE,
new FooCacheContext(),
],
[
'cache_context.baz',
Container::EXCEPTION_ON_INVALID_REFERENCE,
new BazCacheContext(),
],
]);
return $container;
}
/**
* Provides a list of cache context token arrays.
*
* @return array
*/
public static function validateTokensProvider() {
return [
[
[],
FALSE,
],
[
[
'foo',
],
FALSE,
],
[
[
'foo',
'foo.bar',
],
FALSE,
],
[
[
'foo',
'baz:llama',
],
FALSE,
],
// Invalid.
[
[
FALSE,
],
'Cache contexts must be strings, boolean given.',
],
[
[
TRUE,
],
'Cache contexts must be strings, boolean given.',
],
[
[
'foo',
FALSE,
],
'Cache contexts must be strings, boolean given.',
],
[
[
NULL,
],
'Cache contexts must be strings, NULL given.',
],
[
[
'foo',
NULL,
],
'Cache contexts must be strings, NULL given.',
],
[
[
1337,
],
'Cache contexts must be strings, integer given.',
],
[
[
'foo',
1337,
],
'Cache contexts must be strings, integer given.',
],
[
[
3.14,
],
'Cache contexts must be strings, double given.',
],
[
[
'foo',
3.14,
],
'Cache contexts must be strings, double given.',
],
[
[
[],
],
'Cache contexts must be strings, array given.',
],
[
[
'foo',
[],
],
'Cache contexts must be strings, array given.',
],
[
[
'foo',
[
'bar',
],
],
'Cache contexts must be strings, array given.',
],
[
[
new \stdClass(),
],
'Cache contexts must be strings, object given.',
],
[
[
'foo',
new \stdClass(),
],
'Cache contexts must be strings, object given.',
],
// Non-existing.
[
[
'foo.bar',
'qux',
],
'"qux" is not a valid cache context ID.',
],
[
[
'qux',
'baz',
],
'"qux" is not a valid cache context ID.',
],
];
}
/**
* @covers ::validateTokens
*
* @dataProvider validateTokensProvider
*/
public function testValidateContexts(array $contexts, $expected_exception_message) : void {
$container = new ContainerBuilder();
$cache_contexts_manager = new CacheContextsManager($container, [
'foo',
'foo.bar',
'baz',
]);
if ($expected_exception_message !== FALSE) {
$this->expectException('LogicException');
$this->expectExceptionMessage($expected_exception_message);
}
// If it doesn't throw an exception, validateTokens() returns NULL.
$this->assertNull($cache_contexts_manager->validateTokens($contexts));
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overrides |
---|---|---|---|---|
CacheContextsManagerTest::getContextsFixture | protected | function | ||
CacheContextsManagerTest::getMockContainer | protected | function | ||
CacheContextsManagerTest::providerTestInvalidCalculatedContext | public static | function | Provides a list of invalid 'baz' cache contexts: the parameter is missing. | |
CacheContextsManagerTest::providerTestOptimizeTokens | public static | function | Provides a list of context token sets. | |
CacheContextsManagerTest::testAvailableContextLabels | public | function | ||
CacheContextsManagerTest::testAvailableContextStrings | public | function | ||
CacheContextsManagerTest::testConvertTokensToKeys | public | function | @covers ::convertTokensToKeys | |
CacheContextsManagerTest::testInvalidCalculatedContext | public | function | @covers ::convertTokensToKeys | |
CacheContextsManagerTest::testInvalidContext | public | function | @covers ::convertTokensToKeys | |
CacheContextsManagerTest::testOptimizeTokens | public | function | @covers ::optimizeTokens | |
CacheContextsManagerTest::testValidateContexts | public | function | @covers ::validateTokens | |
CacheContextsManagerTest::validateTokensProvider | public static | function | Provides a list of cache context token arrays. | |
ExpectDeprecationTrait::expectDeprecation | public | function | Adds an expected deprecation. | |
ExpectDeprecationTrait::getCallableName | private static | function | Returns a callable as a string suitable for inclusion in a message. | |
ExpectDeprecationTrait::setUpErrorHandler | public | function | Sets up the test error handler. | |
ExpectDeprecationTrait::tearDownErrorHandler | public | function | Tears down the test error handler. | |
RandomGeneratorTrait::getRandomGenerator | protected | function | Gets the random generator for the utility methods. | |
RandomGeneratorTrait::randomMachineName | protected | function | Generates a unique random string containing letters and numbers. | |
RandomGeneratorTrait::randomObject | public | function | Generates a random PHP object. | |
RandomGeneratorTrait::randomString | public | function | Generates a pseudo-random string of ASCII characters of codes 32 to 126. | |
UnitTestCase::$root | protected | property | The app root. | |
UnitTestCase::getClassResolverStub | protected | function | Returns a stub class resolver. | |
UnitTestCase::getConfigFactoryStub | public | function | Returns a stub config factory that behaves according to the passed array. | |
UnitTestCase::getConfigStorageStub | public | function | Returns a stub config storage that returns the supplied configuration. | |
UnitTestCase::getContainerWithCacheTagsInvalidator | protected | function | Sets up a container with a cache tags invalidator. | |
UnitTestCase::getStringTranslationStub | public | function | Returns a stub translation manager that just returns the passed string. | |
UnitTestCase::setUp | protected | function | 355 | |
UnitTestCase::setUpBeforeClass | public static | function |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.