setMwGlobals( [ 'wgHooks' => $wgHooks, 'wgTranslateTranslationServices' => [], 'wgTranslateMessageNamespaces' => [ NS_MEDIAWIKI ], ] ); $wgHooks['TranslatePostInitGroups'] = [ [ $this, 'getTestGroups' ] ]; $mg = MessageGroups::singleton(); $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) ); $mg->recache(); MessageIndex::setInstance( new HashMessageIndex() ); MessageIndex::singleton()->rebuild(); } public function getTestGroups( &$list ) { $messages = [ 'ugakey' => '$1 of $2', ]; $list['test-group'] = new MockWikiMessageGroup( 'test-group', $messages ); return false; } public function testParsing() { $title = Title::newFromText( 'MediaWiki:Ugakey/nl' ); $page = WikiPage::factory( $title ); $content = ContentHandler::makeContent( '$1 van $2', $title ); $status = $page->doEditContent( $content, __METHOD__ ); $value = $status->getValue(); /** * @var Revision $rev */ $rev = $value['revision']; $revision = $rev->getId(); $dbw = wfGetDB( DB_MASTER ); $conds = [ 'rt_page' => $title->getArticleID(), 'rt_type' => RevTag::getType( 'fuzzy' ), 'rt_revision' => $revision ]; $index = array_keys( $conds ); $dbw->replace( 'revtag', [ $index ], $conds, __METHOD__ ); $handle = new MessageHandle( $title ); $this->assertTrue( $handle->isValid(), 'Message is known' ); $this->assertTrue( $handle->isFuzzy(), 'Message is fuzzy after database fuzzying' ); // Update the translation without the fuzzy string $content = ContentHandler::makeContent( '$1 van $2', $title ); $page->doEditContent( $content, __METHOD__ ); $this->assertFalse( $handle->isFuzzy(), 'Message is unfuzzy after edit' ); $content = ContentHandler::makeContent( '!!FUZZY!!$1 van $2', $title ); $page->doEditContent( $content, __METHOD__ ); $this->assertTrue( $handle->isFuzzy(), 'Message is fuzzy after manual fuzzying' ); // Update the translation without the fuzzy string $content = ContentHandler::makeContent( '$1 van $2', $title ); $page->doEditContent( $content, __METHOD__ ); $this->assertFalse( $handle->isFuzzy(), 'Message is unfuzzy after edit' ); } }