function FormErrorHandlerTest::testDisplayErrorMessages

Tests display error messages.

@legacy-covers ::handleFormErrors @legacy-covers ::displayErrorMessages

File

core/tests/Drupal/Tests/Core/Form/FormErrorHandlerTest.php, line 58

Class

FormErrorHandlerTest
Tests Drupal\Core\Form\FormErrorHandler.

Namespace

Drupal\Tests\Core\Form

Code

public function testDisplayErrorMessages() : void {
  $messages = [
    'invalid',
    'invalid',
    'invalid',
    'no title given',
    'element is invisible',
    'this missing element is invalid',
  ];
  $this->messenger
    ->expects($this->exactly(count($messages)))
    ->method('addMessage')
    ->with($this->callback(function (string $message) use (&$messages) : bool {
    return array_shift($messages) === $message;
  }), 'error');
  $form = [
    '#parents' => [],
    '#array_parents' => [],
  ];
  $form['test1'] = [
    '#type' => 'textfield',
    '#title' => 'Test 1',
    '#parents' => [
      'test1',
    ],
    '#array_parents' => [
      'test1',
    ],
    '#id' => 'edit-test1',
  ];
  $form['test2'] = [
    '#type' => 'textfield',
    '#title' => 'Test 2 & a half',
    '#parents' => [
      'test2',
    ],
    '#array_parents' => [
      'test2',
    ],
    '#id' => 'edit-test2',
  ];
  $form['fieldset'] = [
    '#parents' => [
      'fieldset',
    ],
    '#array_parents' => [
      'fieldset',
    ],
    'test3' => [
      '#type' => 'textfield',
      '#title' => 'Test 3',
      '#parents' => [
        'fieldset',
        'test3',
      ],
      '#array_parents' => [
        'fieldset',
        'test3',
      ],
      '#id' => 'edit-test3',
    ],
  ];
  $form['test5'] = [
    '#type' => 'textfield',
    '#parents' => [
      'test5',
    ],
    '#array_parents' => [
      'test5',
    ],
    '#id' => 'edit-test5',
  ];
  $form['test6'] = [
    '#type' => 'value',
    '#title' => 'Test 6',
    '#parents' => [
      'test6',
    ],
    '#array_parents' => [
      'test6',
    ],
    '#id' => 'edit-test6',
  ];
  $form_state = new FormState();
  $form_state->setErrorByName('test1', 'invalid');
  $form_state->setErrorByName('test2', 'invalid');
  $form_state->setErrorByName('fieldset][test3', 'invalid');
  $form_state->setErrorByName('test5', 'no title given');
  $form_state->setErrorByName('test6', 'element is invisible');
  $form_state->setErrorByName('missing_element', 'this missing element is invalid');
  $this->formErrorHandler
    ->handleFormErrors($form, $form_state);
  $this->assertSame('invalid', $form['test1']['#errors']);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.