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];
47 * @covers ::processMachineName
49 public function testProcessMachineName() {
50 $form_state = new FormState();
54 '#field_suffix' => 'test_suffix',
55 '#field_prefix' => 'test_prefix',
61 'additional_property' => TRUE,
62 '#additional_property_with_hash' => TRUE,
68 '#type' => 'textfield',
71 'test_machine_name' => $element
74 $form_state->setCompleteForm($complete_form);
76 $language = $this->prophesize(LanguageInterface::class);
77 $language->getId()->willReturn('xx-lolspeak');
79 $language_manager = $this->prophesize(LanguageManagerInterface::class);
80 $language_manager->getCurrentLanguage()->willReturn($language);
82 $csrf_token = $this->prophesize(CsrfTokenGenerator::class);
83 $csrf_token->get('[^a-z0-9_]+')->willReturn('tis-a-fine-token');
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());
90 $element = MachineName::processMachineName($element, $form_state, $complete_form);
91 $settings = $element['#attached']['drupalSettings']['machineName']['#source'];
104 $this->assertEmpty(array_diff_key($settings, array_flip($allowed_options)));
105 foreach ($allowed_options as $key) {
106 $this->assertArrayHasKey($key, $settings);
112 namespace Drupal\Core\Render\Element;
114 if (!function_exists('t')) {
115 function t($string, array $args = []) {
116 return strtr($string, $args);