wordpress-develop/tests/phpunit/tests/walker.php
Sergey Biryukov 4a71feb890 Code Modernization: Explicitly declare all properties created in set_up() methods of various test classes.
Dynamic (non-explicitly declared) properties are deprecated as of PHP 8.2 and are expected to become a fatal error in PHP 9.0.

In each of the cases included in this commit, one or more properties are dynamically created in the `set_up()` method of the test class. This commit explicitly declares these properties.

As these properties are being declared on test classes, they are marked as private. Even though the original dynamic property was public, this should not be considered a backward compatibility break as this only involves test classes.

Notes:
* As these properties receive assignments during test runs or a one-time assignment, but the assignment uses a function call or variable access, these properties cannot be changed to class constants, but they should be declared explicitly as properties on the class.
* In `Tests_Theme_CustomHeader`, the `$customize_manager` property is given a default value of `null`, same as it was already being reset to `null` in the `tear_down()` method.
* In `Tests_Privacy_wpPrivacyProcessPersonalDataExportPage` and `Tests_Privacy_wpPrivacyGeneratePersonalDataExportFile` classes, the property name had a leading `_` underscore. This is an outdated PHP 4 practice to indicate a private property. As PHP 4 is no longer supported, the property has been renamed to `$orig_error_level`.
* Along the same lines, in `Tests_Menu_Walker_Nav_Menu`, the property name also had a leading `_` underscore. The property has been renamed to `$orig_wp_nav_menu_max_depth`.
* In the `Tests_Shortcode` class, three properties were already being (re)set in the `set_up() `method, while three others were being set for most tests via the `shortcode_test_shortcode_tag()` method or in the tests themselves. It is ensured now that all six properties are given their initial `null` value in the `set_up()` method and are explicitly declared.

Additionally:
* In the `Tests_User_Session` class, the `set_up()` method is incorrect. No assertions should be executed in fixture methods, but the `set_up()` method contains two assertions. This has not been addressed yet as it is outside the scope of this commit, but should be addressed at a later point in time.

Follow-up to [12/tests], [218/tests], [374/tests], [384/tests], [986/tests], [1106/tests], [1239/tests], [28704], [29221], [29347], [32648], [36519], [37953], [38832], [40142], [40825], [43584], [43768], [44786], [45141], [53557], [53558], [53850], [53851], [53852], [53853], [53854], [53856], [53916], [53935], [53936], [53937], [53938], [53942], [53945].

Props jrf.
See #56033.

git-svn-id: https://develop.svn.wordpress.org/trunk@53948 602fd350-edb4-49c9-b593-d223f7449a82
2022-08-27 12:30:08 +00:00

345 lines
6.9 KiB
PHP

<?php
/**
* @group post
* @group menu
* @group taxonomy
* @group walker
*/
class Tests_Walker extends WP_UnitTestCase {
/**
* @var Walker
*/
private $walker;
public function set_up() {
parent::set_up();
$this->walker = new Walker_Test();
}
public function test_single_item() {
$items = array(
(object) array(
'id' => 1,
'parent' => 0,
),
);
$output = $this->walker->walk( $items, 0 );
$this->assertSame( 1, $this->walker->get_number_of_root_elements( $items ) );
$this->assertSame( '<li>1</li>', $output );
}
public function test_single_item_flat() {
$items = array(
(object) array(
'id' => 1,
'parent' => 0,
),
);
$output = $this->walker->walk( $items, -1 );
$this->assertSame( 1, $this->walker->get_number_of_root_elements( $items ) );
$this->assertSame( '<li>1</li>', $output );
}
public function test_single_item_depth_1() {
$items = array(
(object) array(
'id' => 1,
'parent' => 0,
),
);
$output = $this->walker->walk( $items, 1 );
$this->assertSame( 1, $this->walker->get_number_of_root_elements( $items ) );
$this->assertSame( '<li>1</li>', $output );
}
public function test_multiple_items_single_level() {
$items = array(
(object) array(
'id' => 1,
'parent' => 0,
),
(object) array(
'id' => 2,
'parent' => 0,
),
);
$output = $this->walker->walk( $items, 0 );
$this->assertSame( 2, $this->walker->get_number_of_root_elements( $items ) );
$this->assertSame( '<li>1</li><li>2</li>', $output );
}
public function test_multiple_items_multiple_levels() {
$items = array(
(object) array(
'id' => 1,
'parent' => 0,
),
(object) array(
'id' => 2,
'parent' => 1,
),
);
$output = $this->walker->walk( $items, 0 );
$this->assertSame( 1, $this->walker->get_number_of_root_elements( $items ) );
$this->assertSame( '<li>1<ul><li>2</li></ul></li>', $output );
}
public function test_multiple_items_multiple_levels_flat() {
$items = array(
(object) array(
'id' => 1,
'parent' => 0,
),
(object) array(
'id' => 2,
'parent' => 1,
),
);
$output = $this->walker->walk( $items, -1 );
$this->assertSame( 1, $this->walker->get_number_of_root_elements( $items ) );
$this->assertSame( '<li>1</li><li>2</li>', $output );
}
public function test_multiple_items_multiple_levels_depth_1() {
$items = array(
(object) array(
'id' => 1,
'parent' => 0,
),
(object) array(
'id' => 2,
'parent' => 1,
),
);
$output = $this->walker->walk( $items, 1 );
$this->assertSame( 1, $this->walker->get_number_of_root_elements( $items ) );
$this->assertSame( '<li>1</li>', $output );
}
public function test_multiple_items_multiple_levels_depth_2() {
$items = array(
(object) array(
'id' => 1,
'parent' => 0,
),
(object) array(
'id' => 2,
'parent' => 1,
),
(object) array(
'id' => 3,
'parent' => 2,
),
);
$output = $this->walker->walk( $items, 2 );
$this->assertSame( 1, $this->walker->get_number_of_root_elements( $items ) );
$this->assertSame( '<li>1<ul><li>2</li></ul></li>', $output );
}
public function test_multiple_items_recursive() {
$items = array(
(object) array(
'id' => 1,
'parent' => 2,
),
(object) array(
'id' => 2,
'parent' => 1,
),
);
$output = $this->walker->walk( $items, 0 );
$this->assertSame( 0, $this->walker->get_number_of_root_elements( $items ) );
$this->assertSame( '<li>1<ul><li>2</li></ul></li>', $output );
}
public function test_single_item_child() {
$items = array(
(object) array(
'id' => 1,
'parent' => 3,
),
);
$output = $this->walker->walk( $items, 0 );
$this->assertSame( 0, $this->walker->get_number_of_root_elements( $items ) );
$this->assertSame( '<li>1</li>', $output );
}
public function test_single_item_missing_parent_depth_1() {
$items = array(
(object) array(
'id' => 1,
'parent' => 3,
),
);
$output = $this->walker->walk( $items, 1 );
$this->assertSame( 0, $this->walker->get_number_of_root_elements( $items ) );
// It's not clear what the output of this "should" be.
// Currently the item is simply returned.
$this->assertSame( '<li>1</li>', $output );
// But as we've only asked for the first depth maybe nothing should be returned?
// $this->assertSame( '', $output );
}
public function test_multiple_items_missing_parents() {
$items = array(
(object) array(
'id' => 4,
'parent' => 1,
),
(object) array(
'id' => 5,
'parent' => 2,
),
(object) array(
'id' => 6,
'parent' => 3,
),
);
$output = $this->walker->walk( $items, 0 );
$this->assertSame( 0, $this->walker->get_number_of_root_elements( $items ) );
$this->assertSame( '<li>4</li><li>5</li><li>6</li>', $output );
}
public function test_multiple_items_missing_parents_depth_1() {
$items = array(
(object) array(
'id' => 4,
'parent' => 1,
),
(object) array(
'id' => 5,
'parent' => 2,
),
(object) array(
'id' => 6,
'parent' => 3,
),
);
$output = $this->walker->walk( $items, 1 );
$this->assertSame( 0, $this->walker->get_number_of_root_elements( $items ) );
// It's not clear what the output of this "should" be.
// Currently the first item is simply returned.
$this->assertSame( '<li>4</li>', $output );
// But as we've only asked for the first depth maybe nothing should be returned?
// $this->assertSame( '', $output );
// Or maybe all items which are missing parents should simply be treat top level?
// $this->assertSame( '<li>4</li><li>5</li><li>6</li>', $output );
}
/**
* @ticket 53474
*/
public function test_multiple_items_non_numeric_parent() {
$items = array(
(object) array(
'id' => 1,
'parent' => '',
),
(object) array(
'id' => 2,
'parent' => '',
),
);
$output = $this->walker->walk( $items, 0 );
$this->assertSame( 2, $this->walker->get_number_of_root_elements( $items ) );
$this->assertSame( '<li>1</li><li>2</li>', $output );
$output = $this->walker->paged_walk( $items, 0, 1, 1 );
$this->assertSame( '<li>1</li>', $output );
$output = $this->walker->paged_walk( $items, 0, 2, 1 );
$this->assertSame( '<li>2</li>', $output );
}
}
class Walker_Test extends Walker {
public $tree_type = 'test';
public $db_fields = array(
'parent' => 'parent',
'id' => 'id',
);
public function start_lvl( &$output, $depth = 0, $args = array() ) {
$output .= '<ul>';
}
public function end_lvl( &$output, $depth = 0, $args = array() ) {
$output .= '</ul>';
}
public function start_el( &$output, $item, $depth = 0, $args = array(), $current_page = 0 ) {
$output .= '<li>' . $item->id;
}
public function end_el( &$output, $page, $depth = 0, $args = array() ) {
$output .= '</li>';
}
}