summaryrefslogtreecommitdiff
path: root/extensions/LocalisationUpdate/tests/phpunit
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2016-05-01 15:17:42 -0400
committerLuke Shumaker <lukeshu@sbcglobal.net>2016-05-01 15:17:42 -0400
commitf7d4cf9ed0ae68fec630d14e8f6aade38e49f036 (patch)
treea730c57badbe0e2f0f064ca2006c82d4b6ed54ea /extensions/LocalisationUpdate/tests/phpunit
parentaee35e4a93d105024bcae947cd8b16c962191f5c (diff)
parent5d1e7dd0ccda0984ccf3e8e3d0f88ac888b05819 (diff)
Merge commit '5d1e7'
Diffstat (limited to 'extensions/LocalisationUpdate/tests/phpunit')
-rw-r--r--extensions/LocalisationUpdate/tests/phpunit/Makefile12
-rw-r--r--extensions/LocalisationUpdate/tests/phpunit/UpdaterTest.php80
-rw-r--r--extensions/LocalisationUpdate/tests/phpunit/finder/FinderTest.php70
-rw-r--r--extensions/LocalisationUpdate/tests/phpunit/reader/JSONReaderTest.php37
-rw-r--r--extensions/LocalisationUpdate/tests/phpunit/reader/ReaderFactoryTest.php38
5 files changed, 237 insertions, 0 deletions
diff --git a/extensions/LocalisationUpdate/tests/phpunit/Makefile b/extensions/LocalisationUpdate/tests/phpunit/Makefile
new file mode 100644
index 00000000..e98c12ca
--- /dev/null
+++ b/extensions/LocalisationUpdate/tests/phpunit/Makefile
@@ -0,0 +1,12 @@
+ifndef MW_INSTALL_PATH
+ MW_INSTALL_PATH=../../../..
+endif
+
+DIRS=reader
+
+default:
+ php ${MW_INSTALL_PATH}/tests/phpunit/phpunit.php .
+
+.PHONY: *Test.php $(DIRS)
+*Test.php $(DIRS):
+ php ${MW_INSTALL_PATH}/tests/phpunit/phpunit.php $@
diff --git a/extensions/LocalisationUpdate/tests/phpunit/UpdaterTest.php b/extensions/LocalisationUpdate/tests/phpunit/UpdaterTest.php
new file mode 100644
index 00000000..ce742cba
--- /dev/null
+++ b/extensions/LocalisationUpdate/tests/phpunit/UpdaterTest.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0+
+ */
+
+class LU_UpdaterTest extends MediaWikiTestCase {
+ public function testIsDirectory() {
+ $updater = new LU_Updater();
+
+ $this->assertTrue(
+ $updater->isDirectory( '/IP/extensions/Translate/i18n/*.json' ),
+ 'Extension json files are a file pattern'
+ );
+
+ $this->assertFalse(
+ $updater->isDirectory( '/IP/extensions/Translate/Translate.i18n.php' ),
+ 'Extension php file is not a pattern'
+ );
+ }
+
+ public function testExpandRemotePath() {
+ $updater = new LU_Updater();
+ $repos = array( 'main' => 'file:///repos/%NAME%/%SOME-VAR%' );
+
+ $info = array(
+ 'repo' => 'main',
+ 'name' => 'product',
+ 'some-var' => 'file',
+ );
+ $this->assertEquals(
+ 'file:///repos/product/file',
+ $updater->expandRemotePath( $info, $repos ),
+ 'Variables are expanded correctly'
+ );
+ }
+
+ public function testReadMessages() {
+ $updater = $updater = new LU_Updater();
+
+ $input = array( 'file' => 'Hello World!' );
+ $output = array( 'en' => array( 'key' => $input['file'] ) );
+
+ $reader = $this->getMock( 'LU_Reader' );
+ $reader
+ ->expects( $this->once() )
+ ->method( 'parse' )
+ ->will( $this->returnValue( $output ) );
+
+ $factory = $this->getMock( 'LU_ReaderFactory' );
+ $factory
+ ->expects( $this->once() )
+ ->method( 'getReader' )
+ ->will( $this->returnValue( $reader ) );
+
+ $observed = $updater->readMessages( $factory, $input );
+ $this->assertEquals( $output, $observed, 'Tries to parse given file' );
+ }
+
+ public function testFindChangedTranslations() {
+ $updater = $updater = new LU_Updater();
+
+ $origin = array(
+ 'A' => '1',
+ 'C' => '3',
+ 'D' => '4',
+ );
+ $remote = array(
+ 'A' => '1', // No change key
+ 'B' => '2', // New key
+ 'C' => '33', // Changed key
+ 'D' => '44', // Blacklisted key
+ );
+ $blacklist = array( 'D' => 0 );
+ $expected = array( 'B' => '2', 'C' => '33' );
+ $observed = $updater->findChangedTranslations( $origin, $remote, $blacklist );
+ $this->assertEquals( $expected, $observed, 'Changed and new keys returned' );
+ }
+}
diff --git a/extensions/LocalisationUpdate/tests/phpunit/finder/FinderTest.php b/extensions/LocalisationUpdate/tests/phpunit/finder/FinderTest.php
new file mode 100644
index 00000000..8cc0f7d7
--- /dev/null
+++ b/extensions/LocalisationUpdate/tests/phpunit/finder/FinderTest.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0+
+ */
+
+class LU_FinderTest extends MediaWikiTestCase {
+ public function testGetComponents() {
+ $finder = new LU_Finder(
+ array(
+ 'TranslateSearch' => '/IP/extensions/Translate/TranslateSearch.i18n.php',
+ 'Babel' => '/IP/extensions/Babel/Babel.i18n.php',
+ ),
+ array(
+ 'Babel' => '/IP/extensions/Babel/i18n',
+ 'Door' => array(
+ 'core' => '/IP/extensions/Door/i18n/core',
+ 'extra' => '/IP/extensions/Door/i18n/extra',
+ ),
+ ),
+ '/IP'
+ );
+ $observed = $finder->getComponents();
+
+ $expected = array(
+ 'repo' => 'mediawiki',
+ 'orig' => "file:///IP/languages/messages/Messages*.php",
+ 'path' => 'languages/messages/Messages*.php',
+ );
+ $this->assertArrayHasKey( 'core', $observed );
+ $this->assertSame( $expected, $observed['core'], 'Core php file' );
+
+ $expected = array(
+ 'repo' => 'extension',
+ 'name' => 'Translate',
+ 'orig' => 'file:///IP/extensions/Translate/TranslateSearch.i18n.php',
+ 'path' => 'TranslateSearch.i18n.php'
+ );
+ $this->assertArrayHasKey( 'TranslateSearch', $observed );
+ $this->assertSame( $expected, $observed['TranslateSearch'], 'PHP only extension' );
+
+ $expected = array(
+ 'repo' => 'extension',
+ 'name' => 'Babel',
+ 'orig' => 'file:///IP/extensions/Babel/i18n/*.json',
+ 'path' => 'i18n/*.json'
+ );
+ $this->assertArrayHasKey( 'Babel-0', $observed );
+ $this->assertSame( $expected, $observed['Babel-0'], 'PHP&JSON extension' );
+
+ $expected = array(
+ 'repo' => 'extension',
+ 'name' => 'Door',
+ 'orig' => 'file:///IP/extensions/Door/i18n/core/*.json',
+ 'path' => 'i18n/core/*.json'
+ );
+ $this->assertArrayHasKey( 'Door-core', $observed );
+ $this->assertSame( $expected, $observed['Door-core'], 'Multidir json extension' );
+
+ $expected = array(
+ 'repo' => 'extension',
+ 'name' => 'Door',
+ 'orig' => 'file:///IP/extensions/Door/i18n/extra/*.json',
+ 'path' => 'i18n/extra/*.json'
+ );
+ $this->assertArrayHasKey( 'Door-extra', $observed );
+ $this->assertSame( $expected, $observed['Door-extra'], 'Multidir json extension' );
+ }
+}
diff --git a/extensions/LocalisationUpdate/tests/phpunit/reader/JSONReaderTest.php b/extensions/LocalisationUpdate/tests/phpunit/reader/JSONReaderTest.php
new file mode 100644
index 00000000..4bb53af9
--- /dev/null
+++ b/extensions/LocalisationUpdate/tests/phpunit/reader/JSONReaderTest.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0+
+ */
+
+class LU_JSONReaderTest extends MediaWikiTestCase {
+ /**
+ * @dataProvider parseProvider
+ */
+ public function testParse( $input, $expected, $comment ) {
+ $reader = new LU_JSONReader( 'xx' );
+ $observed = $reader->parse( $input );
+ $this->assertEquals( $expected, $observed['xx'], $comment );
+ }
+
+ public function parseProvider() {
+ return array(
+ array(
+ '{}',
+ array(),
+ 'empty file',
+ ),
+ array(
+ '{"key":"value"}',
+ array( 'key' => 'value' ),
+ 'file with one string',
+ ),
+ array(
+ '{"@metadata":{"authors":["Nike"]},"key":"value2"}',
+ array( 'key' => 'value2' ),
+ '@metadata is ignored',
+ )
+ );
+ }
+}
diff --git a/extensions/LocalisationUpdate/tests/phpunit/reader/ReaderFactoryTest.php b/extensions/LocalisationUpdate/tests/phpunit/reader/ReaderFactoryTest.php
new file mode 100644
index 00000000..ee155b3a
--- /dev/null
+++ b/extensions/LocalisationUpdate/tests/phpunit/reader/ReaderFactoryTest.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0+
+ */
+
+class LU_ReaderFactoryTest extends MediaWikiTestCase {
+ /**
+ * @dataProvider getReaderProvider
+ */
+ public function testGetReader( $input, $expected, $comment ) {
+ $factory = new LU_ReaderFactory();
+ $reader = $factory->getReader( $input );
+ $observed = get_class( $reader );
+ $this->assertEquals( $expected, $observed, $comment );
+ }
+
+ public function getReaderProvider() {
+ return array(
+ array(
+ 'languages/messages/MessagesFi.php',
+ 'LU_PHPReader',
+ 'core php file',
+ ),
+ array(
+ 'extensions/Translate/Translate.i18n.php',
+ 'LU_PHPReader',
+ 'extension php file',
+ ),
+ array(
+ 'extension/Translate/i18n/core/de.json',
+ 'LU_JSONReader',
+ 'extension json file',
+ ),
+ );
+ }
+}