summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/Translate/tests/phpunit/ffs/GettextFFSTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/Translate/tests/phpunit/ffs/GettextFFSTest.php')
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/ffs/GettextFFSTest.php256
1 files changed, 256 insertions, 0 deletions
diff --git a/www/wiki/extensions/Translate/tests/phpunit/ffs/GettextFFSTest.php b/www/wiki/extensions/Translate/tests/phpunit/ffs/GettextFFSTest.php
new file mode 100644
index 00000000..e471ceb9
--- /dev/null
+++ b/www/wiki/extensions/Translate/tests/phpunit/ffs/GettextFFSTest.php
@@ -0,0 +1,256 @@
+<?php
+/**
+ * Tests for Gettext message file format.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2012-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * @see GettextFFS
+ */
+class GettextFFSTest extends MediaWikiTestCase {
+ protected $groupConfiguration;
+
+ public function setUp() {
+ parent::setUp();
+ $this->groupConfiguration = [
+ 'BASIC' => [
+ 'class' => 'FileBasedMessageGroup',
+ 'id' => 'test-id',
+ 'label' => 'Test Label',
+ 'namespace' => 'NS_MEDIAWIKI',
+ 'description' => 'Test description',
+ ],
+ 'FILES' => [
+ 'class' => 'GettextFFS',
+ 'sourcePattern' => __DIR__ . '/../data/gettext.po',
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider provideMangling
+ */
+ public function testMangling( $expected, $item, $algo ) {
+ $this->assertEquals( $expected, GettextFFS::generateKeyFromItem( $item, $algo ) );
+ }
+
+ public static function provideMangling() {
+ return [
+ [
+ '3f9999051ce0bc6e98f43224fe6ee1c220e34e49-Hello!_world_loooooooooooooooo',
+ [ 'id' => 'Hello! world loooooooooooooooooooooooooooooooooooooooooong', 'ctxt' => 'baa' ],
+ 'legacy'
+ ],
+ [
+ '3f9999-Hello!_world_loooooooooooooooo',
+ [ 'id' => 'Hello! world loooooooooooooooooooooooooooooooooooooooooong', 'ctxt' => 'baa' ],
+ 'simple'
+ ],
+
+ [
+ '1437e478b59e220640bf530f7e3bac93950eb8ae-"¤_=FJQ"_¤r_£_ab',
+ [ 'id' => '"¤#=FJQ"<>¤r £}[]}%ab', 'ctxt' => false ],
+ 'legacy'
+ ],
+ [
+ '1437e4-"¤#=FJQ"<>¤r_£}[]}%ab',
+ [ 'id' => '"¤#=FJQ"<>¤r £}[]}%ab', 'ctxt' => false ],
+ 'simple'
+ ],
+
+ ];
+ }
+
+ public function testHashing() {
+ $item1 = [
+ 'id' => 'a',
+ 'str' => 'b',
+ 'ctxt' => false,
+ ];
+
+ $item2 = [
+ 'id' => 'a',
+ 'str' => 'b',
+ 'ctxt' => '',
+ ];
+
+ $this->assertNotEquals(
+ GettextFFS::generateKeyFromItem( $item1, 'legacy' ),
+ GettextFFS::generateKeyFromItem( $item2, 'legacy' ),
+ 'Empty msgctxt is different from no msgctxt'
+ );
+
+ $this->assertNotEquals(
+ GettextFFS::generateKeyFromItem( $item1, 'simple' ),
+ GettextFFS::generateKeyFromItem( $item2, 'simple' ),
+ 'Empty msgctxt is different from no msgctxt'
+ );
+
+ $this->assertEquals(
+ sha1( $item1['id'] ) . '-' . $item1['id'],
+ GettextFFS::generateKeyFromItem( $item1, 'legacy' )
+ );
+
+ $this->assertEquals(
+ substr( sha1( $item1['id'] ), 0, 6 ) . '-' . $item1['id'],
+ GettextFFS::generateKeyFromItem( $item1, 'simple' )
+ );
+ }
+
+ public function testMsgctxtExport() {
+ /** @var FileBasedMessageGroup $group */
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new GettextFFS( $group );
+
+ $object = new ReflectionObject( $ffs );
+ $method = $object->getMethod( 'formatMessageBlock' );
+ $method->setAccessible( true );
+
+ $key = 'key';
+ $m = new FatMessage( 'key', 'definition' );
+ $m->setTranslation( 'translation' );
+ $trans = [];
+ $pot = [];
+ $pluralCount = 0;
+
+ $results = <<<GETTEXT
+#
+msgid "definition"
+msgstr "translation"
+
+#
+msgctxt ""
+msgid "definition"
+msgstr "translation"
+
+#
+msgctxt "context"
+msgid "definition"
+msgstr "translation"
+GETTEXT;
+
+ $results = preg_split( '/\n\n/', $results );
+
+ // Case 1: no context
+ $this->assertEquals(
+ $results[0],
+ trim( $method->invoke( $ffs, $key, $m, $trans, $pot, $pluralCount ) )
+ );
+
+ // Case 2: empty context
+ $pot['ctxt'] = '';
+ $this->assertEquals(
+ $results[1],
+ trim( $method->invoke( $ffs, $key, $m, $trans, $pot, $pluralCount ) )
+ );
+
+ // Case 3: context
+ $pot['ctxt'] = 'context';
+ $this->assertEquals(
+ $results[2],
+ trim( $method->invoke( $ffs, $key, $m, $trans, $pot, $pluralCount ) )
+ );
+ }
+
+ /**
+ * @dataProvider provideShouldOverwrite
+ */
+ public function testShouldOverwrite( $a, $b, $expected, $comment ) {
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new GettextFFS( $group );
+ $actual = $ffs->shouldOverwrite( $a, $b );
+ $this->assertEquals( $expected, $actual, $comment );
+ }
+
+ public function provideShouldOverwrite() {
+ $cases = [];
+
+ $cases[] = [
+<<<GETTEXT
+#
+msgid ""
+msgstr ""
+""
+"PO-Revision-Date: 2017-02-09 07:24:07+0000\\n"
+"X-POT-Import-Date: 2016-08-11 04:53:15+0000\\n"
+"Content-Type: text/plain; charset=UTF-8\\n"
+"Content-Transfer-Encoding: 8bit\\n"
+"Language: azb\\n"
+"X-Generator: MediaWiki 1.29.0-alpha; Translate 2017-01-24\\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\\n"
+
+#: frontend/templates/index.html:38
+msgid "About the map"
+msgstr ""
+GETTEXT
+ ,
+<<<GETTEXT
+#
+msgid ""
+msgstr ""
+""
+"PO-Revision-Date: 2017-02-06 07:07:03+0000\\n"
+"X-POT-Import-Date: 2016-08-11 04:53:15+0000\\n"
+"Content-Type: text/plain; charset=UTF-8\\n"
+"Content-Transfer-Encoding: 8bit\\n"
+"Language: azb\\n"
+"X-Generator: MediaWiki 1.29.0-alpha; Translate 2017-01-24\\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\\n"
+
+#: frontend/templates/index.html:38
+msgid "About the map"
+msgstr ""
+GETTEXT
+ ,
+ false,
+ "Only date has changed"
+ ];
+
+ $cases[] = [
+<<<GETTEXT
+#
+msgid ""
+msgstr ""
+""
+"PO-Revision-Date: 2017-02-09 07:24:07+0000\\n"
+"X-POT-Import-Date: 2016-08-11 04:53:15+0000\\n"
+"Content-Type: text/plain; charset=UTF-8\\n"
+"Content-Transfer-Encoding: 8bit\\n"
+"Language: azb\\n"
+"X-Generator: MediaWiki 1.29.0-alpha; Translate 2017-01-24\\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\\n"
+
+#: frontend/templates/index.html:38
+msgid "About the map"
+msgstr ""
+GETTEXT
+ ,
+<<<GETTEXT
+#
+msgid ""
+msgstr ""
+""
+"PO-Revision-Date: 2017-02-06 07:07:03+0000\\n"
+"X-POT-Import-Date: 2016-08-11 04:53:15+0000\\n"
+"Content-Type: text/plain; charset=UTF-8\\n"
+"Content-Transfer-Encoding: 8bit\\n"
+"Language: fi\\n"
+"X-Generator: MediaWiki 1.29.0-alpha; Translate 2017-01-24\\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\\n"
+
+#: frontend/templates/index.html:38
+msgid "About the map"
+msgstr "Tietoja kartasta"
+GETTEXT
+ ,
+ true,
+ "Content has changed"
+ ];
+
+ return $cases;
+ }
+}