/** * @covers ::merge * @dataProvider providerTestMerge * * This only tests at a high level, because it reuses existing logic. Detailed * tests exist for the existing logic: * * @see \Drupal\Tests\Core\Cache\CacheTest::testMergeTags() * @see \Drupal\Tests\Core\Cache\CacheTest::testMergeMaxAges() * @see \Drupal\Tests\Core\Cache\CacheContextsTest * @see \Drupal\Tests\Core\Render\RendererPlaceholdersTest * @see testMergeAttachmentsLibraryMerging() * @see testMergeAttachmentsFeedMerging() * @see testMergeAttachmentsHtmlHeadMerging() * @see testMergeAttachmentsHtmlHeadLinkMerging() * @see testMergeAttachmentsHttpHeaderMerging() */ public function testMerge(BubbleableMetadata $a, CacheableMetadata $b, BubbleableMetadata $expected) { // Verify that if the second operand is a CacheableMetadata object, not a // BubbleableMetadata object, that BubbleableMetadata::merge() doesn't // attempt to merge assets. if (!$b instanceof BubbleableMetadata) { $renderer = $this->getMockBuilder('Drupal\\Core\\Render\\Renderer')->disableOriginalConstructor()->getMock(); $renderer->expects($this->never())->method('mergeAttachments'); } else { $renderer = $this->getMockBuilder('Drupal\\Core\\Render\\Renderer')->disableOriginalConstructor()->setMethods(NULL)->getMock(); } $cache_contexts_manager = $this->getMockBuilder('Drupal\\Core\\Cache\\Context\\CacheContextsManager')->disableOriginalConstructor()->getMock(); $container = new ContainerBuilder(); $container->set('cache_contexts_manager', $cache_contexts_manager); $container->set('renderer', $renderer); \Drupal::setContainer($container); $this->assertEquals($expected, $a->merge($b)); }