Make WordPress Core

Changeset 38907


Ignore:
Timestamp:
10/25/2016 10:24:57 AM (8 years ago)
Author:
pento
Message:

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.

Location:
trunk/tests/phpunit
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/includes/bootstrap.php

    r38858 r38907  
    1717 * See: https://github.com/sebastianbergmann/phpunit/issues/325
    1818 */
    19 global $wpdb, $current_site, $current_blog, $wp_rewrite, $shortcode_tags, $wp, $phpmailer;
     19global $wpdb, $current_site, $current_blog, $wp_rewrite, $shortcode_tags, $wp, $phpmailer, $wp_theme_directories;
    2020
    2121if ( !is_readable( $config_file_path ) ) {
     
    5454$phpmailer = new MockPHPMailer();
    5555
    56 // Add a symlink to the empty default theme to the themes directory, so it can be used for the tests.
    57 _symlink_default_theme();
     56// Set the theme to our special empty theme, to avoid interference from the current Twenty* theme.
     57if ( ! defined( 'WP_DEFAULT_THEME' ) ) {
     58    define( 'WP_DEFAULT_THEME', 'default' );
     59}
     60$wp_theme_directories = array( DIR_TESTDATA . '/themedir1' );
    5861
    5962system( WP_PHP_BINARY . ' ' . escapeshellarg( dirname( __FILE__ ) . '/install.php' ) . ' ' . escapeshellarg( $config_file_path ) . ' ' . $multisite );
  • trunk/tests/phpunit/includes/functions.php

    r38858 r38907  
    162162    return $uploads;
    163163}
    164 
    165 /**
    166  * Helper functions to link and unlink the empty default theme into the WordPress install
    167  */
    168 function _symlink_default_theme() {
    169     _unlink_default_theme();
    170     symlink( DIR_TESTDATA . '/themedir1/default', ABSPATH . '/wp-content/themes/default' );
    171 }
    172 
    173 function _unlink_default_theme() {
    174     if ( file_exists( ABSPATH . '/wp-content/themes/default' ) ) {
    175         unlink( ABSPATH . '/wp-content/themes/default' );
    176     }
    177 }
    178 // Only unlink when we're in the main process.
    179 if ( 'phpunit' === substr( $GLOBALS['argv'][0], -7 ) ) {
    180     register_shutdown_function( '_unlink_default_theme' );
    181 }
  • trunk/tests/phpunit/includes/install.php

    r38470 r38907  
    99$config_file_path = $argv[1];
    1010$multisite = ! empty( $argv[2] );
     11
     12// Set the theme to our special empty theme, to avoid interference from the current Twenty* theme.
     13if ( ! defined( 'WP_DEFAULT_THEME' ) ) {
     14    define( 'WP_DEFAULT_THEME', 'default' );
     15}
     16$wp_theme_directories = array( dirname( __FILE__ ) . '/../data/themedir1' );
    1117
    1218define( 'WP_INSTALLING', true );
  • trunk/tests/phpunit/tests/theme.php

    r38755 r38907  
    1515
    1616    function setUp() {
     17        global $wp_theme_directories;
     18
    1719        parent::setUp();
     20
     21        $backup_wp_theme_directories = $wp_theme_directories;
     22        $wp_theme_directories = array( WP_CONTENT_DIR . '/themes' );
     23
    1824        add_filter( 'extra_theme_headers', array( $this, '_theme_data_extra_headers' ) );
    1925        wp_clean_themes_cache();
     
    2228
    2329    function tearDown() {
     30        global $wp_theme_directories;
     31
     32        $wp_theme_directories = $this->wp_theme_directories;
     33
    2434        remove_filter( 'extra_theme_headers', array( $this, '_theme_data_extra_headers' ) );
    2535        wp_clean_themes_cache();
    2636        unset( $GLOBALS['wp_themes'] );
     37
    2738        parent::tearDown();
    2839    }
Note: See TracChangeset for help on using the changeset viewer.