0dcdc582903569bf4c1a491e6c439f53f375c15e
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Render / Element / MachineNameTest.php
1 <?php
2
3 namespace Drupal\Tests\Core\Render\Element;
4
5 use Drupal\Core\Access\CsrfTokenGenerator;
6 use Drupal\Core\Form\FormState;
7 use Drupal\Core\Form\FormStateInterface;
8 use Drupal\Core\Language\LanguageInterface;
9 use Drupal\Core\Language\LanguageManagerInterface;
10 use Drupal\Core\Render\Element\MachineName;
11 use Drupal\Tests\UnitTestCase;
12 use Symfony\Component\DependencyInjection\ContainerInterface;
13
14 /**
15  * @coversDefaultClass \Drupal\Core\Render\Element\MachineName
16  * @group Render
17  */
18 class MachineNameTest extends UnitTestCase {
19
20   /**
21    * @covers ::valueCallback
22    *
23    * @dataProvider providerTestValueCallback
24    */
25   public function testValueCallback($expected, $input) {
26     $element = [];
27     $form_state = $this->prophesize(FormStateInterface::class)->reveal();
28     $this->assertSame($expected, MachineName::valueCallback($element, $input, $form_state));
29   }
30
31   /**
32    * Data provider for testValueCallback().
33    */
34   public function providerTestValueCallback() {
35     $data = [];
36     $data[] = [NULL, FALSE];
37     $data[] = [NULL, NULL];
38     $data[] = ['', ['test']];
39     $data[] = ['test', 'test'];
40     $data[] = ['123', 123];
41
42     return $data;
43   }
44
45
46   /**
47    * @covers ::processMachineName
48    */
49   public function testProcessMachineName() {
50     $form_state = new FormState();
51
52     $element = [
53       '#id' => 'test',
54       '#field_suffix' => 'test_suffix',
55       '#field_prefix' => 'test_prefix',
56       '#machine_name' => [
57         'source' => [
58           'test_source',
59         ],
60         'maxlength' => 32,
61         'additional_property' => TRUE,
62         '#additional_property_with_hash' => TRUE,
63       ]
64     ];
65
66     $complete_form = [
67       'test_source' => [
68         '#type' => 'textfield',
69         '#id' => 'source',
70       ],
71       'test_machine_name' => $element
72     ];
73
74     $form_state->setCompleteForm($complete_form);
75
76     $language = $this->prophesize(LanguageInterface::class);
77     $language->getId()->willReturn('xx-lolspeak');
78
79     $language_manager = $this->prophesize(LanguageManagerInterface::class);
80     $language_manager->getCurrentLanguage()->willReturn($language);
81
82     $csrf_token = $this->prophesize(CsrfTokenGenerator::class);
83     $csrf_token->get('[^a-z0-9_]+')->willReturn('tis-a-fine-token');
84
85     $container = $this->prophesize(ContainerInterface::class);
86     $container->get('language_manager')->willReturn($language_manager->reveal());
87     $container->get('csrf_token')->willReturn($csrf_token->reveal());
88     \Drupal::setContainer($container->reveal());
89
90     $element = MachineName::processMachineName($element, $form_state, $complete_form);
91     $settings = $element['#attached']['drupalSettings']['machineName']['#source'];
92
93     $allowed_options = [
94       'replace_pattern',
95       'replace',
96       'maxlength',
97       'target',
98       'label',
99       'field_prefix',
100       'field_suffix',
101       'suffix',
102       'replace_token',
103     ];
104     $this->assertEmpty(array_diff_key($settings, array_flip($allowed_options)));
105     foreach ($allowed_options as $key) {
106       $this->assertArrayHasKey($key, $settings);
107     }
108   }
109
110 }
111
112 namespace Drupal\Core\Render\Element;
113
114 if (!function_exists('t')) {
115   function t($string, array $args = []) {
116     return strtr($string, $args);
117   }
118 }