From 16a24b396e7181ab93b0bf81476d3b660c860be9 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sun, 2 Oct 2022 15:13:13 +0000 Subject: [PATCH] Build/Test Tools: Call `wpTearDownAfterClass()` before deleting all data, instead of after. As of [35186] and [51568], there are two sets of methods used for setup/teardown in the test suite before and after a test class is run: * `set_up_before_class()` / `tear_down_after_class()` * `wpSetUpBeforeClass()` / `wpTearDownAfterClass()`. (Note the `wp` prefix, these are WordPress' own methods and are not the same as the native PHPUnit `setUpBeforeClass()` / `tearDownAfterClass()` methods.) The main difference is that `wpSetUpBeforeClass()` receives the `$factory` argument for ease of use, and both `wpSetUpBeforeClass()` and `wpTearDownAfterClass()` don't need to call `self::commit_transaction()`. Many tests use the `wpTearDownAfterClass()` method to clean up posts, users, roles, etc. created via `wpSetUpBeforeClass()`. However, due to [source:tags/6.0/tests/phpunit/includes/abstract-testcase.php?marks=88-95#L82 how the method was previously called], this cleanup happened after all data is **already deleted** from the database. This could cause some confusion when refactoring tests. For example: {{{ public static function wpTearDownAfterClass() { $GLOBALS['_wp_additional_image_sizes'] = self::$_sizes; } public static function tear_down_after_class() { wp_delete_attachment( self::$large_id, true ); parent::tear_down_after_class(); } }}} At a glance, it seems like these two methods can be combined: {{{ public static function wpTearDownAfterClass() { wp_delete_attachment( self::$large_id, true ); $GLOBALS['_wp_additional_image_sizes'] = self::$_sizes; } }}} However, that would not work as expected: by the time `wp_delete_attachment()` runs, the attachment ID is no longer in the database, so it returns early, leaving some files in the `uploads` directory. By calling `wpTearDownAfterClass()` in `WP_UnitTestCase_Base::tear_down_after_class()` before deleting all data, instead of after, we ensure that both of these methods have access to the same data and can be used interchangeably to perform cleanup as necessary. Additionally, this commit moves the calls to parent methods in `WP_UnitTestCase_Base`: * `parent::set_up_before_class()` to be the first thing called in `::set_up_before_class()` * `parent::tear_down_after_class()` to be the last thing called in `::tear_down_after_class()` This does not have any effect in practice, but brings consistency with how these methods are called in the test suite. Follow-up to [35186], [35225], [35242], [38398], [39626], [49001], [51568]. Props ironprogrammer, SergeyBiryukov. Fixes #55918. See #55652. Built from https://develop.svn.wordpress.org/trunk@54366 git-svn-id: http://core.svn.wordpress.org/trunk@53925 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wp-includes/version.php b/wp-includes/version.php index fed3930731..c5b7aaad9c 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.1-beta2-54365'; +$wp_version = '6.1-beta2-54366'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.