/** * Provides test data for createFromRenderArray(). * * @return array */ public function providerTestCreateFromRenderArray() { $data = []; $empty_metadata = new BubbleableMetadata(); $nonempty_metadata = new BubbleableMetadata(); $nonempty_metadata->setCacheContexts(['qux'])->setCacheTags(['foo:bar'])->setAssets(['settings' => ['foo' => 'bar']]); $empty_render_array = []; $nonempty_render_array = ['#cache' => ['contexts' => ['qux'], 'tags' => ['foo:bar'], 'max-age' => Cache::PERMANENT], '#attached' => ['settings' => ['foo' => 'bar']], '#post_render_cache' => []]; $data[] = [$empty_render_array, $empty_metadata]; $data[] = [$nonempty_render_array, $nonempty_metadata]; return $data; }
public function processOutbound($path, &$options = array(), Request $request = NULL, BubbleableMetadata $bubbleable_metadata = NULL) { if (array_key_exists('purl_context', $options) && $options['purl_context'] == false) { if (count($this->matchedModifiers->getMatched()) && $bubbleable_metadata) { $cacheContexts = $bubbleable_metadata->getCacheContexts(); $cacheContexts[] = 'purl'; $bubbleable_metadata->setCacheContexts($cacheContexts); } return $this->contextHelper->processOutbound($this->matchedModifiers->createContexts(Context::EXIT_CONTEXT), $path, $options, $request, $bubbleable_metadata); } return $this->contextHelper->processOutbound($this->matchedModifiers->createContexts(), $path, $options, $request, $bubbleable_metadata); }
/** * Test path prefix language negotiation and outbound path processing. * * @dataProvider providerTestPathPrefix */ public function testPathPrefix($prefix, $prefixes, $expected_langcode) { $this->languageManager->expects($this->any())->method('getCurrentLanguage')->will($this->returnValue($this->languages[in_array($expected_langcode, ['en', 'de']) ? $expected_langcode : 'en'])); $config = $this->getConfigFactoryStub(['language.negotiation' => ['url' => ['source' => LanguageNegotiationUrl::CONFIG_PATH_PREFIX, 'prefixes' => $prefixes]]]); $request = Request::create('/' . $prefix . '/foo', 'GET'); $method = new LanguageNegotiationUrl(); $method->setLanguageManager($this->languageManager); $method->setConfig($config); $method->setCurrentUser($this->user); $this->assertEquals($expected_langcode, $method->getLangcode($request)); $cacheability = new BubbleableMetadata(); $options = []; $method->processOutbound('foo', $options, $request, $cacheability); $expected_cacheability = new BubbleableMetadata(); if ($expected_langcode) { $this->assertSame($prefix . '/', $options['prefix']); $expected_cacheability->setCacheContexts(['languages:' . LanguageInterface::TYPE_URL]); } else { $this->assertFalse(isset($options['prefix'])); } $this->assertEquals($expected_cacheability, $cacheability); }
/** * @covers ::replace * @covers ::replace */ public function testReplaceWithHookTokensAlterWithBubbleableMetadata() { $this->moduleHandler->expects($this->any())->method('invokeAll')->willReturn([]); $this->moduleHandler->expects($this->any())->method('alter')->willReturnCallback(function ($hook_name, array &$replacements, array $context, BubbleableMetadata $bubbleable_metadata) { $replacements['[node:title]'] = 'hello world'; $bubbleable_metadata->addCacheContexts(['custom_context']); $bubbleable_metadata->addCacheTags(['node:1']); $bubbleable_metadata->setCacheMaxAge(10); }); $node = $this->prophesize('Drupal\\node\\NodeInterface'); $node->getCacheContexts()->willReturn([]); $node->getCacheTags()->willReturn([]); $node->getCacheMaxAge()->willReturn(14); $node = $node->reveal(); $bubbleable_metadata = new BubbleableMetadata(); $bubbleable_metadata->setCacheContexts(['current_user']); $bubbleable_metadata->setCacheMaxAge(12); $result = $this->token->replace('[node:title]', ['node' => $node], [], $bubbleable_metadata); $this->assertEquals('hello world', $result); $this->assertEquals(['node:1'], $bubbleable_metadata->getCacheTags()); $this->assertEquals(['current_user', 'custom_context'], $bubbleable_metadata->getCacheContexts()); $this->assertEquals(10, $bubbleable_metadata->getCacheMaxAge()); }