94026b65414f7f88025e6a81536570bf81f27738
[yaffs-website] / web / core / modules / system / tests / src / Kernel / Form / FormElementMaxlengthTest.php
1 <?php
2
3 namespace Drupal\Tests\system\Kernel\Form;
4
5 use Drupal\Core\Form\FormInterface;
6 use Drupal\Core\Form\FormState;
7 use Drupal\Core\Form\FormStateInterface;
8 use Drupal\KernelTests\KernelTestBase;
9 use Symfony\Component\CssSelector\CssSelectorConverter;
10
11 /**
12  * Tests the maxlength HTML attribute on form elements.
13  *
14  * @group Form
15  */
16 class FormElementMaxlengthTest extends KernelTestBase implements FormInterface {
17
18   /**
19    * {@inheritdoc}
20    */
21   public static $modules = ['system'];
22
23   /**
24    * {@inheritdoc}
25    */
26   public function getFormId() {
27     return 'form_test_maxlength';
28   }
29
30   /**
31    * {@inheritdoc}
32    */
33   public function buildForm(array $form, FormStateInterface $form_state) {
34     $form['title'] = [
35       '#type' => 'textfield',
36       '#maxlength' => 255,
37     ];
38
39     $form['description'] = [
40       '#type' => 'textarea',
41       '#maxlength' => 255,
42     ];
43
44     $form['submit'] = [
45       '#type' => 'submit',
46       '#value' => 'Submit',
47     ];
48
49     return $form;
50   }
51
52   /**
53    * {@inheritdoc}
54    */
55   public function submitForm(array &$form, FormStateInterface $form_state) {}
56
57   /**
58    * {@inheritdoc}
59    */
60   public function validateForm(array &$form, FormStateInterface $form_state) {}
61
62   /**
63    * Ensures maxlength attribute can be used in compatible elements.
64    */
65   public function testAttributes() {
66
67     /** @var \Drupal\Core\Form\FormBuilderInterface $form_builder */
68     $form_builder = $this->container->get('form_builder');
69     $form_state = new FormState();
70     $elements = $form_builder->buildForm($this, $form_state);
71     $this->render($elements);
72
73     $css_selector_converter = new CssSelectorConverter();
74     $elements = $this->xpath($css_selector_converter->toXPath('input[name=title][maxlength=255]'));
75     $this->assertCount(1, $elements, 'Text field has correct maxlength in form.');
76     $elements = $this->xpath($css_selector_converter->toXPath('textarea[name=description][maxlength=255]'));
77     $this->assertCount(1, $elements, 'Textarea field has correct maxlength in form.');
78   }
79
80 }