wordpress-develop/tests/phpunit/tests
Isabel Brison 1a168a199e Editor: disable default style engine optimisation.
Stops style engine from combining CSS selectors by default so that rule order is preserved.

Props ramonopoly, rajinsharwar, timdix, costdev, audrasjb, SergeyBiryukov, JeffPaul, mukesh27.
Fixes #58811.


git-svn-id: https://develop.svn.wordpress.org/trunk@56574 602fd350-edb4-49c9-b593-d223f7449a82
2023-09-14 04:54:22 +00:00
..
admin Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
ajax Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
attachment Coding Standards: Remove superfluous blank lines at the end of various classes. 2023-09-08 09:30:38 +00:00
block-supports Coding Standards: Remove superfluous blank lines at the end of various files. 2023-09-07 14:57:30 +00:00
block-templates Editor: Remove need for template prefix in get_template_hierarchy. 2023-02-02 19:36:29 +00:00
blocks Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
bookmark Tests: Use the function get_num_queries across all unit tests. 2023-05-11 10:05:51 +00:00
canonical Coding Standards: Remove superfluous blank lines at the end of various classes. 2023-09-08 09:30:38 +00:00
category Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
comment Coding Standards: Use pre-increment/decrement for stand-alone statements. 2023-09-09 09:26:01 +00:00
compat Coding Standards: Remove superfluous blank lines at the end of various functions. 2023-09-08 10:01:14 +00:00
cron Cron API: Modify _get_cron_array() to always return an array. 2022-07-29 03:32:58 +00:00
customize Coding Standards: Remove superfluous blank lines at the end of various functions. 2023-09-08 10:01:14 +00:00
date Coding Standards: Use pre-increment/decrement for stand-alone statements. 2023-09-09 09:26:01 +00:00
db Coding Standards: Remove superfluous blank lines at the end of various functions. 2023-09-08 10:01:14 +00:00
dependencies Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +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 Coding Standards: Remove superfluous blank lines at the end of various functions. 2023-09-08 10:01:14 +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 Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
filesystem Code Modernization: Use dirname() with the $levels parameter. 2023-09-11 04:51:09 +00:00
fonts/font-face Fonts: Removes static instance in wp_print_font_faces(). 2023-09-07 17:28:59 +00:00
formatting Docs: Fix typo in a comment in wp_trim_excerpt(). 2023-09-13 08:06:26 +00:00
functions Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
general Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
hooks Coding Standards: Remove superfluous blank lines at the end of various classes. 2023-09-08 09:30:38 +00:00
html-api HTML API: Skip over contents of RAWTEXT elements such as STYLE. 2023-09-13 12:47:25 +00:00
http Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
image Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
import Coding Standards: Use pre-increment/decrement for stand-alone statements. 2023-09-09 09:26:01 +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 Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
link Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
load General: Rename wp_in_development_mode() to wp_is_development_mode(). 2023-07-17 14:48:48 +00:00
media Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
menu Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
meta Coding Standards: Remove superfluous blank lines at the end of various functions. 2023-09-08 10:01:14 +00:00
multisite Coding Standards: Use pre-increment/decrement for stand-alone statements. 2023-09-09 09:26:01 +00:00
oembed Coding Standards: Use pre-increment/decrement for stand-alone statements. 2023-09-09 09:26:01 +00:00
option Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +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 Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
privacy Coding Standards: Remove superfluous blank lines at the end of various classes. 2023-09-08 09:30:38 +00:00
query Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
rest-api REST API: Avoid unnecessarily preparing item links REST API index. 2023-09-13 14:32:33 +00:00
rewrite Coding Standards: Remove superfluous blank lines at the end of various classes. 2023-09-08 09:30:38 +00:00
sitemaps Tests: Use the data_ prefix for various data provider methods. 2023-03-19 12:03:30 +00:00
style-engine Editor: disable default style engine optimisation. 2023-09-14 04:54:22 +00:00
taxonomy Build/Test Tools: Implement use of the void solution. 2021-08-07 10:29:41 +00:00
term Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
theme Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +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 Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
widgets Coding Standards: Use pre-increment/decrement for stand-alone statements. 2023-09-09 09:26:01 +00:00
wp Tests: Move the tests for WP class methods to the wp directory. 2022-10-28 14:08:20 +00:00
xmlrpc Coding Standards: Remove superfluous blank lines at the end of various functions. 2023-09-08 10:01:14 +00:00
actions.php Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +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 Login and Registration: Improve test coverage for sign on related functions 2023-08-24 19:12:33 +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 Themes: Add test for theme atttibute in file-based block template. 2023-09-13 12:03:14 +00:00
block-template.php Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
cache.php Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
canonical.php Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
comment.php Coding Standards: Remove superfluous blank lines at the end of various functions. 2023-09-08 10:01:14 +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: Remove support for the mysql extension. 2023-08-26 13:01:05 +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 Coding Standards: Remove superfluous blank lines at the end of various functions. 2023-09-08 10:01:14 +00:00
functions.php Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
https-detection.php Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +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 support for CSS repeat() function. 2023-06-20 02:29:18 +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: Introduce word_count_type property to WP_Locale. 2023-02-07 17:26:14 +00:00
media.php Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
meta.php Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
post.php Build/Test Tools: Update PHPUnit Polyfills to version 1.1.0. 2023-08-21 15:53:04 +00:00
query.php Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +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 REST API: Avoid unnecessarily preparing item links REST API index. 2023-09-13 14:32:33 +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 Coding Standards: Remove superfluous blank lines at the end of various functions. 2023-09-08 10:01:14 +00:00
template.php Coding Standards: Remove superfluous blank lines at the end of various classes. 2023-09-08 09:30:38 +00:00
term.php Tests: Replace some occurrences of assertEquals() with assertSame(). 2022-10-07 01:02:07 +00:00
theme-previews.php Editor: Prevent possibility of a fatal error when previewing block themes. 2023-09-06 21:46:09 +00:00
theme.php Docs: Align spelling with American English. 2022-10-21 21:10:29 +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 Coding Standards: Remove superfluous blank lines at the end of various functions. 2023-09-08 10:01:14 +00:00
utils.php Coding Standards: Remove superfluous blank lines at the end of various functions. 2023-09-08 10:01:14 +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 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;
	}
}