3 namespace Drupal\Tests\Core\Render\Element;
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;
15 * @coversDefaultClass \Drupal\Core\Render\Element\MachineName
18 class MachineNameTest extends UnitTestCase {
21 * @covers ::valueCallback
23 * @dataProvider providerTestValueCallback
25 public function testValueCallback($expected, $input) {
27 $form_state = $this->prophesize(FormStateInterface::class)->reveal();
28 $this->assertSame($expected, MachineName::valueCallback($element, $input, $form_state));
32 * Data provider for testValueCallback().
34 public function providerTestValueCallback() {
36 $data[] = [NULL, FALSE];
37 $data[] = [NULL, NULL];
38 $data[] = ['', ['test']];
39 $data[] = ['test', 'test'];
40 $data[] = ['123', 123];
46 * @covers ::processMachineName
48 public function testProcessMachineName() {
49 $form_state = new FormState();
53 '#field_suffix' => 'test_suffix',
54 '#field_prefix' => 'test_prefix',
60 'additional_property' => TRUE,
61 '#additional_property_with_hash' => TRUE,
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,
71 '#type' => 'textfield',
74 'test_machine_name' => $element,
77 $form_state->setCompleteForm($complete_form);
79 $language = $this->prophesize(LanguageInterface::class);
80 $language->getId()->willReturn('xx-lolspeak');
82 $language_manager = $this->prophesize(LanguageManagerInterface::class);
83 $language_manager->getCurrentLanguage()->willReturn($language);
85 $csrf_token = $this->prophesize(CsrfTokenGenerator::class);
86 $csrf_token->get('[^a-z0-9_]+')->willReturn('tis-a-fine-token');
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());
93 $element = MachineName::processMachineName($element, $form_state, $complete_form);
94 $settings = $element['#attached']['drupalSettings']['machineName']['#source'];
107 $this->assertEmpty(array_diff_key($settings, array_flip($allowed_options)));
108 foreach ($allowed_options as $key) {
109 $this->assertArrayHasKey($key, $settings);
115 namespace Drupal\Core\Render\Element;
117 if (!function_exists('t')) {
119 function t($string, array $args = []) {
120 return strtr($string, $args);