Files
wordpress-develop/tests/phpunit/tests/menu/nav-menu.php
T
Sergey Biryukov ddb409edca Build/Test Tools: Implement use of the void solution.
> PHPUnit 8.0.0 introduced a `void` return type declaration to the "fixture" methods – `setUpBeforeClass()`, `setUp()`, `tearDown()` and `tearDownAfterClass()`. As the `void` return type was not introduced until PHP 7.1, this makes it more difficult to create cross-version compatible tests when using fixtures, due to signature mismatches.
>
> The `Yoast\PHPUnitPolyfills\TestCases\TestCase` overcomes the signature mismatch by having two versions. The correct one will be loaded depending on the PHPUnit version being used.
>
> When using this TestCase, if an individual test, or another TestCase which extends this TestCase, needs to overload any of the "fixture" methods, it should do so by using a snake_case variant of the original fixture method name, i.e. `set_up_before_class()`, `set_up()`, `assert_pre_conditions()`, `assert_post_conditions()`, `tear_down()`, and `tear_down_after_class()`.
>
> The snake_case methods will automatically be called by PHPUnit.
>
> > IMPORTANT: The snake_case methods should not call the PHPUnit parent, i.e. do not use `parent::setUp()` from within an overloaded `set_up()` method. If necessary, DO call `parent::set_up()`.

Reference: https://github.com/Yoast/PHPUnit-Polyfills#testcases

This commit renames all declared fixture methods, and calls to parent versions of those fixture methods, from camelCase to snake_case.

Follow-up to [51559-51567].

Props jrf, hellofromTonya, johnbillion, netweb, dd32, pputzer, SergeyBiryukov.
See #46149.

git-svn-id: https://develop.svn.wordpress.org/trunk@51568 602fd350-edb4-49c9-b593-d223f7449a82
2021-08-07 10:29:41 +00:00

234 lines
7.0 KiB
PHP

<?php
/**
* @group menu
*/
class Tests_Nav_Menu_Theme_Change extends WP_UnitTestCase {
/**
* Set up.
*/
function set_up() {
parent::set_up();
// Unregister all nav menu locations.
foreach ( array_keys( get_registered_nav_menus() ) as $location ) {
unregister_nav_menu( $location );
}
}
/**
* Register nav menu locations.
*
* @param array $locations Location slugs.
*/
function register_nav_menu_locations( $locations ) {
foreach ( $locations as $location ) {
register_nav_menu( $location, ucfirst( $location ) );
}
}
/**
* Two themes with one location each should just map, switching to a theme not previously-active.
*
* @covers ::wp_map_nav_menu_locations
*/
function test_one_location_each() {
$this->register_nav_menu_locations( array( 'primary' ) );
$prev_theme_nav_menu_locations = array(
'unique-slug' => 1,
);
$old_next_theme_nav_menu_locations = array(); // It was not active before.
$new_next_theme_nav_menu_locations = wp_map_nav_menu_locations( $old_next_theme_nav_menu_locations, $prev_theme_nav_menu_locations );
$expected_nav_menu_locations = array(
'primary' => 1,
);
$this->assertSame( $expected_nav_menu_locations, $new_next_theme_nav_menu_locations );
}
/**
* Only registered locations should be mapped and returned.
*
* @covers ::wp_map_nav_menu_locations
*/
function test_filter_registered_locations() {
$this->register_nav_menu_locations( array( 'primary', 'secondary' ) );
$prev_theme_nav_menu_locations = array(
'primary' => 1,
'secondary' => 2,
'social' => 3,
);
$old_next_theme_nav_menu_locations = $prev_theme_nav_menu_locations;
$new_next_theme_nav_menu_locations = wp_map_nav_menu_locations( $old_next_theme_nav_menu_locations, $prev_theme_nav_menu_locations );
$expected_nav_menu_locations = array(
'primary' => 1,
'secondary' => 2,
);
$this->assertSame( $expected_nav_menu_locations, $new_next_theme_nav_menu_locations );
}
/**
* Locations with the same name should map, switching to a theme not previously-active.
*
* @covers ::wp_map_nav_menu_locations
*/
function test_locations_with_same_slug() {
$this->register_nav_menu_locations( array( 'primary', 'secondary' ) );
$prev_theme_nav_menu_locations = array(
'primary' => 1,
'secondary' => 2,
);
$old_next_theme_nav_menu_locations = array(); // It was not active before.
$new_next_theme_nav_menu_locations = wp_map_nav_menu_locations( $old_next_theme_nav_menu_locations, $prev_theme_nav_menu_locations );
$expected_nav_menu_locations = $prev_theme_nav_menu_locations;
$this->assertSame( $expected_nav_menu_locations, $new_next_theme_nav_menu_locations );
}
/**
* If the new theme was previously active, we should honor any changes to nav menu mapping done when the other theme was active.
*
* @covers ::wp_map_nav_menu_locations
*/
function test_new_theme_previously_active() {
$this->register_nav_menu_locations( array( 'primary' ) );
$prev_theme_nav_menu_locations = array(
'primary' => 1,
'secondary' => 2,
);
// Nav menu location assignments that were set on the next theme when it was previously active.
$old_next_theme_nav_menu_locations = array(
'primary' => 3,
);
$new_next_theme_nav_menu_locations = wp_map_nav_menu_locations( $old_next_theme_nav_menu_locations, $prev_theme_nav_menu_locations );
$expected_nav_menu_locations = wp_array_slice_assoc( $prev_theme_nav_menu_locations, array_keys( get_registered_nav_menus() ) );
$this->assertSame( $expected_nav_menu_locations, $new_next_theme_nav_menu_locations );
}
/**
* Make educated guesses on theme locations.
*
* @covers ::wp_map_nav_menu_locations
*/
function test_location_guessing() {
$this->register_nav_menu_locations( array( 'primary', 'secondary' ) );
$prev_theme_nav_menu_locations = array(
'header' => 1,
'footer' => 2,
);
$old_next_theme_nav_menu_locations = array();
$new_next_theme_nav_menu_locations = wp_map_nav_menu_locations( $old_next_theme_nav_menu_locations, $prev_theme_nav_menu_locations );
$expected_nav_menu_locations = array(
'primary' => 1,
'secondary' => 2,
);
$this->assertSame( $expected_nav_menu_locations, $new_next_theme_nav_menu_locations );
}
/**
* Make sure two locations that fall in the same group don't get the same menu assigned.
*
* @covers ::wp_map_nav_menu_locations
*/
function test_location_guessing_one_menu_per_group() {
$this->register_nav_menu_locations( array( 'primary' ) );
$prev_theme_nav_menu_locations = array(
'top-menu' => 1,
'secondary' => 2,
);
$old_next_theme_nav_menu_locations = array();
$new_next_theme_nav_menu_locations = wp_map_nav_menu_locations( $old_next_theme_nav_menu_locations, $prev_theme_nav_menu_locations );
$expected_nav_menu_locations = array(
'main' => 1,
);
$this->assertSameSets( $expected_nav_menu_locations, $new_next_theme_nav_menu_locations );
}
/**
* Make sure two locations that fall in the same group get menus assigned from the same group.
*
* @covers ::wp_map_nav_menu_locations
*/
function test_location_guessing_one_menu_per_location() {
$this->register_nav_menu_locations( array( 'primary', 'main' ) );
$prev_theme_nav_menu_locations = array(
'navigation-menu' => 1,
'top-menu' => 2,
);
$old_next_theme_nav_menu_locations = array();
$new_next_theme_nav_menu_locations = wp_map_nav_menu_locations( $old_next_theme_nav_menu_locations, $prev_theme_nav_menu_locations );
$expected_nav_menu_locations = array(
'primary' => 1,
'main' => 2,
);
$this->assertSame( $expected_nav_menu_locations, $new_next_theme_nav_menu_locations );
}
/**
* Technically possible to register menu locations numerically.
*
* @expectedIncorrectUsage register_nav_menus
*
* @covers ::wp_map_nav_menu_locations
*/
function test_numerical_locations() {
$this->register_nav_menu_locations( array( 'primary', 1 ) );
$prev_theme_nav_menu_locations = array(
'main' => 1,
'secondary' => 2,
'tertiary' => 3,
);
$old_next_theme_nav_menu_locations = array();
$new_next_theme_nav_menu_locations = wp_map_nav_menu_locations( $old_next_theme_nav_menu_locations, $prev_theme_nav_menu_locations );
$expected_nav_menu_locations = array(
'primary' => 1,
);
$this->assertSameSets( $expected_nav_menu_locations, $new_next_theme_nav_menu_locations );
}
/**
* Technically possible old nav menu locations were registered numerically.
*
* @expectedIncorrectUsage register_nav_menus
*
* @covers ::wp_map_nav_menu_locations
*/
public function test_numerical_old_locations() {
$this->register_nav_menu_locations( array( 'primary', 1 ) );
$old_nav_menu_locations = array(
'primary' => 1,
'tertiary' => 2,
0 => 3,
);
$next_theme_nav_menu_locations = array();
$new_next_theme_nav_menu_locations = wp_map_nav_menu_locations( $next_theme_nav_menu_locations, $old_nav_menu_locations );
$expected_nav_menu_locations = array(
'primary' => 1,
0 => 3,
);
$this->assertSameSets( $expected_nav_menu_locations, $new_next_theme_nav_menu_locations );
}
}