Commit cf94492e authored by Alex Pott's avatar Alex Pott
Browse files

Issue #565220 by voleger, Yogesh Pawar, gpk, alexpott: Fix Weight form element behavior

parent 877e4a81
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -59,6 +59,11 @@ public static function processWeight(&$element, FormStateInterface $form_state,
      for ($n = (-1 * $element['#delta']); $n <= $element['#delta']; $n++) {
        $weights[$n] = $n;
      }
      $default_value = (int) $element['#default_value'];
      if (!isset($weights[$default_value])) {
        $weights[$default_value] = $default_value;
        ksort($weights);
      }
      $element['#options'] = $weights;
      $element += $element_info_manager->getInfo('select');
    }
+52 −0
Original line number Diff line number Diff line
<?php

namespace Drupal\Tests\Core\Render\Element;

use Drupal\Core\Form\FormState;
use Drupal\Core\Render\Element\Weight;
use Drupal\KernelTests\KernelTestBase;

/**
 * @coversDefaultClass \Drupal\Core\Render\Element\Weight
 * @group Render
 */
class WeightTest extends KernelTestBase {

  /**
   * {@inheritdoc}
   */
  protected static $modules = ['system'];

  /**
   * {@inheritdoc}
   */
  protected function setUp() {
    parent::setUp();
    $this->installConfig(['system']);
  }

  /**
   * Test existing #default_value value in #options list.
   *
   * @covers ::processWeight
   */
  public function testProcessWeight() {
    $element = [];
    $form_state = new FormState();
    $complete_form = [];

    $element_object = new Weight([], 'weight', []);
    $info = $element_object->getInfo();
    $element += $info;

    $element['#default_value'] = $element['#delta'] + 5;

    Weight::processWeight($element, $form_state, $complete_form);

    $this->assertTrue(
      isset($element['#options'][$element['#default_value']]),
      'Default value exists in the #options list'
    );
  }

}