wordpress-develop/tests/phpunit/tests
Tonya Mork f3b858cb98 Editor: Introduce minimum height dimensions block support.
This changeset adds the new dimension feature's PHP code for supporting minimum height in the block editor inspector and in global styles. Minimum height is quite useful for defining the minimum vertical dimensions of a block, while allowing it to expand beyond that size. 

In this changeset:

* Adds support in `theme.json`.
* Adds support in the style engine.
* Adds support in `wp_apply_dimensions_support()`.
* Renames the setting from `'__experimentalDimensions'` to `dimensions` in `wp_register_dimensions_support()`.
* Adds PHPUnit tests.

Is renaming `'__experimentalDimensions'` a backwards-compatibility (BC) break?

Though the setting has been in the code since 5.9.0, it was never wired to anything, ie it did not expose any controls or styles. Notice in `wp_register_dimensions_support()` and `wp_apply_dimensions_support()` prior to this changeset, there are inline comments as placeholders for height and width support, but no code.

If a developer opted in to use it, it had no effect.

A search in wp.org's plugin and themes repo showed no instances of this experimental setting.

Given there was no functionality attached to it (until this changeset), no change in behavior or effect from removing it, and no usage found in the plugins and themes repository, it does appear to be a BC break.

References:
* [https://github.com/WordPress/gutenberg/pull/45300 Gutenberg PR 45300]
* [https://github.com/WordPress/gutenberg/pull/45334 Gutenberg PR 45334]

Follow-up to [53076], [52069].

Props andrewserong, aaronrobertshaw , costdev, hellofromTonya, isabel_brison, joen, paaljoachim, mukesh27, ntsekouras, oandregal, ramonopoly.
Fixes #57582.

git-svn-id: https://develop.svn.wordpress.org/trunk@55175 602fd350-edb4-49c9-b593-d223f7449a82
2023-02-01 16:13:49 +00:00
..
admin Tests: Use correct variable in _fake_download_url_non_200_response_code(). 2023-01-05 10:47:19 +00:00
ajax Build/Test Tools: Fix an incorrect inline comment in Tests_Ajax_wpAjaxReplytoComment. 2023-01-12 23:06:20 +00:00
attachment Build/Test Tools: Add and fix @covers tags to the attachments and block-supports test groups. 2022-07-07 21:06:03 +00:00
block-supports Editor: Introduce minimum height dimensions block support. 2023-02-01 16:13:49 +00:00
block-templates Editor: Adds template types, is_wp_suggestion, and fallback template content. 2022-09-20 21:19:10 +00:00
blocks Tests: Resolve some line endings issues in blocks/renderCommentTemplate.php on Windows machines. 2023-01-27 20:49:15 +00:00
bookmark General: Fix 'rel' argument in Tests_Functions_wpListBookmarks test datasets. 2021-12-21 00:10:26 +00:00
canonical Code Modernization: Explicitly declare all properties created in set_up() methods of various test classes. 2022-08-27 12:30:08 +00:00
category Tests: Split the tests from category.php into individual test classes. 2022-10-29 14:38:18 +00:00
comment Comments: Make moderated or disallowed key check case-insensitive for non-Latin words. 2022-11-28 19:42:56 +00:00
compat Code Modernization: Rename parameters that use reserved keywords in phpunit/tests/compat/mbSubstr.php. 2023-01-08 01:13:59 +00:00
cron Cron API: Modify _get_cron_array() to always return an array. 2022-07-29 03:32:58 +00:00
customize Code Modernization: Rename parameters that use reserved keywords in phpunit/tests/customize/setting.php. 2023-01-11 12:21:41 +00:00
date Coding Standards: Fix spacing for incrementors and decrementors in various files. 2022-11-29 21:11:42 +00:00
db Tests: Correct references to set_up() and tear_down() in various DocBlocks. 2022-11-22 21:25:27 +00:00
dependencies Editor: Add inert attribute polyfill. 2023-01-18 11:14:33 +00:00
editor Editor: Add PHPUnit tests for 5.9.0 new functions. 2022-10-04 14:20:18 +00:00
error-protection Tests: Rename classes in phpunit/tests/error-protection/ per the naming conventions. 2021-08-21 15:32:53 +00:00
feed External Libraries: Update Requests library to version 2.0.0. 2022-12-15 21:30:26 +00:00
filesystem Coding Standards: Add visibility to methods in tests/phpunit/tests/. 2021-11-04 15:22:47 +00:00
formatting Code Modernization: Rename parameters that use reserved keywords in phpunit/tests/formatting/sanitizeTrackbackUrls.php. 2023-01-13 14:36:11 +00:00
functions Code Modernization: Rename parameters that use reserved keywords in phpunit/tests/functions/wpRefererField.php. 2023-01-24 15:53:46 +00:00
general Feeds: Add a set of fine-grained filters to disable the different types of feed links separately. 2022-09-14 17:12:20 +00:00
hooks Code Modernization: Rename parameters that use reserved keywords in phpunit/tests/hooks/addFilter.php. 2023-01-17 14:05:38 +00:00
http Tests: Bring some consistency to mocking HTTP requests in unit tests. 2023-01-05 10:21:19 +00:00
image Tests: Use more specific assertions in image saving tests. 2023-01-15 13:36:10 +00:00
import Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
includes Code Modernization: Explicitly declare all properties created in set_up() methods of various test classes. 2022-08-27 12:30:08 +00:00
kses Editor: Add PHPUnit tests for 5.9.0 new functions. 2022-10-04 14:20:18 +00:00
l10n I18N: Introduce switch_to_user_locale(). 2023-01-30 10:25:53 +00:00
link Posts, Post Types: Use persistent caching in get_adjacent_post function. 2023-01-18 11:18:36 +00:00
load Login and Registration: Rename is_login_screen() function to is_login(). 2022-10-10 17:57:52 +00:00
media Tests: Add unit tests for attachment’s file size being included in metadata. 2022-11-22 19:43:25 +00:00
menu Menus: Account for legacy calls to nav_menu_css_class filter. 2022-12-18 23:59:51 +00:00
meta Users: Clear the user_meta cache when clean_user_cache function is called. 2022-12-06 13:52:02 +00:00
multisite Docs: Align spelling with American English. 2023-01-10 09:07:01 +00:00
oembed Tests: Bring some consistency to mocking HTTP requests in unit tests. 2023-01-05 10:21:19 +00:00
option Code Modernization: Rename parameters that use reserved keywords in phpunit/tests/option/themeMods.php. 2023-01-19 17:07:22 +00:00
pluggable Code Modernization: Rename parameters that use reserved keywords in phpunit/tests/pluggable/signatures.php. 2023-01-22 00:15:14 +00:00
pomo Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
post Query: Use WP_Query in get_page_by_path. 2023-01-31 16:54:22 +00:00
privacy Tests: Use the factory method instead of the property. 2022-09-06 22:09:49 +00:00
query Docs: Align spelling with American English. 2023-01-10 09:07:01 +00:00
rest-api Docs: Improve documentation for block pattern properties. 2023-02-01 15:00:19 +00:00
rewrite Tests: Consistently create a post fixture in old date or slug redirect tests. 2022-09-06 01:25:45 +00:00
sitemaps Sitemaps: Prevent invalid provider names throwing errors. 2022-08-05 05:47:56 +00:00
style-engine Editor: Introduce minimum height dimensions block support. 2023-02-01 16:13:49 +00:00
taxonomy Build/Test Tools: Implement use of the void solution. 2021-08-07 10:29:41 +00:00
term Taxonomy: Remove placeholder from WP_Term_Query cache key. 2023-01-18 09:56:55 +00:00
theme Editor: Introduce minimum height dimensions block support. 2023-02-01 16:13:49 +00:00
url Tests: Remove @uses tags from the test suite. 2022-07-08 00:11:15 +00:00
user Coding Standards: Add visibility to methods in tests/phpunit/tests/. 2022-11-29 12:32:37 +00:00
webfonts Themes: Introduce wp_theme_has_theme_json() for public consumption. 2023-01-18 11:38:16 +00:00
widgets Code Modernization: Rename parameters that use reserved keywords in phpunit/tests/widgets/wpWidgetMedia.php. 2023-01-23 16:52:36 +00:00
wp Tests: Move the tests for WP class methods to the wp directory. 2022-10-28 14:08:20 +00:00
xmlrpc Code Modernization: Use correct property in IXR_Message::tag_open(). 2023-01-20 01:34:41 +00:00
actions.php Code Modernization: Explicitly declare all properties in various tests. 2022-08-25 15:34:24 +00:00
adminbar.php Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
auth.php Tests: Use the factory method instead of the property. 2022-09-06 22:09:49 +00:00
avatar.php Media: Add decoding="async" to image attributes. 2022-06-09 05:29:57 +00:00
basic.php Tests: Separate the tests in basic.php for clarity. 2022-07-07 23:55:13 +00:00
block-template-utils.php Coding Standards: Add visibility to methods in tests/phpunit/tests/. 2022-11-29 12:32:37 +00:00
block-template.php Coding Standards: Add visibility to methods in tests/phpunit/tests/. 2022-11-29 12:32:37 +00:00
cache.php Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
canonical.php Canonical: Protect against error for term not exists queries. 2022-11-10 02:59:56 +00:00
comment.php Tests: Use more descriptive name for a wp_new_comment() test. 2022-12-08 15:07:45 +00:00
cron.php Code Modernization: Rename parameters that use reserved keywords in phpunit/tests/cron.php. 2023-01-09 00:40:55 +00:00
db.php Database: Add %i placeholder support to $wpdb->prepare to escape table and column names, take 2. 2023-01-27 18:47:53 +00:00
dependencies.php Coding Standards: Add visibility to Tests_Dependencies::test_enqueue_before_register(). 2022-12-30 03:29:11 +00:00
file.php Code Modernization: Rename parameters that use reserved keywords in phpunit/tests/file.php. 2023-01-13 00:59:29 +00:00
filters.php Tests: Update the terminology used for action or filter names in MockAction class. 2022-07-31 16:25:27 +00:00
functions.php Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
https-detection.php Tests: Bring some consistency to mocking HTTP requests in unit tests. 2023-01-05 10:21:19 +00:00
https-migration.php Coding Standards: Use static closures when not using $this. 2021-08-26 12:57:08 +00:00
kses.php Code Modernization: Rename parameters that use reserved keywords in phpunit/tests/kses.php. 2023-01-24 16:03:26 +00:00
l10n.php Tests: Ensure prerequisites are met for draft length tests in Tests_L10n. 2022-10-01 15:47:13 +00:00
link.php Coding Standards: Add visibility to methods in tests/phpunit/tests/. 2021-11-04 15:22:47 +00:00
locale.php I18N: Initialize WP_Locale array properties. 2023-01-10 13:59:00 +00:00
media.php Media: Allow to omit decoding="async" on tags from wp_get_attachment_image(). 2023-01-31 19:39:51 +00:00
meta.php Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
post.php Code Modernization: Rename parameters that use reserved keywords in phpunit/tests/post.php. 2023-01-23 11:07:13 +00:00
query.php Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
readme.php Tests: Relocate the tests for recommended PHP, MySQL, and MariaDB versions. 2022-10-11 14:25:47 +00:00
rest-api.php Code Modernization: Rename parameters that use reserved keywords in phpunit/tests/rest-api.php. 2023-01-23 12:10:28 +00:00
rewrite.php Code Modernization: Check the return type of parse_url() in url_to_postid(). 2022-10-01 03:23:41 +00:00
robots.php Coding Standards: Use static closures when not using $this. 2021-08-26 12:57:08 +00:00
shortcode.php Code Modernization: Rename parameters that use reserved keywords in phpunit/tests/shortcode.php. 2023-01-23 16:33:57 +00:00
taxonomy.php Tests: Use the factory method instead of the property. 2022-09-06 22:09:49 +00:00
template.php Administration: Allow to wrap Settings sections with custom HTML content. 2022-09-20 09:57:43 +00:00
term.php Tests: Replace some occurrences of assertEquals() with assertSame(). 2022-10-07 01:02:07 +00:00
theme.php Docs: Align spelling with American English. 2022-10-21 21:10:29 +00:00
upload.php Coding Standards: Add visibility to methods in tests/phpunit/tests/. 2021-11-04 15:22:47 +00:00
url.php Tests: Remove @uses tags from the test suite. 2022-07-08 00:11:15 +00:00
user.php Tests: Replace some occurrences of assertEquals() with assertSame(). 2022-10-07 01:02:07 +00:00
utils.php Tests: Correct the @covers tag in a test for strip_ws() utility function. 2022-09-01 19:06:19 +00:00
walker.php Code Modernization: Explicitly declare all properties created in set_up() methods of various test classes. 2022-08-27 12:30:08 +00:00
widgets.php Coding Standards: Add visibility to methods in tests/phpunit/tests/. 2022-11-29 12:32:37 +00:00

<?php
/**
 * Validate recommended versions for dependencies referenced in `readme.html`,
 * based on external site support pages.
 *
 * @group external-http
 */
class Tests_Readme extends WP_UnitTestCase {

	/**
	 * @coversNothing
	 */
	public function test_readme_php_version() {
		$this->markTestSkipped(
			'Temporarily disabled. Test should be re-enabled once WordPress is fully compatible with PHP 8.0+.'
		);

		// This test is designed to only run on trunk.
		$this->skipOnAutomatedBranches();

		$readme = file_get_contents( ABSPATH . 'readme.html' );

		preg_match( '#Recommendations.*PHP</a> version <strong>([0-9.]*)#s', $readme, $matches );

		$response_body = $this->get_response_body( 'https://www.php.net/supported-versions.php' );

		preg_match_all( '#<tr class="stable">\s*<td>\s*<a [^>]*>\s*([0-9.]*)#s', $response_body, $php_matches );

		$this->assertContains( $matches[1], $php_matches[1], "readme.html's Recommended PHP version is too old. Remember to update the WordPress.org Requirements page, too." );
	}

	/**
	 * @coversNothing
	 */
	public function test_readme_mysql_version() {
		// This test is designed to only run on trunk.
		$this->skipOnAutomatedBranches();

		$readme = file_get_contents( ABSPATH . 'readme.html' );

		preg_match( '#Recommendations.*MySQL</a> version <strong>([0-9.]*)#s', $readme, $matches );

		$response_body = $this->get_response_body( "https://dev.mysql.com/doc/relnotes/mysql/{$matches[1]}/en/" );

		// Retrieve the date of the first GA release for the recommended branch.
		preg_match( '#.*(\d{4}-\d{2}-\d{2}), General Availability#s', $response_body, $mysql_matches );

		/*
		 * Per https://www.mysql.com/support/, Oracle actively supports MySQL releases for 5 years from GA release.
		 *
		 * The currently recommended MySQL 5.7 branch moved from active support to extended support on 2020-10-21.
		 * As WordPress core is not fully compatible with MySQL 8.0 at this time, the "supported" period here
		 * is increased to 8 years to include extended support.
		 *
		 * TODO: Reduce this back to 5 years once MySQL 8.0 compatibility is achieved.
		 */
		$mysql_eol    = gmdate( 'Y-m-d', strtotime( $mysql_matches[1] . ' +8 years' ) );
		$current_date = gmdate( 'Y-m-d' );

		$this->assertLessThan( $mysql_eol, $current_date, "readme.html's Recommended MySQL version is too old. Remember to update the WordPress.org Requirements page, too." );
	}

	/**
	 * @coversNothing
	 */
	public function test_readme_mariadb_version() {
		// This test is designed to only run on trunk.
		$this->skipOnAutomatedBranches();

		$readme = file_get_contents( ABSPATH . 'readme.html' );

		preg_match( '#Recommendations.*MariaDB</a> version <strong>([0-9.]*)#s', $readme, $matches );
		$matches[1] = str_replace( '.', '', $matches[1] );

		$response_body = $this->get_response_body( "https://mariadb.com/kb/en/release-notes-mariadb-{$matches[1]}-series/" );

		// Retrieve the date of the first stable release for the recommended branch.
		preg_match( '#.*Stable.*?(\d{2} [A-Za-z]{3} \d{4})#s', $response_body, $mariadb_matches );

		// Per https://mariadb.org/about/#maintenance-policy, MariaDB releases are supported for 5 years.
		$mariadb_eol  = gmdate( 'Y-m-d', strtotime( $mariadb_matches[1] . ' +5 years' ) );
		$current_date = gmdate( 'Y-m-d' );

		$this->assertLessThan( $mariadb_eol, $current_date, "readme.html's Recommended MariaDB version is too old. Remember to update the WordPress.org Requirements page, too." );
	}

	/**
	 * Helper function to retrieve the response body or skip the test on HTTP timeout.
	 *
	 * @param string $url The URL to retrieve the response from.
	 * @return string The response body.
	 */
	public function get_response_body( $url ) {
		$response = wp_remote_get( $url );

		$this->skipTestOnTimeout( $response );

		$response_code = wp_remote_retrieve_response_code( $response );
		$response_body = wp_remote_retrieve_body( $response );

		if ( 200 !== $response_code ) {
			$parsed_url = parse_url( $url );

			$error_message = sprintf(
				'Could not contact %1$s to check versions. Response code: %2$s. Response body: %3$s',
				$parsed_url['host'],
				$response_code,
				$response_body
			);

			if ( 503 === $response_code ) {
				$this->markTestSkipped( $error_message );
			}

			$this->fail( $error_message );
		}

		return $response_body;
	}
}