function DrupalRenderTestCase::testDrupalRenderSorting in Drupal 7
Test sorting by weight.
File
- modules/
simpletest/ tests/ common.test, line 2009 - Tests for common.inc functionality.
Class
- DrupalRenderTestCase
- Tests for drupal_render().
Code
function testDrupalRenderSorting() {
$first = $this
->randomName();
$second = $this
->randomName();
// Build an array with '#weight' set for each element.
$elements = array(
'second' => array(
'#weight' => 10,
'#markup' => $second,
),
'first' => array(
'#weight' => 0,
'#markup' => $first,
),
);
$output = drupal_render($elements);
// The lowest weight element should appear last in $output.
$this
->assertTrue(strpos($output, $second) > strpos($output, $first), 'Elements were sorted correctly by weight.');
// Confirm that the $elements array has '#sorted' set to TRUE.
$this
->assertTrue($elements['#sorted'], "'#sorted' => TRUE was added to the array");
// Pass $elements through element_children() and ensure it remains
// sorted in the correct order. drupal_render() will return an empty string
// if used on the same array in the same request.
$children = element_children($elements);
$this
->assertTrue(array_shift($children) == 'first', 'Child found in the correct order.');
$this
->assertTrue(array_shift($children) == 'second', 'Child found in the correct order.');
// The same array structure again, but with #sorted set to TRUE.
$elements = array(
'second' => array(
'#weight' => 10,
'#markup' => $second,
),
'first' => array(
'#weight' => 0,
'#markup' => $first,
),
'#sorted' => TRUE,
);
$output = drupal_render($elements);
// The elements should appear in output in the same order as the array.
$this
->assertTrue(strpos($output, $second) < strpos($output, $first), 'Elements were not sorted.');
// The order of children with same weight should be preserved.
$element_mixed_weight = array(
'child5' => array(
'#weight' => 10,
),
'child3' => array(
'#weight' => -10,
),
'child1' => array(),
'child4' => array(
'#weight' => 10,
),
'child2' => array(),
'child6' => array(
'#weight' => 10,
),
'child9' => array(),
'child8' => array(
'#weight' => 10,
),
'child7' => array(),
);
$expected = array(
'child3',
'child1',
'child2',
'child9',
'child7',
'child5',
'child4',
'child6',
'child8',
);
$this
->assertEqual($expected, element_children($element_mixed_weight, TRUE), 'Order of elements with the same weight is preserved.');
}