wordpress-develop/tests/phpunit/tests
Greg Ziółkowski 2ce87aa6f5 Editor: Add Block Bindings API helpers
It is part of the sync from the Gutenberg plugin that introduces the registry for block binding sources required for the new Block Bindings API: WordPress/gutenberg#54536.

See #60282.
Follow-up [57373].
Props czapla, artemiosans, santosguillamot, sc0ttkclark, lgladdy, talldanwp, swissspidy, youknowriad, fabiankaegy, mukesh27.



git-svn-id: https://develop.svn.wordpress.org/trunk@57375 602fd350-edb4-49c9-b593-d223f7449a82
2024-01-29 13:06:09 +00:00
..
admin Administration: Introduce new_admin_email_subject filter. 2024-01-14 10:59:48 +00:00
ajax Tests: Use assertSame() in some newly introduced tests. 2024-01-06 12:59:49 +00:00
attachment Coding Standards: Remove superfluous blank lines at the end of various classes. 2023-09-08 09:30:38 +00:00
block-bindings Editor: Add Block Bindings API helpers 2024-01-29 13:06:09 +00:00
block-supports Editor: fix fluid font division by zero error when min and max viewport widths are equal. 2024-01-23 05:55:49 +00:00
block-templates Tests: Fix tests following r57265. 2024-01-10 21:12:07 +00:00
blocks Block Hooks: Introduce a new hooked_block_{$block_type} filter. 2024-01-25 13:46:49 +00:00
bookmark Tests: Use the function get_num_queries across all unit tests. 2023-05-11 10:05:51 +00:00
canonical Media: Redirect inactive attachment pages for logged-out users. 2024-01-25 17:34:54 +00:00
category Tests: Improve the @group annotation accuracy and consistency. 2023-10-19 13:51:04 +00:00
comment Tests: Improve the @group annotation accuracy and consistency. 2023-10-19 13:51:04 +00:00
compat Tests: Remove some unnecessary function_exists() checks for compat functions. 2023-10-18 10:39:19 +00:00
cron Cron API: Modify _get_cron_array() to always return an array. 2022-07-29 03:32:58 +00:00
customize Tests: Add a @ticket reference for WP_Customize_Manager::trash_changeset_post() test. 2024-01-05 11:38:34 +00:00
date Tests: Add unit tests for wp_checkdate(). 2023-12-12 12:19:38 +00:00
db Docs: Replace "sanity" with "confidence" for inclusive language. 2024-01-03 21:57:32 +00:00
dependencies Script Loader: Only emit CDATA wrapper comments in wp_get_inline_script_tag() for JavaScript. 2024-01-23 17:54:25 +00:00
diff Code Modernization: Use wp_trigger_error() in WP_Text_Diff_Renderer_Table magic methods. 2023-09-07 20:46:53 +00:00
editor Tests: Improve the @group annotation accuracy and consistency. 2023-10-19 13:51:04 +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 Tests: Reduce usage of assertEquals 2023-09-29 15:22:12 +00:00
filesystem Tests: Improve the @group annotation accuracy and consistency. 2023-10-19 13:51:04 +00:00
fonts/font-face Fonts: Get font-family name from 'fontFamily' field. 2023-09-25 21:27:51 +00:00
formatting Tests: Expand sanitize_text_field() tests. 2024-01-27 20:35:27 +00:00
functions Tests: Move wp_parse_list() tests to their own file. 2024-01-14 17:15:49 +00:00
general Tests: Use a @requires annotation for readonly() function test. 2023-10-26 20:31:45 +00:00
hooks Tests: Add hook priority call order tests. 2024-01-09 16:32:14 +00:00
html-api HTML API: Scan all syntax tokens in a document, read modifiable text. 2024-01-24 23:35:46 +00:00
http Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
image Media: Fix handling of multibyte exif description metadata. 2024-01-10 21:57:50 +00:00
import Coding Standards: Remove redundant ignore annotations. 2023-09-28 00:02:47 +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: Rename WP_Translation_Controller::instance() method to get_instance(). 2024-01-25 07:51:12 +00:00
link Posts, Post Types: Don't force trailing slash in get_pagenum_link(). 2023-10-16 00:05:28 +00:00
load Tests: Improve the @group annotation accuracy and consistency. 2023-10-19 13:51:04 +00:00
media Media: Consider inline image CSS width to backfill width and height attributes. 2024-01-16 17:01:30 +00:00
menu Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
meta Revisions: framework for storing post meta revisions. 2023-09-26 15:30:34 +00:00
multisite Coding Standards: Use pre-increment/decrement for stand-alone statements. 2023-09-09 09:26:01 +00:00
oembed Embeds: Ensure the deprecated function print_emoji_styles isn't used 2024-01-17 21:34:24 +00:00
option Options, Meta APIs: Fast follow fixes for option cache priming functions. 2023-10-30 22:56:25 +00:00
pluggable Coding Standards: Use pre-increment/decrement for stand-alone statements. 2023-09-09 09:26:01 +00:00
pomo Code Modernization: Use dirname() with the $levels parameter. 2023-09-11 04:51:09 +00:00
post Docs: Fix broken @covers tag in _wp_post_thumbnail_context_filter() tests. 2023-11-10 22:52:06 +00:00
privacy Docs: Fix various incorrect WP-flavored array specifications. 2023-11-09 09:49:41 +00:00
query Build/Test Tools: Fix unstable query tests. 2024-01-18 18:38:23 +00:00
rest-api Editor: Add original_source and author_text to the templates REST API. 2024-01-27 00:05:24 +00:00
rewrite Coding Standards: Remove superfluous blank lines at the end of various classes. 2023-09-08 09:30:38 +00:00
script-modules Script Loader: Load the modules to the footer in classic themes 2024-01-24 10:37:54 +00:00
sitemaps Sitemaps: add lastmod for individual posts and the homepage. 2023-10-23 15:40:44 +00:00
style-engine Editor: add size and repeat to background image support. 2024-01-09 06:10:09 +00:00
taxonomy Build/Test Tools: Implement use of the void solution. 2021-08-07 10:29:41 +00:00
term Taxonomy: Check for empty term after DB sanitization in wp_insert_term(). 2024-01-08 22:42:49 +00:00
theme Build/Tests: Ensure set_error_handler is cleaned up. 2024-01-26 00:52:39 +00:00
url Tests: Second pass at merging file-level and class-level DocBlocks in various unit test files. 2023-03-03 14:42:42 +00:00
user Docs: Correct the WP_User Query location reference in query cache tests. 2024-01-22 19:40:18 +00:00
widgets Tests: Reduce usage of assertEquals 2023-09-29 15:22:12 +00:00
wp Tests: Move the tests for WP class methods to the wp directory. 2022-10-28 14:08:20 +00:00
xmlrpc XML-RPC: Add alt attribute value to media item API. 2023-09-20 19:29:30 +00:00
actions.php Tests: Add hook priority call order tests. 2024-01-09 16:32:14 +00:00
adminbar.php Tests: Add tests to ensure the contribute Toolbar node is added when appropriate. 2023-07-13 12:39:42 +00:00
auth.php REST API: Correct parsing of password from Authorization header when processing Application Password credentials. 2023-10-09 14:47:57 +00:00
avatar.php Coding Standards: Remove superfluous blank lines at the end of various classes. 2023-09-08 09:30:38 +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 Tests: Improve code coverage for _build_block_template_result_from_file 2023-10-23 05:36:50 +00:00
block-template.php Themes: Improve the performance of _get_block_templates_paths. 2023-12-20 20:00:04 +00:00
cache.php Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
canonical.php Media: Redirect inactive attachment pages for logged-out users. 2024-01-25 17:34:54 +00:00
comment.php Tests: Reset the current user before performing assertions in some comment tests. 2023-10-15 08:07:11 +00:00
cron.php Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
db.php Database: Reinstate wpdb::$use_mysqli property. 2023-11-08 20:31:34 +00:00
dependencies.php Coding Standards: Remove superfluous blank lines at the end of various functions. 2023-09-08 10:01:14 +00:00
file.php Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
filters.php Tests: Add hook priority call order tests. 2024-01-09 16:32:14 +00:00
functions.php Tests: Move wp_parse_list() tests to their own file. 2024-01-14 17:15:49 +00:00
https-detection.php Security: remove the cron event that checked for https support. 2023-09-22 19:06:45 +00:00
https-migration.php Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
kses.php KSES: Add background-repeat to the list of safe CSS properties. 2023-12-26 14:22:45 +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 Posts, Post Types: Don't force trailing slash in get_pagenum_link(). 2023-10-16 00:05:28 +00:00
locale.php I18N: Introduce word_count_type property to WP_Locale. 2023-02-07 17:26:14 +00:00
media.php Themes: Skip wrapping block template for singular content with a main query loop when the template was injected from outside the current theme. 2023-10-27 18:16:05 +00:00
meta.php Tests: Reduce usage of assertEquals 2023-09-29 15:22:12 +00:00
post.php Docs: Replace "sanity" with "confidence" for inclusive language. 2024-01-03 21:57:32 +00:00
query.php Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
readme.php General: Bump the recommended MySQL version in readme.html. 2023-10-22 09:03:12 +00:00
rest-api.php Tests: Avoid an infinite loop in Spy_REST_Server if a non-existing method is called. 2023-11-23 14:39:16 +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: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
shortcode.php Coding Standards: Remove superfluous blank lines at the end of various functions. 2023-09-08 10:01:14 +00:00
taxonomy.php Taxonomy: add taxonomy for user pattern categories. 2023-09-21 04:23:12 +00:00
template.php Themes: Deprecate usage of TEMPLATEPATH and STYLESHEETPATH constants. 2023-09-20 17:25:26 +00:00
term.php Tests: Improve the @group annotation accuracy and consistency. 2023-10-19 13:51:04 +00:00
theme-previews.php Editor: Add function prefix to avoid conflicts. 2023-10-02 22:40:36 +00:00
theme.php Tests: Use assertSame() in some newly introduced tests. 2024-01-06 12:59:49 +00:00
upload.php Coding Standards: Remove superfluous blank lines at the end of various classes. 2023-09-08 09:30:38 +00:00
url.php Coding Standards: Use pre-increment/decrement for stand-alone statements. 2023-09-09 09:26:01 +00:00
user.php Tests: Reduce usage of assertEquals 2023-09-29 15:22:12 +00:00
utils.php Coding Standards: Remove superfluous blank lines at the end of various functions. 2023-09-08 10:01:14 +00:00
vars.php Tests: Improve the @group annotation accuracy and consistency. 2023-10-19 13:51:04 +00:00
walker.php Coding Standards: Remove superfluous blank lines at the end of various functions. 2023-09-08 10:01:14 +00:00
widgets.php Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +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 8.0 branch moved from active support to extended support on 2023-04-19.
		 * As WordPress core may not be fully compatible with MySQL 8.1 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.1 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;
	}
}