3 namespace Drupal\token\Tests;
5 use Drupal\Core\Entity\EntityInterface;
6 use Drupal\Core\Language\Language;
7 use Drupal\Core\Render\BubbleableMetadata;
10 * Helper test trait with some added functions for testing.
12 trait TokenTestTrait {
14 function assertToken($type, array $data, $token, $expected, array $options = []) {
15 return $this->assertTokens($type, $data, [$token => $expected], $options);
18 function assertTokens($type, array $data, array $tokens, array $options = []) {
19 $input = $this->mapTokenNames($type, array_keys($tokens));
20 $bubbleable_metadata = new BubbleableMetadata();
21 $replacements = \Drupal::token()->generate($type, $input, $data, $options, $bubbleable_metadata);
22 foreach ($tokens as $name => $expected) {
23 $token = $input[$name];
24 if (!isset($expected)) {
25 $this->assertTrue(!isset($replacements[$token]), t("Token value for @token was not generated.", ['@type' => $type, '@token' => $token]));
27 elseif (!isset($replacements[$token])) {
28 $this->fail(t("Token value for @token was not generated.", ['@type' => $type, '@token' => $token]));
30 elseif (!empty($options['regex'])) {
31 $this->assertTrue(preg_match('/^' . $expected . '$/', $replacements[$token]), t("Token value for @token was '@actual', matching regular expression pattern '@expected'.", ['@type' => $type, '@token' => $token, '@actual' => $replacements[$token], '@expected' => $expected]));
34 $this->assertEqual($replacements[$token], $expected, t("Token value for @token was '@actual', expected value '@expected'.", ['@type' => $type, '@token' => $token, '@actual' => $replacements[$token], '@expected' => $expected]));
41 function mapTokenNames($type, array $tokens = []) {
43 foreach ($tokens as $token) {
44 $return[$token] = "[$type:$token]";
49 function assertNoTokens($type, array $data, array $tokens, array $options = []) {
50 $input = $this->mapTokenNames($type, $tokens);
51 $bubbleable_metadata = new BubbleableMetadata();
52 $replacements = \Drupal::token()->generate($type, $input, $data, $options, $bubbleable_metadata);
53 foreach ($tokens as $name) {
54 $token = $input[$name];
55 $this->assertTrue(!isset($replacements[$token]), t("Token value for @token was not generated.", ['@type' => $type, '@token' => $token]));
59 function saveAlias($source, $alias, $language = Language::LANGCODE_NOT_SPECIFIED) {
63 'language' => $language,
65 \Drupal::service('path.alias_storage')->save($alias['source'], $alias['alias']);
69 function saveEntityAlias($entity_type, EntityInterface $entity, $alias, $language = Language::LANGCODE_NOT_SPECIFIED) {
70 $uri = $entity->toUrl()->toArray();
71 return $this->saveAlias($uri['path'], $alias, $language);
75 * Make a page request and test for token generation.
77 function assertPageTokens($url, array $tokens, array $data = [], array $options = []) {
82 $token_page_tokens = [
85 'options' => $options,
87 \Drupal::state()->set('token_page_tokens', $token_page_tokens);
89 $options += ['url_options' => []];
90 $this->drupalGet($url, $options['url_options']);
91 $this->refreshVariables();
92 $result = \Drupal::state()->get('token_page_tokens', []);
94 if (!isset($result['values']) || !is_array($result['values'])) {
95 return $this->fail('Failed to generate tokens.');
98 foreach ($tokens as $token => $expected) {
99 if (!isset($expected)) {
100 $this->assertTrue(!isset($result['values'][$token]) || $result['values'][$token] === $token, t("Token value for @token was not generated.", ['@token' => $token]));
102 elseif (!isset($result['values'][$token])) {
103 $this->fail(t('Failed to generate token @token.', ['@token' => $token]));
106 $this->assertIdentical($result['values'][$token], (string) $expected, t("Token value for @token was '@actual', expected value '@expected'.", ['@token' => $token, '@actual' => $result['values'][$token], '@expected' => $expected]));