summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/System/I18nJsonFileIntegrityTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/System/I18nJsonFileIntegrityTest.php')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/System/I18nJsonFileIntegrityTest.php101
1 files changed, 101 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/System/I18nJsonFileIntegrityTest.php b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/System/I18nJsonFileIntegrityTest.php
new file mode 100644
index 00000000..ba8163aa
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/System/I18nJsonFileIntegrityTest.php
@@ -0,0 +1,101 @@
+<?php
+
+namespace SMW\Tests\System;
+
+use SMW\Tests\Utils\UtilityFactory;
+
+/**
+ * @group semantic-mediawiki
+ * @group system-test
+ *
+ * @license GNU GPL v2+
+ * @since 2.1
+ *
+ * @author mwjames
+ */
+class I18nJsonFileIntegrityTest extends \PHPUnit_Framework_TestCase {
+
+ /**
+ * @dataProvider mediawikiI18nFileProvider
+ */
+ public function testMediaWikiI18NJsonDecodeEncode( $file ) {
+
+ $jsonFileReader = UtilityFactory::getInstance()->newJsonFileReader( $file );
+
+ $this->assertInternalType(
+ 'integer',
+ $jsonFileReader->getModificationTime()
+ );
+
+ $this->assertInternalType(
+ 'array',
+ $jsonFileReader->read()
+ );
+ }
+
+ /**
+ * @dataProvider semanticMediaWikiI18nFileProvider
+ */
+ public function testSemanticMediaWikiI18NJsonDecodeEncode( $file ) {
+
+ $jsonFileReader = UtilityFactory::getInstance()->newJsonFileReader( $file );
+
+ $this->assertInternalType(
+ 'integer',
+ $jsonFileReader->getModificationTime()
+ );
+
+ $contents = $jsonFileReader->read();
+
+ $this->assertInternalType(
+ 'array',
+ $contents
+ );
+
+ $expectedKeys = [
+ 'fallback_language',
+ 'datatype' => [ 'labels', 'aliases' ],
+ 'property' => [ 'labels', 'aliases' ],
+ 'namespace' => [ 'labels', 'aliases' ],
+ 'date' => [ 'precision', 'format', 'months', 'days' ]
+ ];
+
+ // If the file is marked with isLanguageRedirect then only check for the fallbackLanguage
+ if ( isset( $contents['isLanguageRedirect'] ) && $contents['isLanguageRedirect'] ) {
+ return $this->assertArrayHasKey( 'fallback_language', $contents, $file );
+ }
+
+ foreach ( $expectedKeys as $key => $val ) {
+ if ( !is_array( $val ) ) {
+ $this->assertArrayHasKey( $val, $contents, "Failed on $file with key: $val" );
+ } else {
+ foreach ( $val as $k => $v ) {
+ $this->assertArrayHasKey( $v, $contents[$key], "Failed on $file with key: $key/$v" );
+ }
+ }
+ }
+ }
+
+ public function mediawikiI18nFileProvider() {
+ return $this->findFilesIn( $GLOBALS['wgMessagesDirs']['SemanticMediaWiki'] );
+ }
+
+ public function semanticMediaWikiI18nFileProvider() {
+ return $this->findFilesIn( $GLOBALS['smwgExtraneousLanguageFileDir'] );
+ }
+
+ private function findFilesIn( $location ) {
+
+ $provider = [];
+
+ $bulkFileProvider = UtilityFactory::getInstance()->newBulkFileProvider( $location );
+ $bulkFileProvider->searchByFileExtension( 'json' );
+
+ foreach ( $bulkFileProvider->getFiles() as $file ) {
+ $provider[] = [ $file ];
+ }
+
+ return $provider;
+ }
+
+}