Same name in this branch
  1. 10 core/tests/Drupal/Tests/Core/Cache/CacheTest.php \Drupal\Tests\Core\Cache\CacheTest
  2. 10 core/modules/views/tests/src/Kernel/Plugin/CacheTest.php \Drupal\Tests\views\Kernel\Plugin\CacheTest
Same name and namespace in other branches
  1. 8.9.x core/tests/Drupal/Tests/Core/Cache/CacheTest.php \Drupal\Tests\Core\Cache\CacheTest
  2. 9 core/tests/Drupal/Tests/Core/Cache/CacheTest.php \Drupal\Tests\Core\Cache\CacheTest

@coversDefaultClass \Drupal\Core\Cache\Cache @group Cache

Hierarchy

Expanded class hierarchy of CacheTest

1 string reference to 'CacheTest'
CacheTestBase.php in core/modules/system/tests/src/Functional/Cache/CacheTestBase.php

File

core/tests/Drupal/Tests/Core/Cache/CacheTest.php, line 20

Namespace

Drupal\Tests\Core\Cache
View source
class CacheTest extends UnitTestCase {

  /**
   * Provides a list of cache tags arrays.
   *
   * @return array
   */
  public function validateTagsProvider() {
    return [
      [
        [],
        FALSE,
      ],
      [
        [
          'foo',
        ],
        FALSE,
      ],
      [
        [
          'foo',
          'bar',
        ],
        FALSE,
      ],
      [
        [
          'foo',
          'bar',
          'llama:2001988',
          'baz',
          'llama:14031991',
        ],
        FALSE,
      ],
      // Invalid.
      [
        [
          FALSE,
        ],
        'Cache tags must be strings, boolean given.',
      ],
      [
        [
          TRUE,
        ],
        'Cache tags must be strings, boolean given.',
      ],
      [
        [
          'foo',
          FALSE,
        ],
        'Cache tags must be strings, boolean given.',
      ],
      [
        [
          NULL,
        ],
        'Cache tags must be strings, NULL given.',
      ],
      [
        [
          'foo',
          NULL,
        ],
        'Cache tags must be strings, NULL given.',
      ],
      [
        [
          1337,
        ],
        'Cache tags must be strings, integer given.',
      ],
      [
        [
          'foo',
          1337,
        ],
        'Cache tags must be strings, integer given.',
      ],
      [
        [
          3.14,
        ],
        'Cache tags must be strings, double given.',
      ],
      [
        [
          'foo',
          3.14,
        ],
        'Cache tags must be strings, double given.',
      ],
      [
        [
          [],
        ],
        'Cache tags must be strings, array given.',
      ],
      [
        [
          'foo',
          [],
        ],
        'Cache tags must be strings, array given.',
      ],
      [
        [
          'foo',
          [
            'bar',
          ],
        ],
        'Cache tags must be strings, array given.',
      ],
      [
        [
          new \stdClass(),
        ],
        'Cache tags must be strings, object given.',
      ],
      [
        [
          'foo',
          new \stdClass(),
        ],
        'Cache tags must be strings, object given.',
      ],
    ];
  }

  /**
   * Provides a list of pairs of cache tags arrays to be merged.
   *
   * @return array
   */
  public static function mergeTagsProvider() {
    return [
      [
        [],
        [],
        [],
      ],
      [
        [
          'bar',
          'foo',
        ],
        [
          'bar',
        ],
        [
          'foo',
        ],
      ],
      [
        [
          'foo',
          'bar',
        ],
        [
          'foo',
        ],
        [
          'bar',
        ],
      ],
      [
        [
          'foo',
          'bar',
        ],
        [
          'foo',
        ],
        [
          'bar',
          'foo',
        ],
      ],
      [
        [
          'foo',
          'bar',
        ],
        [
          'foo',
        ],
        [
          'foo',
          'bar',
        ],
      ],
      [
        [
          'bar',
          'foo',
        ],
        [
          'bar',
          'foo',
        ],
        [
          'foo',
          'bar',
        ],
      ],
      [
        [
          'foo',
          'bar',
        ],
        [
          'foo',
          'bar',
        ],
        [
          'foo',
          'bar',
        ],
      ],
      [
        [
          'bar',
          'foo',
          'llama',
        ],
        [
          'bar',
          'foo',
        ],
        [
          'foo',
          'bar',
        ],
        [
          'llama',
          'foo',
        ],
      ],
    ];
  }

  /**
   * @covers ::mergeTags
   *
   * @dataProvider mergeTagsProvider
   */
  public function testMergeTags(array $expected, ...$cache_tags) {
    $this
      ->assertEqualsCanonicalizing($expected, Cache::mergeTags(...$cache_tags));
  }

  /**
   * Provides a list of pairs of cache tags arrays to be merged.
   *
   * @return array
   */
  public static function mergeMaxAgesProvider() {
    return [
      [
        Cache::PERMANENT,
        Cache::PERMANENT,
        Cache::PERMANENT,
      ],
      [
        60,
        60,
        60,
      ],
      [
        0,
        0,
        0,
      ],
      [
        0,
        60,
        0,
      ],
      [
        0,
        0,
        60,
      ],
      [
        0,
        Cache::PERMANENT,
        0,
      ],
      [
        0,
        0,
        Cache::PERMANENT,
      ],
      [
        60,
        Cache::PERMANENT,
        60,
      ],
      [
        60,
        60,
        Cache::PERMANENT,
      ],
      [
        Cache::PERMANENT,
        Cache::PERMANENT,
        Cache::PERMANENT,
        Cache::PERMANENT,
      ],
      [
        30,
        60,
        60,
        30,
      ],
      [
        0,
        0,
        0,
        0,
      ],
      [
        60,
        Cache::PERMANENT,
        60,
        Cache::PERMANENT,
      ],
      [
        60,
        60,
        Cache::PERMANENT,
        Cache::PERMANENT,
      ],
      [
        60,
        Cache::PERMANENT,
        Cache::PERMANENT,
        60,
      ],
    ];
  }

  /**
   * @covers ::mergeMaxAges
   *
   * @dataProvider mergeMaxAgesProvider
   */
  public function testMergeMaxAges($expected, ...$max_ages) {
    $this
      ->assertSame($expected, Cache::mergeMaxAges(...$max_ages));
  }

  /**
   * Provides a list of pairs of cache contexts arrays to be merged.
   *
   * @return array
   */
  public static function mergeCacheContextsProvide() {
    return [
      [
        [],
        [],
        [],
      ],
      [
        [
          'foo',
        ],
        [],
        [
          'foo',
        ],
      ],
      [
        [
          'foo',
        ],
        [
          'foo',
        ],
        [],
      ],
      [
        [
          'bar',
          'foo',
        ],
        [
          'foo',
        ],
        [
          'bar',
        ],
      ],
      [
        [
          'bar',
          'foo',
        ],
        [
          'bar',
        ],
        [
          'foo',
        ],
      ],
      [
        [
          'foo.bar',
          'foo.foo',
        ],
        [
          'foo.foo',
        ],
        [
          'foo.bar',
        ],
      ],
      [
        [
          'foo.bar',
          'foo.foo',
        ],
        [
          'foo.bar',
        ],
        [
          'foo.foo',
        ],
      ],
      [
        [
          'bar',
          'foo',
          'llama',
        ],
        [],
        [
          'foo',
          'bar',
          'llama',
        ],
      ],
      [
        [
          'bar',
          'foo',
          'llama',
        ],
        [
          'foo',
          'bar',
          'llama',
        ],
        [],
      ],
      [
        [
          'bar',
          'foo',
          'llama',
        ],
        [
          'foo',
        ],
        [
          'foo',
          'bar',
          'llama',
        ],
      ],
      [
        [
          'bar',
          'foo',
          'llama',
        ],
        [
          'foo',
          'bar',
          'llama',
        ],
        [
          'foo',
        ],
      ],
    ];
  }

  /**
   * @covers ::mergeContexts
   *
   * @dataProvider mergeCacheContextsProvide
   */
  public function testMergeCacheContexts(array $expected, ...$contexts) {
    $cache_contexts_manager = $this
      ->prophesize(CacheContextsManager::class);
    $cache_contexts_manager
      ->assertValidTokens(Argument::any())
      ->willReturn(TRUE);
    $container = $this
      ->prophesize(Container::class);
    $container
      ->get('cache_contexts_manager')
      ->willReturn($cache_contexts_manager
      ->reveal());
    \Drupal::setContainer($container
      ->reveal());
    $this
      ->assertEqualsCanonicalizing($expected, Cache::mergeContexts(...$contexts));
  }

  /**
   * Provides a list of pairs of (prefix, suffixes) to build cache tags from.
   *
   * @return array
   */
  public static function buildTagsProvider() {
    return [
      [
        'node',
        [
          1,
        ],
        [
          'node:1',
        ],
      ],
      [
        'node',
        [
          1,
          2,
          3,
        ],
        [
          'node:1',
          'node:2',
          'node:3',
        ],
      ],
      [
        'node',
        [
          3,
          2,
          1,
        ],
        [
          'node:3',
          'node:2',
          'node:1',
        ],
      ],
      [
        'node',
        [
          NULL,
        ],
        [
          'node:',
        ],
      ],
      [
        'node',
        [
          TRUE,
          FALSE,
        ],
        [
          'node:1',
          'node:',
        ],
      ],
      [
        'node',
        [
          'a',
          'z',
          'b',
        ],
        [
          'node:a',
          'node:z',
          'node:b',
        ],
      ],
      // No suffixes, no cache tags.
      [
        '',
        [],
        [],
      ],
      [
        'node',
        [],
        [],
      ],
      // Only suffix values matter, not keys: verify that expectation.
      [
        'node',
        [
          5 => 145,
          4545 => 3,
        ],
        [
          'node:145',
          'node:3',
        ],
      ],
      [
        'node',
        [
          5 => TRUE,
        ],
        [
          'node:1',
        ],
      ],
      [
        'node',
        [
          5 => NULL,
        ],
        [
          'node:',
        ],
      ],
      [
        'node',
        [
          'a' => NULL,
        ],
        [
          'node:',
        ],
      ],
      [
        'node',
        [
          'a' => TRUE,
        ],
        [
          'node:1',
        ],
      ],
      // Test the $glue parameter.
      [
        'config:system.menu',
        [
          'menu_name',
        ],
        [
          'config:system.menu.menu_name',
        ],
        '.',
      ],
    ];
  }

  /**
   * @covers ::buildTags
   *
   * @dataProvider buildTagsProvider
   */
  public function testBuildTags($prefix, array $suffixes, array $expected, $glue = ':') {
    $this
      ->assertEquals($expected, Cache::buildTags($prefix, $suffixes, $glue));
  }

  /**
   * @covers ::keyFromQuery
   * @group legacy
   */
  public function testKeyFromQuery() {
    $this
      ->expectDeprecation('Drupal\\Core\\Cache\\Cache::keyFromQuery is deprecated in drupal:10.1.0 and is removed from drupal:11.0.0. No replacement provided. See https://www.drupal.org/node/3322044');
    $query = new Select(new StubConnection(new StubPDO(), []), 'dne');
    Cache::keyFromQuery($query);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
CacheTest::buildTagsProvider public static function Provides a list of pairs of (prefix, suffixes) to build cache tags from.
CacheTest::mergeCacheContextsProvide public static function Provides a list of pairs of cache contexts arrays to be merged.
CacheTest::mergeMaxAgesProvider public static function Provides a list of pairs of cache tags arrays to be merged.
CacheTest::mergeTagsProvider public static function Provides a list of pairs of cache tags arrays to be merged.
CacheTest::testBuildTags public function @covers ::buildTags
CacheTest::testKeyFromQuery public function @covers ::keyFromQuery @group legacy
CacheTest::testMergeCacheContexts public function @covers ::mergeContexts
CacheTest::testMergeMaxAges public function @covers ::mergeMaxAges
CacheTest::testMergeTags public function @covers ::mergeTags
CacheTest::validateTagsProvider public function Provides a list of cache tags arrays.
PhpUnitWarnings::$deprecationWarnings private static property Deprecation warnings from PHPUnit to raise with @trigger_error().
PhpUnitWarnings::addWarning public function Converts PHPUnit deprecation warnings to E_USER_DEPRECATED.
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.
RandomGeneratorTrait::randomStringValidate Deprecated public function Callback for random string validation.
UnitTestCase::$root protected property The app root. 1
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 305
UnitTestCase::setUpBeforeClass public static function
UnitTestCase::__get public function