b37cae9507feb2c85237b7963b719e541abdce78
[yaffs-website] / web / modules / contrib / token / src / Tests / TokenTestTrait.php
1 <?php
2
3 namespace Drupal\token\Tests;
4
5 use Drupal\Core\Entity\EntityInterface;
6 use Drupal\Core\Language\Language;
7 use Drupal\Core\Render\BubbleableMetadata;
8
9 /**
10  * Helper test trait with some added functions for testing.
11  */
12 trait TokenTestTrait {
13
14   function assertToken($type, array $data, $token, $expected, array $options = array()) {
15     return $this->assertTokens($type, $data, array($token => $expected), $options);
16   }
17
18   function assertTokens($type, array $data, array $tokens, array $options = array()) {
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.", array('@type' => $type, '@token' => $token)));
26       }
27       elseif (!isset($replacements[$token])) {
28         $this->fail(t("Token value for @token was not generated.", array('@type' => $type, '@token' => $token)));
29       }
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'.", array('@type' => $type, '@token' => $token, '@actual' => $replacements[$token], '@expected' => $expected)));
32       }
33       else {
34         $this->assertEqual($replacements[$token], $expected, t("Token value for @token was '@actual', expected value '@expected'.", array('@type' => $type, '@token' => $token, '@actual' => $replacements[$token], '@expected' => $expected)));
35       }
36     }
37
38     return $replacements;
39   }
40
41   function mapTokenNames($type, array $tokens = array()) {
42     $return = array();
43     foreach ($tokens as $token) {
44       $return[$token] = "[$type:$token]";
45     }
46     return $return;
47   }
48
49   function assertNoTokens($type, array $data, array $tokens, array $options = array()) {
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.", array('@type' => $type, '@token' => $token)));
56     }
57   }
58
59   function saveAlias($source, $alias, $language = Language::LANGCODE_NOT_SPECIFIED) {
60     $alias = array(
61       'source' => $source,
62       'alias' => $alias,
63       'language' => $language,
64     );
65     \Drupal::service('path.alias_storage')->save($alias['source'], $alias['alias']);
66     return $alias;
67   }
68
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);
72   }
73
74   /**
75    * Make a page request and test for token generation.
76    */
77   function assertPageTokens($url, array $tokens, array $data = array(), array $options = array()) {
78     if (empty($tokens)) {
79       return TRUE;
80     }
81
82     $token_page_tokens = array(
83       'tokens' => $tokens,
84       'data' => $data,
85       'options' => $options,
86     );
87     \Drupal::state()->set('token_page_tokens', $token_page_tokens);
88
89     $options += array('url_options' => array());
90     $this->drupalGet($url, $options['url_options']);
91     $this->refreshVariables();
92     $result = \Drupal::state()->get('token_page_tokens', array());
93
94     if (!isset($result['values']) || !is_array($result['values'])) {
95       return $this->fail('Failed to generate tokens.');
96     }
97
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.", array('@token' => $token)));
101       }
102       elseif (!isset($result['values'][$token])) {
103         $this->fail(t('Failed to generate token @token.', array('@token' => $token)));
104       }
105       else {
106         $this->assertIdentical($result['values'][$token], (string) $expected, t("Token value for @token was '@actual', expected value '@expected'.", array('@token' => $token, '@actual' => $result['values'][$token], '@expected' => $expected)));
107       }
108     }
109   }
110
111 }