Tests: Use a minimal theme for tests.
This functionality was originally added in [38858], using `symlink()` to put a link to the theme in WordPress' `themes` directory. Unfortunately, not all installs have write access to the `themes` directory, causing unit tests to fail. The new method is to add the test theme directory to `$wp_theme_directories`, and fix the handful of tests that don't expect `$wp_theme_directories` to have multiple entries. The test install/bootstrap routines now also check that `WP_DEFAULT_THEME` is defined, in case the tests are being run on a system that hasn't upgraded its' `wp-tests-config.php`. See #31550. Fixes #38457. git-svn-id: https://develop.svn.wordpress.org/trunk@38907 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
4e8410a886
commit
ee65fc1f80
@ -16,7 +16,7 @@ $config_file_path .= '/wp-tests-config.php';
|
|||||||
* Globalize some WordPress variables, because PHPUnit loads this file inside a function
|
* Globalize some WordPress variables, because PHPUnit loads this file inside a function
|
||||||
* See: https://github.com/sebastianbergmann/phpunit/issues/325
|
* See: https://github.com/sebastianbergmann/phpunit/issues/325
|
||||||
*/
|
*/
|
||||||
global $wpdb, $current_site, $current_blog, $wp_rewrite, $shortcode_tags, $wp, $phpmailer;
|
global $wpdb, $current_site, $current_blog, $wp_rewrite, $shortcode_tags, $wp, $phpmailer, $wp_theme_directories;
|
||||||
|
|
||||||
if ( !is_readable( $config_file_path ) ) {
|
if ( !is_readable( $config_file_path ) ) {
|
||||||
die( "ERROR: wp-tests-config.php is missing! Please use wp-tests-config-sample.php to create a config file.\n" );
|
die( "ERROR: wp-tests-config.php is missing! Please use wp-tests-config-sample.php to create a config file.\n" );
|
||||||
@ -53,8 +53,11 @@ $multisite = $multisite || ( defined( 'MULTISITE' ) && MULTISITE );
|
|||||||
require_once( dirname( __FILE__ ) . '/mock-mailer.php' );
|
require_once( dirname( __FILE__ ) . '/mock-mailer.php' );
|
||||||
$phpmailer = new MockPHPMailer();
|
$phpmailer = new MockPHPMailer();
|
||||||
|
|
||||||
// Add a symlink to the empty default theme to the themes directory, so it can be used for the tests.
|
// Set the theme to our special empty theme, to avoid interference from the current Twenty* theme.
|
||||||
_symlink_default_theme();
|
if ( ! defined( 'WP_DEFAULT_THEME' ) ) {
|
||||||
|
define( 'WP_DEFAULT_THEME', 'default' );
|
||||||
|
}
|
||||||
|
$wp_theme_directories = array( DIR_TESTDATA . '/themedir1' );
|
||||||
|
|
||||||
system( WP_PHP_BINARY . ' ' . escapeshellarg( dirname( __FILE__ ) . '/install.php' ) . ' ' . escapeshellarg( $config_file_path ) . ' ' . $multisite );
|
system( WP_PHP_BINARY . ' ' . escapeshellarg( dirname( __FILE__ ) . '/install.php' ) . ' ' . escapeshellarg( $config_file_path ) . ' ' . $multisite );
|
||||||
|
|
||||||
|
@ -161,21 +161,3 @@ function _upload_dir_https( $uploads ) {
|
|||||||
|
|
||||||
return $uploads;
|
return $uploads;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper functions to link and unlink the empty default theme into the WordPress install
|
|
||||||
*/
|
|
||||||
function _symlink_default_theme() {
|
|
||||||
_unlink_default_theme();
|
|
||||||
symlink( DIR_TESTDATA . '/themedir1/default', ABSPATH . '/wp-content/themes/default' );
|
|
||||||
}
|
|
||||||
|
|
||||||
function _unlink_default_theme() {
|
|
||||||
if ( file_exists( ABSPATH . '/wp-content/themes/default' ) ) {
|
|
||||||
unlink( ABSPATH . '/wp-content/themes/default' );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Only unlink when we're in the main process.
|
|
||||||
if ( 'phpunit' === substr( $GLOBALS['argv'][0], -7 ) ) {
|
|
||||||
register_shutdown_function( '_unlink_default_theme' );
|
|
||||||
}
|
|
||||||
|
@ -9,6 +9,12 @@ error_reporting( E_ALL & ~E_DEPRECATED & ~E_STRICT );
|
|||||||
$config_file_path = $argv[1];
|
$config_file_path = $argv[1];
|
||||||
$multisite = ! empty( $argv[2] );
|
$multisite = ! empty( $argv[2] );
|
||||||
|
|
||||||
|
// Set the theme to our special empty theme, to avoid interference from the current Twenty* theme.
|
||||||
|
if ( ! defined( 'WP_DEFAULT_THEME' ) ) {
|
||||||
|
define( 'WP_DEFAULT_THEME', 'default' );
|
||||||
|
}
|
||||||
|
$wp_theme_directories = array( dirname( __FILE__ ) . '/../data/themedir1' );
|
||||||
|
|
||||||
define( 'WP_INSTALLING', true );
|
define( 'WP_INSTALLING', true );
|
||||||
require_once $config_file_path;
|
require_once $config_file_path;
|
||||||
require_once dirname( __FILE__ ) . '/functions.php';
|
require_once dirname( __FILE__ ) . '/functions.php';
|
||||||
|
@ -14,16 +14,27 @@ class Tests_Theme extends WP_UnitTestCase {
|
|||||||
);
|
);
|
||||||
|
|
||||||
function setUp() {
|
function setUp() {
|
||||||
|
global $wp_theme_directories;
|
||||||
|
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
|
$backup_wp_theme_directories = $wp_theme_directories;
|
||||||
|
$wp_theme_directories = array( WP_CONTENT_DIR . '/themes' );
|
||||||
|
|
||||||
add_filter( 'extra_theme_headers', array( $this, '_theme_data_extra_headers' ) );
|
add_filter( 'extra_theme_headers', array( $this, '_theme_data_extra_headers' ) );
|
||||||
wp_clean_themes_cache();
|
wp_clean_themes_cache();
|
||||||
unset( $GLOBALS['wp_themes'] );
|
unset( $GLOBALS['wp_themes'] );
|
||||||
}
|
}
|
||||||
|
|
||||||
function tearDown() {
|
function tearDown() {
|
||||||
|
global $wp_theme_directories;
|
||||||
|
|
||||||
|
$wp_theme_directories = $this->wp_theme_directories;
|
||||||
|
|
||||||
remove_filter( 'extra_theme_headers', array( $this, '_theme_data_extra_headers' ) );
|
remove_filter( 'extra_theme_headers', array( $this, '_theme_data_extra_headers' ) );
|
||||||
wp_clean_themes_cache();
|
wp_clean_themes_cache();
|
||||||
unset( $GLOBALS['wp_themes'] );
|
unset( $GLOBALS['wp_themes'] );
|
||||||
|
|
||||||
parent::tearDown();
|
parent::tearDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user