51f84615f4fa5e563ff2da4d85889b07d1c7b76c
[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    * @covers ::processMachineName
47    */
48   public function testProcessMachineName() {
49     $form_state = new FormState();
50
51     $element = [
52       '#id' => 'test',
53       '#field_suffix' => 'test_suffix',
54       '#field_prefix' => 'test_prefix',
55       '#machine_name' => [
56         'source' => [
57           'test_source',
58         ],
59         'maxlength' => 32,
60         'additional_property' => TRUE,
61         '#additional_property_with_hash' => TRUE,
62       ],
63       // The process function requires these to be set. During regular form
64       // building they are always set.
65       '#name' => 'test_machine_name',
66       '#default_value' => NULL,
67     ];
68
69     $complete_form = [
70       'test_source' => [
71         '#type' => 'textfield',
72         '#id' => 'source',
73       ],
74       'test_machine_name' => $element,
75     ];
76
77     $form_state->setCompleteForm($complete_form);
78
79     $language = $this->prophesize(LanguageInterface::class);
80     $language->getId()->willReturn('xx-lolspeak');
81
82     $language_manager = $this->prophesize(LanguageManagerInterface::class);
83     $language_manager->getCurrentLanguage()->willReturn($language);
84
85     $csrf_token = $this->prophesize(CsrfTokenGenerator::class);
86     $csrf_token->get('[^a-z0-9_]+')->willReturn('tis-a-fine-token');
87
88     $container = $this->prophesize(ContainerInterface::class);
89     $container->get('language_manager')->willReturn($language_manager->reveal());
90     $container->get('csrf_token')->willReturn($csrf_token->reveal());
91     \Drupal::setContainer($container->reveal());
92
93     $element = MachineName::processMachineName($element, $form_state, $complete_form);
94     $settings = $element['#attached']['drupalSettings']['machineName']['#source'];
95
96     $allowed_options = [
97       'replace_pattern',
98       'replace',
99       'maxlength',
100       'target',
101       'label',
102       'field_prefix',
103       'field_suffix',
104       'suffix',
105       'replace_token',
106     ];
107     $this->assertEmpty(array_diff_key($settings, array_flip($allowed_options)));
108     foreach ($allowed_options as $key) {
109       $this->assertArrayHasKey($key, $settings);
110     }
111   }
112
113 }
114
115 namespace Drupal\Core\Render\Element;
116
117 if (!function_exists('t')) {
118
119   function t($string, array $args = []) {
120     return strtr($string, $args);
121   }
122
123 }