summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'MLEB/Translate/tests/phpunit/PageTranslation/TranslationPageTest.php')
-rw-r--r--MLEB/Translate/tests/phpunit/PageTranslation/TranslationPageTest.php152
1 files changed, 152 insertions, 0 deletions
diff --git a/MLEB/Translate/tests/phpunit/PageTranslation/TranslationPageTest.php b/MLEB/Translate/tests/phpunit/PageTranslation/TranslationPageTest.php
new file mode 100644
index 00000000..706be63b
--- /dev/null
+++ b/MLEB/Translate/tests/phpunit/PageTranslation/TranslationPageTest.php
@@ -0,0 +1,152 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use FatMessage;
+use Language;
+use MediaWikiTestCase;
+use WikiPageMessageGroup;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\PageTranslation\TranslationPage
+ */
+class TranslationPageTest extends MediaWikiTestCase {
+ /** @dataProvider provideTestGenerateSourceFromTranslations */
+ public function testGenerateSourceFromTranslations(
+ bool $inline,
+ bool $canWrap,
+ bool $wrapUntranslated,
+ array $messages,
+ string $expected
+ ) {
+ // This test skips all the message loading from database
+
+ $template = '<S>';
+ $unitMap = [];
+ foreach ( $messages as $id => $m ) {
+ /** @var FatMessage $m */
+ $unit = new TranslationUnit();
+ $unit->id = $id;
+ $unit->text = $m->definition();
+ $unit->setIsInline( $inline );
+ $unit->setCanWrap( $canWrap );
+
+ $unitMap[$unit->id] = $unit;
+ }
+
+ // Then create appropriate units in the section. We are using the array keys, which
+ // works as long as there are less than ten units.
+ $sectionMap = [ '<S>' => new Section( '', implode( ' | ', array_keys( $unitMap ) ), '' ) ];
+ $output = new ParserOutput( $template, $sectionMap, $unitMap );
+
+ $translationPage = new TranslationPage(
+ $output,
+ $this->createMock( WikiPageMessageGroup::class ),
+ Language::factory( 'ar' ),
+ Language::factory( 'en' ),
+ true /*$showOutdated*/,
+ $wrapUntranslated,
+ '' /*$prefix*/
+ );
+
+ $actual = $translationPage->generateSourceFromTranslations( $messages );
+ $this->assertSame( $expected, $actual );
+ }
+
+ public function provideTestGenerateSourceFromTranslations() {
+ $inline = true;
+ $block = false;
+
+ $wrap = true;
+ $nowrap = false;
+
+ $wrapUntranslated = true;
+
+ $sectionText = 'Hello';
+
+ $okMessage = new FatMessage( 'ignoredKey', $sectionText );
+ $okMessage->setTranslation( 'Hallo' );
+
+ $fuzzyMessage = new FatMessage( 'ignoredKey', $sectionText );
+ $fuzzyMessage->setTranslation( 'hallo' );
+ $fuzzyMessage->addTag( 'fuzzy' );
+
+ $untranslatedMessage = new FatMessage( 'ignoredKey', $sectionText );
+
+ $identicalMessage = new FatMessage( 'ignoredKey', $sectionText );
+ $identicalMessage->setTranslation( $sectionText );
+
+ $inlineWrappedOutdated = '<span class="mw-translate-fuzzy">hallo</span>';
+ $inlineWrappedUntranslated = '<span lang="en" dir="ltr" class="mw-content-ltr">Hello</span>';
+ $blockWrappedOutdated = "<div class=\"mw-translate-fuzzy\">\nhallo\n</div>";
+ $blockWrappedUntranslated = "<div lang=\"en\" dir=\"ltr\" class=\"mw-content-ltr\">\nHello\n</div>";
+
+ // Matrix of (inline|block) * (no)wrap * (no)wrapUntranslated
+ yield [
+ $inline,
+ $wrap,
+ $wrapUntranslated,
+ [ $okMessage, $fuzzyMessage, $identicalMessage, $untranslatedMessage ],
+ "Hallo | $inlineWrappedOutdated | Hello | $inlineWrappedUntranslated"
+ ];
+
+ yield [
+ $inline,
+ $wrap,
+ !$wrapUntranslated,
+ [ $okMessage, $fuzzyMessage, $identicalMessage, $untranslatedMessage ],
+ "Hallo | $inlineWrappedOutdated | Hello | Hello"
+ ];
+
+ yield [
+ $inline,
+ $nowrap,
+ $wrapUntranslated,
+ [ $okMessage, $fuzzyMessage, $identicalMessage, $untranslatedMessage ],
+ 'Hallo | hallo | Hello | Hello',
+ ];
+
+ yield [
+ $inline,
+ $nowrap,
+ !$wrapUntranslated,
+ [ $okMessage, $fuzzyMessage, $identicalMessage, $untranslatedMessage ],
+ 'Hallo | hallo | Hello | Hello',
+ ];
+
+ yield [
+ $block,
+ $wrap,
+ $wrapUntranslated,
+ [ $okMessage, $fuzzyMessage, $identicalMessage, $untranslatedMessage ],
+ "Hallo | $blockWrappedOutdated | Hello | $blockWrappedUntranslated"
+ ];
+
+ yield [
+ $block,
+ $wrap,
+ !$wrapUntranslated,
+ [ $okMessage, $fuzzyMessage, $identicalMessage, $untranslatedMessage ],
+ "Hallo | $blockWrappedOutdated | Hello | Hello"
+ ];
+
+ yield [
+ $block,
+ $nowrap,
+ $wrapUntranslated,
+ [ $okMessage, $fuzzyMessage, $identicalMessage, $untranslatedMessage ],
+ 'Hallo | hallo | Hello | Hello',
+ ];
+
+ yield [
+ $block,
+ $nowrap,
+ !$wrapUntranslated,
+ [ $okMessage, $fuzzyMessage, $identicalMessage, $untranslatedMessage ],
+ 'Hallo | hallo | Hello | Hello',
+ ];
+ }
+}