diff options
Diffstat (limited to 'tests/phpunit/includes/abstract-testcase.php')
-rw-r--r-- | tests/phpunit/includes/abstract-testcase.php | 55 |
1 files changed, 54 insertions, 1 deletions
diff --git a/tests/phpunit/includes/abstract-testcase.php b/tests/phpunit/includes/abstract-testcase.php index f665bdafb1..29ce8d8b53 100644 --- a/tests/phpunit/includes/abstract-testcase.php +++ b/tests/phpunit/includes/abstract-testcase.php @@ -1,5 +1,6 @@ <?php +require_once __DIR__ . '/build-visual-html-tree.php'; require_once __DIR__ . '/factory.php'; require_once __DIR__ . '/trac.php'; @@ -13,7 +14,6 @@ require_once __DIR__ . '/trac.php'; * All WordPress unit tests should inherit from this class. */ abstract class WP_UnitTestCase_Base extends PHPUnit_Adapter_TestCase { - protected static $forced_tickets = array(); protected $expected_deprecated = array(); protected $caught_deprecated = array(); @@ -136,6 +136,21 @@ abstract class WP_UnitTestCase_Base extends PHPUnit_Adapter_TestCase { $this->start_transaction(); $this->expectDeprecated(); add_filter( 'wp_die_handler', array( $this, 'get_wp_die_handler' ) ); + add_filter( 'wp_hash_password_options', array( $this, 'wp_hash_password_options' ), 1, 2 ); + } + + /** + * Sets the bcrypt cost option for password hashing during tests. + * + * @param array $options The options for password hashing. + * @param string|int $algorithm The algorithm to use for hashing. This is a string in PHP 7.4+ and an integer in PHP 7.3 and earlier. + */ + public function wp_hash_password_options( array $options, $algorithm ): array { + if ( PASSWORD_BCRYPT === $algorithm ) { + $options['cost'] = 5; + } + + return $options; } /** @@ -1181,6 +1196,44 @@ abstract class WP_UnitTestCase_Base extends PHPUnit_Adapter_TestCase { } /** + * Check HTML markup (including blocks) for semantic equivalence. + * + * Given two markup strings, assert that they translate to the same semantic HTML tree, + * normalizing tag names, attribute names, and attribute order. Furthermore, attributes + * and class names are sorted and deduplicated, and whitespace in style attributes + * is normalized. Finally, block delimiter comments are recognized and normalized, + * applying the same principles. + * + * @since 6.9.0 + * + * @param string $expected The expected HTML. + * @param string $actual The actual HTML. + * @param string|null $fragment_context Optional. The fragment context, for example "<td>" expected HTML + * must occur within "<table><tr>" fragment context. Default "<body>". + * Only "<body>" or `null` are supported at this time. + * Set to `null` to parse a full HTML document. + * @param string|null $message Optional. The assertion error message. + */ + public function assertEqualHTML( string $expected, string $actual, ?string $fragment_context = '<body>', $message = 'HTML markup was not equivalent.' ): void { + try { + $tree_expected = build_visual_html_tree( $expected, $fragment_context ); + $tree_actual = build_visual_html_tree( $actual, $fragment_context ); + } catch ( Exception $e ) { + // For PHP 8.4+, we can retry, using the built-in DOM\HTMLDocument parser. + if ( class_exists( 'DOM\HtmlDocument' ) ) { + $dom_expected = DOM\HtmlDocument::createFromString( $expected, LIBXML_NOERROR ); + $tree_expected = build_visual_html_tree( $dom_expected->saveHtml(), $fragment_context ); + $dom_actual = DOM\HtmlDocument::createFromString( $actual, LIBXML_NOERROR ); + $tree_actual = build_visual_html_tree( $dom_actual->saveHtml(), $fragment_context ); + } else { + throw $e; + } + } + + $this->assertSame( $tree_expected, $tree_actual, $message ); + } + + /** * Helper function to convert a single-level array containing text strings to a named data provider. * * The value of the data set will also be used as the name of the data set. |