protected function setUp() {
parent::setUp();
+ $this->configureLanguages();
MessageCache::singleton()->enable();
}
- function addDBData() {
- // be sure english messages under $key, not $key/en
+ /**
+ * Helper function -- setup site language for testing
+ */
+ protected function configureLanguages() {
+ // for the test, we need the content language to be anything but English,
+ // let's choose e.g. German (de)
+ $langCode = 'de';
+ $langObj = Language::factory( $langCode );
+
$this->setMwGlobals( array(
- 'wgLanguageCode' => 'en',
- 'wgContLang' => Language::factory( 'en' ),
+ 'wgLanguageCode' => $langCode,
+ 'wgLang' => $langObj,
+ 'wgContLang' => $langObj,
) );
+ }
+
+ function addDBData() {
+ $this->configureLanguages();
- // Set up messages and fallbacks ab -> ru -> en
+ // Set up messages and fallbacks ab -> ru -> de
$this->makePage( 'FallbackLanguageTest-Full', 'ab' );
$this->makePage( 'FallbackLanguageTest-Full', 'ru' );
- $this->makePage( 'FallbackLanguageTest-Full', 'en' );
+ $this->makePage( 'FallbackLanguageTest-Full', 'de' );
// Fallbacks where ab does not exist
$this->makePage( 'FallbackLanguageTest-Partial', 'ru' );
- $this->makePage( 'FallbackLanguageTest-Partial', 'en' );
+ $this->makePage( 'FallbackLanguageTest-Partial', 'de' );
- // Fallback to english
- $this->makePage( 'FallbackLanguageTest-English', 'en' );
+ // Fallback to the content language
+ $this->makePage( 'FallbackLanguageTest-ContLang', 'de' );
+
+ // Add customizations for an existing message.
+ $this->makePage( 'sunday', 'ru' );
// Full key tests -- always want russian
$this->makePage( 'MessageCacheTest-FullKeyTest', 'ab' );
$this->makePage( 'MessageCacheTest-FullKeyTest', 'ru' );
+
+ // In content language -- get base if no derivative
+ $this->makePage( 'FallbackLanguageTest-NoDervContLang', 'de', 'de/none', false );
}
/**
*
* @param string $title Title of page to be created
* @param string $lang Language and content of the created page
+ * @param string|null $content Content of the created page, or null for a generic string
+ * @param bool $createSubPage Set to false if a root page should be created
*/
- protected function makePage( $title, $lang ) {
+ protected function makePage( $title, $lang, $content = null, $createSubPage = true ) {
global $wgContLang;
- $title = Title::newFromText(
- ($lang == $wgContLang->getCode()) ? $title : "$title/$lang",
- NS_MEDIAWIKI
- );
+ if ( $content === null ) {
+ $content = $lang;
+ }
+ if ( $lang !== $wgContLang->getCode() || $createSubPage ) {
+ $title = "$title/$lang";
+ }
+
+ $title = Title::newFromText( $title, NS_MEDIAWIKI );
$wikiPage = new WikiPage( $title );
- $content = ContentHandler::makeContent( $lang, $title );
- $wikiPage->doEditContent( $content, "$lang translation test case" );
+ $contentHandler = ContentHandler::makeContent( $content, $title );
+ $wikiPage->doEditContent( $contentHandler, "$lang translation test case" );
}
/**
return array(
array( 'FallbackLanguageTest-Full', 'ab', 'ab' ),
array( 'FallbackLanguageTest-Partial', 'ab', 'ru' ),
- array( 'FallbackLanguageTest-English', 'ab', 'en' ),
+ array( 'FallbackLanguageTest-ContLang', 'ab', 'de' ),
array( 'FallbackLanguageTest-None', 'ab', false ),
+
+ // Existing message with customizations on the fallbacks
+ array( 'sunday', 'ab', 'амҽыш' ),
+
+ // bug 46579
+ array( 'FallbackLanguageTest-NoDervContLang', 'de', 'de/none' ),
+ // UI language different from content language should only use de/none as last option
+ array( 'FallbackLanguageTest-NoDervContLang', 'fit', 'de/none' ),
);
}