mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2025-10-16 12:05:38 +00:00
WordPress' code just... wasn't. This is now dealt with. Props jrf, pento, netweb, GaryJ, jdgrimes, westonruter, Greg Sherwood from PHPCS, and everyone who's ever contributed to WPCS and PHPCS. Fixes #41057. git-svn-id: https://develop.svn.wordpress.org/trunk@42343 602fd350-edb4-49c9-b593-d223f7449a82
250 lines
6.9 KiB
PHP
250 lines
6.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @group l10n
|
|
* @group i18n
|
|
*/
|
|
class Tests_L10n_loadTextdomain extends WP_UnitTestCase {
|
|
protected $locale;
|
|
protected static $user_id;
|
|
|
|
public static function wpSetUpBeforeClass( $factory ) {
|
|
self::$user_id = $factory->user->create(
|
|
array(
|
|
'role' => 'administrator',
|
|
'locale' => 'de_DE',
|
|
)
|
|
);
|
|
}
|
|
|
|
public function setUp() {
|
|
parent::setUp();
|
|
|
|
$this->locale = '';
|
|
|
|
add_filter( 'plugin_locale', array( $this, 'store_locale' ) );
|
|
add_filter( 'theme_locale', array( $this, 'store_locale' ) );
|
|
}
|
|
|
|
public function tearDown() {
|
|
remove_filter( 'plugin_locale', array( $this, 'store_locale' ) );
|
|
remove_filter( 'theme_locale', array( $this, 'store_locale' ) );
|
|
|
|
parent::tearDown();
|
|
}
|
|
|
|
public function store_locale( $locale ) {
|
|
$this->locale = $locale;
|
|
|
|
return $locale;
|
|
}
|
|
|
|
public function test_is_textdomain_loaded() {
|
|
$this->assertFalse( is_textdomain_loaded( 'wp-tests-domain' ) );
|
|
}
|
|
|
|
public function test_unload_textdomain() {
|
|
$this->assertFalse( unload_textdomain( 'wp-tests-domain' ) );
|
|
}
|
|
|
|
public function test_load_textdomain() {
|
|
$loaded = load_textdomain( 'wp-tests-domain', DIR_TESTDATA . '/pomo/simple.mo' );
|
|
|
|
unload_textdomain( 'wp-tests-domain' );
|
|
|
|
$this->assertTrue( $loaded );
|
|
}
|
|
|
|
public function test_is_textdomain_loaded_after_loading() {
|
|
load_textdomain( 'wp-tests-domain', DIR_TESTDATA . '/pomo/simple.mo' );
|
|
|
|
$loaded = is_textdomain_loaded( 'wp-tests-domain' );
|
|
|
|
unload_textdomain( 'wp-tests-domain' );
|
|
|
|
$this->assertTrue( $loaded );
|
|
}
|
|
|
|
public function test_unload_textdomain_after_loading() {
|
|
load_textdomain( 'wp-tests-domain', DIR_TESTDATA . '/pomo/simple.mo' );
|
|
|
|
$this->assertTrue( unload_textdomain( 'wp-tests-domain' ) );
|
|
}
|
|
|
|
public function test_is_textdomain_loaded_after_unloading() {
|
|
load_textdomain( 'wp-tests-domain', DIR_TESTDATA . '/pomo/simple.mo' );
|
|
|
|
unload_textdomain( 'wp-tests-domain' );
|
|
|
|
$this->assertFalse( is_textdomain_loaded( 'wp-tests-domain' ) );
|
|
}
|
|
|
|
/**
|
|
* @ticket 21319
|
|
*/
|
|
public function test_load_textdomain_non_existent_file() {
|
|
$this->assertFalse( load_textdomain( 'wp-tests-domain', DIR_TESTDATA . '/non-existent-file' ) );
|
|
}
|
|
|
|
/**
|
|
* @ticket 21319
|
|
*/
|
|
public function test_is_textdomain_loaded_non_existent_file() {
|
|
load_textdomain( 'wp-tests-domain', DIR_TESTDATA . '/non-existent-file' );
|
|
|
|
$this->assertFalse( is_textdomain_loaded( 'wp-tests-domain' ) );
|
|
}
|
|
|
|
/**
|
|
* @ticket 21319
|
|
*/
|
|
public function test_get_translations_for_domain_non_existent_file() {
|
|
load_textdomain( 'wp-tests-domain', DIR_TESTDATA . '/non-existent-file' );
|
|
|
|
$this->assertInstanceOf( 'NOOP_Translations', get_translations_for_domain( 'wp-tests-domain' ) );
|
|
}
|
|
|
|
/**
|
|
* @ticket 21319
|
|
*/
|
|
public function test_unload_textdomain_non_existent_file() {
|
|
load_textdomain( 'wp-tests-domain', DIR_TESTDATA . '/non-existent-file' );
|
|
|
|
$this->assertFalse( unload_textdomain( 'wp-tests-domain' ) );
|
|
}
|
|
|
|
/**
|
|
* @ticket 21319
|
|
*/
|
|
function test_is_textdomain_is_not_loaded_after_gettext_call_with_no_translations() {
|
|
$this->assertFalse( is_textdomain_loaded( 'wp-tests-domain' ) );
|
|
__( 'just some string', 'wp-tests-domain' );
|
|
$this->assertFalse( is_textdomain_loaded( 'wp-tests-domain' ) );
|
|
}
|
|
|
|
function test_override_load_textdomain_noop() {
|
|
add_filter( 'override_load_textdomain', '__return_true' );
|
|
$load_textdomain = load_textdomain( 'wp-tests-domain', DIR_TESTDATA . '/non-existent-file' );
|
|
remove_filter( 'override_load_textdomain', '__return_true' );
|
|
|
|
$this->assertTrue( $load_textdomain );
|
|
$this->assertFalse( is_textdomain_loaded( 'wp-tests-domain' ) );
|
|
}
|
|
|
|
function test_override_load_textdomain_non_existent_mofile() {
|
|
add_filter( 'override_load_textdomain', array( $this, '_override_load_textdomain_filter' ), 10, 3 );
|
|
$load_textdomain = load_textdomain( 'wp-tests-domain', WP_LANG_DIR . '/non-existent-file.mo' );
|
|
remove_filter( 'override_load_textdomain', array( $this, '_override_load_textdomain_filter' ) );
|
|
|
|
$is_textdomain_loaded = is_textdomain_loaded( 'wp-tests-domain' );
|
|
unload_textdomain( 'wp-tests-domain' );
|
|
$is_textdomain_loaded_after = is_textdomain_loaded( 'wp-tests-domain' );
|
|
|
|
$this->assertFalse( $load_textdomain );
|
|
$this->assertFalse( $is_textdomain_loaded );
|
|
$this->assertFalse( $is_textdomain_loaded_after );
|
|
}
|
|
|
|
function test_override_load_textdomain_custom_mofile() {
|
|
add_filter( 'override_load_textdomain', array( $this, '_override_load_textdomain_filter' ), 10, 3 );
|
|
$load_textdomain = load_textdomain( 'wp-tests-domain', WP_LANG_DIR . '/plugins/internationalized-plugin-de_DE.mo' );
|
|
remove_filter( 'override_load_textdomain', array( $this, '_override_load_textdomain_filter' ) );
|
|
|
|
$is_textdomain_loaded = is_textdomain_loaded( 'wp-tests-domain' );
|
|
unload_textdomain( 'wp-tests-domain' );
|
|
$is_textdomain_loaded_after = is_textdomain_loaded( 'wp-tests-domain' );
|
|
|
|
$this->assertTrue( $load_textdomain );
|
|
$this->assertTrue( $is_textdomain_loaded );
|
|
$this->assertFalse( $is_textdomain_loaded_after );
|
|
}
|
|
|
|
/**
|
|
* @param bool $override Whether to override the .mo file loading. Default false.
|
|
* @param string $domain Text domain. Unique identifier for retrieving translated strings.
|
|
* @param string $file Path to the MO file.
|
|
* @return bool
|
|
*/
|
|
function _override_load_textdomain_filter( $override, $domain, $file ) {
|
|
global $l10n;
|
|
|
|
if ( ! is_readable( $file ) ) {
|
|
return false;
|
|
}
|
|
|
|
$mo = new MO();
|
|
|
|
if ( ! $mo->import_from_file( $file ) ) {
|
|
return false;
|
|
}
|
|
|
|
if ( isset( $l10n[ $domain ] ) ) {
|
|
$mo->merge_with( $l10n[ $domain ] );
|
|
}
|
|
|
|
$l10n[ $domain ] = &$mo;
|
|
|
|
return true;
|
|
}
|
|
|
|
public function test_load_muplugin_textdomain_site_locale() {
|
|
load_muplugin_textdomain( 'wp-tests-domain' );
|
|
|
|
$this->assertSame( get_locale(), $this->locale );
|
|
}
|
|
|
|
/**
|
|
* @ticket 38485
|
|
*/
|
|
public function test_load_muplugin_textdomain_user_locale() {
|
|
set_current_screen( 'dashboard' );
|
|
wp_set_current_user( self::$user_id );
|
|
|
|
load_muplugin_textdomain( 'wp-tests-domain' );
|
|
|
|
set_current_screen( 'front' );
|
|
|
|
$this->assertSame( get_user_locale(), $this->locale );
|
|
}
|
|
|
|
public function test_load_plugin_textdomain_site_locale() {
|
|
load_plugin_textdomain( 'wp-tests-domain' );
|
|
|
|
$this->assertSame( get_locale(), $this->locale );
|
|
}
|
|
|
|
/**
|
|
* @ticket 38485
|
|
*/
|
|
public function test_load_plugin_textdomain_user_locale() {
|
|
set_current_screen( 'dashboard' );
|
|
wp_set_current_user( self::$user_id );
|
|
|
|
load_plugin_textdomain( 'wp-tests-domain' );
|
|
|
|
set_current_screen( 'front' );
|
|
|
|
$this->assertSame( get_user_locale(), $this->locale );
|
|
}
|
|
|
|
public function test_load_theme_textdomain_site_locale() {
|
|
load_theme_textdomain( 'wp-tests-domain' );
|
|
|
|
$this->assertSame( get_locale(), $this->locale );
|
|
}
|
|
|
|
/**
|
|
* @ticket 38485
|
|
*/
|
|
public function test_load_theme_textdomain_user_locale() {
|
|
set_current_screen( 'dashboard' );
|
|
wp_set_current_user( self::$user_id );
|
|
|
|
load_theme_textdomain( 'wp-tests-domain' );
|
|
|
|
set_current_screen( 'front' );
|
|
|
|
$this->assertSame( get_user_locale(), $this->locale );
|
|
}
|
|
}
|