function ElementTest::testChildren

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

Tests the children() method.

File

core/tests/Drupal/Tests/Core/Render/ElementTest.php, line 55

Class

ElementTest
@coversDefaultClass <a href="/api/drupal/core%21lib%21Drupal%21Core%21Render%21Element.php/class/Element/11.x" title="Provides helper methods for Drupal render elements." class="local">\Drupal\Core\Render\Element</a> @group Render

Namespace

Drupal\Tests\Core\Render

Code

public function testChildren() : void {
    $element = [
        'child2' => [
            '#weight' => 10,
        ],
        'child1' => [
            '#weight' => 0,
        ],
        'child3' => [
            '#weight' => 20,
        ],
        '#property' => 'property',
    ];
    $expected = [
        'child2',
        'child1',
        'child3',
    ];
    $element_copy = $element;
    $this->assertSame($expected, Element::children($element_copy));
    // If #sorted is already set, no sorting should happen.
    $element_copy = $element;
    $element_copy['#sorted'] = TRUE;
    $expected = [
        'child2',
        'child1',
        'child3',
    ];
    $this->assertSame($expected, Element::children($element_copy, TRUE));
    // Test with weight sorting, #sorted property should be added.
    $expected = [
        'child1',
        'child2',
        'child3',
    ];
    $element_copy = $element;
    $this->assertSame($expected, Element::children($element_copy, TRUE));
    $this->assertArrayHasKey('#sorted', $element_copy);
    $this->assertTrue($element_copy['#sorted']);
    // The order should stay the same if no weights present.
    $element_no_weight = [
        'child2' => [],
        'child1' => [],
        'child3' => [],
        '#property' => 'property',
    ];
    $expected = [
        'child2',
        'child1',
        'child3',
    ];
    $this->assertSame($expected, Element::children($element_no_weight, TRUE));
    // The order of children with same weight should be preserved.
    $element_mixed_weight = [
        'child5' => [
            '#weight' => 10,
        ],
        'child3' => [
            '#weight' => -10,
        ],
        'child1' => [],
        'child4' => [
            '#weight' => 10,
        ],
        'child2' => [],
    ];
    $expected = [
        'child3',
        'child1',
        'child2',
        'child5',
        'child4',
    ];
    $this->assertSame($expected, Element::children($element_mixed_weight, TRUE));
}

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