function FormErrorHandlerTest::testSetElementErrorsFromFormState

Same name and namespace in other branches
  1. 10 core/tests/Drupal/Tests/Core/Form/FormErrorHandlerTest.php \Drupal\Tests\Core\Form\FormErrorHandlerTest::testSetElementErrorsFromFormState()
  2. 9 core/tests/Drupal/Tests/Core/Form/FormErrorHandlerTest.php \Drupal\Tests\Core\Form\FormErrorHandlerTest::testSetElementErrorsFromFormState()
  3. 8.9.x core/tests/Drupal/Tests/Core/Form/FormErrorHandlerTest.php \Drupal\Tests\Core\Form\FormErrorHandlerTest::testSetElementErrorsFromFormState()

Tests set element errors from form state.

@legacy-covers ::handleFormErrors @legacy-covers ::setElementErrorsFromFormState

File

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

Class

FormErrorHandlerTest
Tests Drupal\Core\Form\FormErrorHandler.

Namespace

Drupal\Tests\Core\Form

Code

public function testSetElementErrorsFromFormState() : void {
  $form = [
    '#parents' => [],
    '#array_parents' => [],
  ];
  $form['test'] = [
    '#type' => 'textfield',
    '#title' => 'Test',
    '#parents' => [
      'test',
    ],
    '#array_parents' => [
      'test',
    ],
    '#id' => 'edit-test',
  ];
  $form['details'] = [
    '#type' => 'details',
    '#title' => 'Details grouping test',
    '#parents' => [
      'details',
    ],
    '#array_parents' => [
      'details',
    ],
    '#id' => 'edit-details',
  ];
  $form['grouping_test'] = [
    '#type' => 'textfield',
    '#title' => 'Grouping test',
    '#parents' => [
      'grouping_test',
    ],
    '#array_parents' => [
      'grouping_test',
    ],
    '#id' => 'edit-grouping-test',
    '#group' => 'details',
  ];
  $form['grouping_test2'] = [
    '#type' => 'textfield',
    '#title' => 'Grouping test 2',
    '#parents' => [
      'grouping_test2',
    ],
    '#array_parents' => [
      'grouping_test2',
    ],
    '#id' => 'edit-grouping-test2',
    '#group' => 'details',
  ];
  $form['details2'] = [
    '#type' => 'details',
    '#title' => 'Details grouping test 2',
    '#parents' => [
      'details2',
    ],
    '#array_parents' => [
      'details2',
    ],
    '#id' => 'edit-details2',
  ];
  $form['grouping_test3'] = [
    '#type' => 'textfield',
    '#title' => 'Grouping test 3',
    '#parents' => [
      'grouping_test3',
    ],
    '#array_parents' => [
      'grouping_test3',
    ],
    '#id' => 'edit-grouping-test3',
    '#group' => 'details2',
  ];
  $form['fieldset'] = [
    '#type' => 'fieldset',
    '#parents' => [
      'fieldset',
    ],
    '#array_parents' => [
      'fieldset',
    ],
    '#id' => 'edit-fieldset',
    'nested_test' => [
      '#type' => 'textfield',
      '#title' => 'Nested test',
      '#parents' => [
        'fieldset',
        'nested_test',
      ],
      '#array_parents' => [
        'fieldset',
        'nested_test',
      ],
      '#id' => 'edit-nested_test',
    ],
    'nested_test2' => [
      '#type' => 'textfield',
      '#title' => 'Nested test2',
      '#parents' => [
        'fieldset',
        'nested_test2',
      ],
      '#array_parents' => [
        'fieldset',
        'nested_test2',
      ],
      '#id' => 'edit-nested_test2',
    ],
  ];
  $form_state = new FormState();
  $form_state->setErrorByName('test', 'invalid');
  $form_state->setErrorByName('grouping_test', 'invalid');
  $form_state->setErrorByName('grouping_test2', 'invalid');
  $form_state->setErrorByName('fieldset][nested_test', 'invalid');
  $form_state->setErrorByName('fieldset][nested_test2', 'invalid2');
  $this->formErrorHandler
    ->handleFormErrors($form, $form_state);
  $this->assertSame('invalid', $form['test']['#errors']);
  $this->assertSame([
    'grouping_test' => 'invalid',
    'grouping_test2' => 'invalid',
  ], $form['details']['#children_errors']);
  $this->assertSame([
    'fieldset][nested_test' => 'invalid',
    'fieldset][nested_test2' => 'invalid2',
  ], $form['fieldset']['#children_errors']);
  $this->assertEmpty($form['details2']['#children_errors'], 'Children errors are empty for grouping element.');
  $this->assertCount(5, $form['#children_errors']);
}

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