Seb35 has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/380394 )

Change subject: New function readAnyFile to read a file with any extension
......................................................................

New function readAnyFile to read a file with any extension

This is mainly used for the main config file farms.yml/.php/.json and will
be useful to implement T162737.

Also starting with this commit I will try to tag new tests (and possibly
some old tests) with “[unit]” when it is clearly a unit test (=assumes the
underlying functions are blackboxes and supposed to work as described) and
“[integration]” when it clearly test an entire stack. This is a step
forward to separate unit and integration tests (T162686).

Also starting with this commit it is recommended to use "@uses ClassName"
instead of "@uses ClassName::methodName" to reduce the burden of maintenance
on the tests. This does not cover "@covers" annotations, which must stay
"@covers ClassName::methodName".

I will document these test-related changes on
https://www.mediawiki.org/wiki/Extension:MediaWikiFarm and subpages.

Change-Id: If01341da9fd6d099baadb61bf51d86eadbbfc919
---
M src/MediaWikiFarm.php
M src/Utils.php
M tests/phpunit/ConfigurationTest.php
M tests/phpunit/ConstructionTest.php
M tests/phpunit/InstallationIndependantTest.php
M tests/phpunit/LoadingTest.php
M tests/phpunit/LoggingTest.php
M tests/phpunit/MediaWikiFarmTestCase.php
M tests/phpunit/MonoversionInstallationTest.php
M tests/phpunit/MultiversionInstallationTest.php
M tests/phpunit/bin/MediaWikiFarmScriptTest.php
A tests/phpunit/data/readAnyFile/success.json
A tests/phpunit/data/readAnyFile/success.php
13 files changed, 215 insertions(+), 65 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MediaWikiFarm 
refs/changes/94/380394/1

diff --git a/src/MediaWikiFarm.php b/src/MediaWikiFarm.php
index 7b6cb5e..365cbf8 100644
--- a/src/MediaWikiFarm.php
+++ b/src/MediaWikiFarm.php
@@ -837,17 +837,12 @@
 
                # Read the farms configuration
                if( !$farms ) {
-                       // @codingStandardsIgnoreStart 
MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures
-                       if( $farms = $this->readFile( 'farms.yml', 
$this->configDir ) ) {
-                               $this->farmConfig['coreconfig'][] = 'farms.yml';
-                       } elseif( $farms = $this->readFile( 'farms.php', 
$this->configDir ) ) {
-                               $this->farmConfig['coreconfig'][] = 'farms.php';
-                       } elseif( $farms = $this->readFile( 'farms.json', 
$this->configDir ) ) {
-                               $this->farmConfig['coreconfig'][] = 
'farms.json';
+                       list( $farms, $file ) = 
MediaWikiFarmUtils::readAnyFile( 'farms', $this->configDir, $this->cacheDir, 
$this->log );
+                       if( $file ) {
+                               $this->farmConfig['coreconfig'][] = $file;
                        } else {
                                return array( 'host' => $host, 'farm' => false, 
'config' => false, 'variables' => false, 'farms' => false, 'redirects' => 
$redirects );
                        }
-                       // @codingStandardsIgnoreEnd 
MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures
                }
 
                # For each proposed farm, check if the host matches
diff --git a/src/Utils.php b/src/Utils.php
index 46a1ea9..dcb31ff 100644
--- a/src/Utils.php
+++ b/src/Utils.php
@@ -194,6 +194,36 @@
        }
 
        /**
+        * Read a file with any of the listed extensions.
+        *
+        * If multiple files exist with different extensions, the first 
(without syntax error)
+        * in the extensions list is returned. If some previous files had 
syntax errors, these
+        * syntax errors appear in the log.
+        *
+        * The available extensions are listed in the function 
MediaWikiFarmUtils::readFile.
+        *
+        * @param string $filename File name without the extension.
+        * @param string $directory Directory containing the file.
+        * @param string $cacheDir Cache directory.
+        * @param string[] $log Error log.
+        * @param string[] $formats List of possible extensions of the file.
+        * @param bool $cache The successfully file read must be cached.
+        * @return array 2-tuple with the result (array) and file read 
(string); in case no files were found, the second value is an empty string.
+        */
+       static function readAnyFile( $filename, $directory, $cacheDir, array 
&$log, $formats = array( 'yml', 'php', 'json' ), $cache = true ) {
+
+               foreach( $formats as $format ) {
+
+                       $array = self::readFile( $filename . '.' . $format, 
$cacheDir, $log, $directory, $cache );
+                       if( is_array( $array ) ) {
+                               return array( $array, $filename . '.' . $format 
);
+                       }
+               }
+
+               return array( array(), '' );
+       }
+
+       /**
         * Guess if a given directory contains MediaWiki.
         *
         * This heuristic (presence of [dir]/includes/DefaultSettings.php) has 
no false negatives
diff --git a/tests/phpunit/ConfigurationTest.php 
b/tests/phpunit/ConfigurationTest.php
index 7ca59f1..56c8d88 100644
--- a/tests/phpunit/ConfigurationTest.php
+++ b/tests/phpunit/ConfigurationTest.php
@@ -48,10 +48,8 @@
         * @uses MediaWikiFarmConfiguration::__construct
         * @uses MediaWikiFarmConfiguration::getConfiguration
         * @uses MediaWikiFarmConfiguration::setEnvironment
-        * @uses AbstractMediaWikiFarmScript::rmdirr
-        * @uses MediaWikiFarmUtils::arrayMerge
-        * @uses MediaWikiFarmUtils::cacheFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses AbstractMediaWikiFarmScript
+        * @uses MediaWikiFarmUtils
         */
        function testHighlevelConfiguration() {
 
@@ -166,8 +164,7 @@
         * @uses MediaWikiFarmConfiguration::__construct
         * @uses MediaWikiFarmConfiguration::getConfiguration
         * @uses MediaWikiFarmConfiguration::composerKey
-        * @uses MediaWikiFarmUtils::isMediaWiki
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testLoadingMechanisms() {
 
@@ -347,9 +344,8 @@
         * @uses MediaWikiFarmConfiguration::setEnvironment
         * @uses MediaWikiFarmConfiguration::sortExtensions
         * @uses MediaWikiFarmConfiguration::composerKey
-        * @uses AbstractMediaWikiFarmScript::rmdirr
-        * @uses MediaWikiFarmUtils::arrayMerge
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses AbstractMediaWikiFarmScript
+        * @uses MediaWikiFarmUtils
         */
        function testLoadMediaWikiConfigMonoversion() {
 
@@ -397,10 +393,8 @@
         * @uses MediaWikiFarm::replaceVariables
         * @uses MediaWikiFarm::readFile
         * @uses MediaWikiFarmConfiguration::__construct
-        * @uses AbstractMediaWikiFarmScript::rmdirr
-        * @uses MediaWikiFarmUtils::cacheFile
-        * @uses MediaWikiFarmUtils::isMediaWiki
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses AbstractMediaWikiFarmScript
+        * @uses MediaWikiFarmUtils
         */
        function testSort() {
 
diff --git a/tests/phpunit/ConstructionTest.php 
b/tests/phpunit/ConstructionTest.php
index 5da9da6..40c61b4 100644
--- a/tests/phpunit/ConstructionTest.php
+++ b/tests/phpunit/ConstructionTest.php
@@ -26,7 +26,7 @@
         * @covers MediaWikiFarm::getFarmConfiguration
         * @covers MediaWikiFarm::getVariable
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testSuccessfulConstructionMultiversion() {
 
@@ -83,7 +83,7 @@
         * @covers MediaWikiFarm::getFarmConfiguration
         * @covers MediaWikiFarm::getVariable
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testSuccessfulConstructionMonoversion() {
 
@@ -152,7 +152,7 @@
         * @covers MediaWikiFarm::getFarmConfiguration
         * @covers MediaWikiFarm::getVariable
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testSuccessfulConstructionMultiversionSubdirectories() {
 
@@ -206,7 +206,7 @@
         * @covers MediaWikiFarm::__construct
         * @covers MediaWikiFarm::selectFarm
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         *
         * @expectedException MWFConfigurationException
         * @expectedExceptionMessage No configuration file found
@@ -479,7 +479,7 @@
         * @covers MediaWikiFarm::selectFarm
         * @covers MediaWikiFarm::getVariable
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testSuccessfulConstructionWithGlobalVariable() {
 
@@ -505,7 +505,7 @@
         * @covers MediaWikiFarm::selectFarm
         * @covers MediaWikiFarm::getVariable
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testSuccessfulConstructionWithGlobalVariable2() {
 
@@ -531,7 +531,7 @@
         * @covers MediaWikiFarm::selectFarm
         * @covers MediaWikiFarm::getVariable
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testSuccessfulConstructionWithGlobalVariable3() {
 
@@ -557,7 +557,7 @@
         * @covers MediaWikiFarm::selectFarm
         * @uses MediaWikiFarm::getVariable
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testNormalPath() {
 
@@ -579,7 +579,7 @@
         * @covers MediaWikiFarm::selectFarm
         * @uses MediaWikiFarm::getVariable
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testNormalPath2() {
 
@@ -600,7 +600,7 @@
         * @covers MediaWikiFarm::__construct
         * @covers MediaWikiFarm::selectFarm
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         *
         * @expectedException MWFConfigurationException
         * @expectedExceptionMessage No farm corresponding to this host
@@ -622,7 +622,7 @@
         * @covers MediaWikiFarm::__construct
         * @covers MediaWikiFarm::selectFarm
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         *
         * @expectedException MWFConfigurationException
         * @expectedExceptionMessage No farm corresponding to this host
@@ -644,7 +644,7 @@
         * @covers MediaWikiFarm::__construct
         * @covers MediaWikiFarm::selectFarm
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         *
         * @expectedException MWFConfigurationException
         * @expectedExceptionMessage No farm corresponding to this host
@@ -667,9 +667,8 @@
         * @covers MediaWikiFarm::selectFarm
         * @covers MediaWikiFarm::getCacheDir
         * @uses MediaWikiFarm::readFile
-        * @uses AbstractMediaWikiFarmScript::rmdirr
-        * @uses MediaWikiFarmUtils::cacheFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses AbstractMediaWikiFarmScript
+        * @uses MediaWikiFarmUtils
         */
        function testCacheDirectoryCreation() {
 
@@ -698,7 +697,7 @@
         * @covers MediaWikiFarmConfiguration::__construct
         * @covers MediaWikiFarmConfiguration::getConfiguration
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testCheckBasicObjectPropertiesMultiversion() {
 
@@ -744,7 +743,7 @@
         * @covers MediaWikiFarm::getConfigFile
         * @covers MediaWikiFarm::isLocalSettingsFresh
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testCheckBasicObjectPropertiesMonoversion() {
 
@@ -773,7 +772,7 @@
         * @covers MediaWikiFarm::selectFarm
         * @covers MediaWikiFarm::getVariable
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testNormalRedirect() {
 
@@ -794,7 +793,7 @@
         * @covers MediaWikiFarm::__construct
         * @covers MediaWikiFarm::selectFarm
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         *
         * @expectedException MWFConfigurationException
         * @expectedExceptionMessage Infinite or too long redirect detected
@@ -816,7 +815,7 @@
         * @covers MediaWikiFarm::__construct
         * @covers MediaWikiFarm::selectFarm
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         *
         * @expectedException MWFConfigurationException
         * @expectedExceptionMessage No farm corresponding to this host
@@ -863,9 +862,7 @@
         * @uses MediaWikiFarmConfiguration::detectComposer
         * @uses MediaWikiFarmConfiguration::setEnvironment
         * @uses MediaWikiFarmConfiguration::getConfiguration
-        * @uses MediaWikiFarmUtils::arrayMerge
-        * @uses MediaWikiFarmUtils::isMediaWiki
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testLoadingCorrect() {
 
@@ -918,7 +915,7 @@
         * @uses MediaWikiFarmConfiguration::sortExtensions
         * @uses MediaWikiFarmConfiguration::setEnvironment
         * @uses MediaWikiFarmConfiguration::getConfiguration
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testLoadingSoftMissingError() {
 
@@ -956,7 +953,7 @@
         * @uses MediaWikiFarm::readFile
         * @uses MediaWikiFarm::prepareLog
         * @uses MediaWikiFarm::issueLog
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testLoadingHardMissingError() {
 
@@ -978,8 +975,8 @@
         * @covers MediaWikiFarm::selectFarm
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
-        * @uses MediaWikiFarmUtils5_3::readYAML
+        * @uses MediaWikiFarmUtils
+        * @uses MediaWikiFarmUtils5_3
         *
         * @expectedException MWFConfigurationException
         * @expectedExceptionMessage Infinite or too long redirect detected
@@ -1001,7 +998,7 @@
         * @covers MediaWikiFarm::selectFarm
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         *
         * @expectedException MWFConfigurationException
         * @expectedExceptionMessage Infinite or too long redirect detected
diff --git a/tests/phpunit/InstallationIndependantTest.php 
b/tests/phpunit/InstallationIndependantTest.php
index ea1b88a..e2aafd6 100644
--- a/tests/phpunit/InstallationIndependantTest.php
+++ b/tests/phpunit/InstallationIndependantTest.php
@@ -44,6 +44,29 @@
        }
 
        /**
+        * Create a PHP file with a bad syntax.
+        */
+       static function setUpBeforeClass() {
+
+               parent::setUpBeforeClass();
+
+               # Dynamically create this file to avoid CI error reports
+               file_put_contents( self::$wgMediaWikiFarmTestDataDir . 
'/readAnyFile/badsyntax.php', "<?php\nreturn array()\n" );
+       }
+
+       /**
+        * Remove the previously-created file.
+        */
+       static function tearDownAfterClass() {
+
+               if( is_file( self::$wgMediaWikiFarmTestDataDir . 
'/readAnyFile/badsyntax.php' ) ) {
+                       unlink( self::$wgMediaWikiFarmTestDataDir . 
'/readAnyFile/badsyntax.php' );
+               }
+
+               parent::tearDownAfterClass();
+       }
+
+       /**
         * Set up the default MediaWikiFarm object with a sample correct 
configuration file.
         */
        protected function setUp() {
@@ -66,6 +89,7 @@
         * @covers MediaWikiFarmUtils5_3::readYAML
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::selectFarm
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testSuccessfulReadingYAML() {
 
@@ -91,6 +115,7 @@
         * @covers MediaWikiFarmUtils::readFile
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::selectFarm
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testSuccessfulReadingPHP() {
 
@@ -110,6 +135,7 @@
         * @covers MediaWikiFarmUtils::readFile
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::selectFarm
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testSuccessfulReadingJSON() {
 
@@ -129,6 +155,7 @@
         * @covers MediaWikiFarmUtils::readFile
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::selectFarm
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testSuccessfulReadingSER() {
 
@@ -148,6 +175,7 @@
         * @covers MediaWikiFarmUtils::readFile
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::selectFarm
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testSuccessfulReadingDblist() {
 
@@ -167,6 +195,7 @@
         * @covers MediaWikiFarmUtils::readFile
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::selectFarm
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testReadMissingFile() {
 
@@ -181,6 +210,7 @@
         * @covers MediaWikiFarmUtils::readFile
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::selectFarm
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testUnrecognisedFormatReadFile() {
 
@@ -198,6 +228,7 @@
         * @covers MediaWikiFarmUtils::readFile
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::selectFarm
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testBadArgumentReadFile() {
 
@@ -213,6 +244,7 @@
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::selectFarm
         * @uses MediaWikiFarmUtils5_3::readYAML
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testBadSyntaxFileReadingYAML() {
 
@@ -234,6 +266,7 @@
         * @covers MediaWikiFarmUtils::readFile
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::selectFarm
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testBadSyntaxFileReadingJSON() {
 
@@ -249,6 +282,7 @@
         * @covers MediaWikiFarmUtils::readFile
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::selectFarm
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testBadSyntaxFileReadingPHP() {
 
@@ -264,6 +298,7 @@
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::selectFarm
         * @uses MediaWikiFarmUtils5_3::readYAML
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testEmptyFileReadingYAML() {
 
@@ -284,6 +319,7 @@
         * @covers MediaWikiFarmUtils::readFile
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::selectFarm
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testEmptyFileReadingJSON() {
 
@@ -298,6 +334,7 @@
         * @covers MediaWikiFarmUtils::readFile
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::selectFarm
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testEmptyFileReadingSER() {
 
@@ -312,6 +349,7 @@
         * @covers MediaWikiFarmUtils::readFile
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::selectFarm
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testBadContentReadFile() {
 
@@ -330,6 +368,7 @@
         * @uses MediaWikiFarm::readFile
         * @uses MediaWikiFarm::getCacheDir
         * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testNoCache() {
 
@@ -352,6 +391,7 @@
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::selectFarm
         * @uses AbstractMediaWikiFarmScript::rmdirr
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testCacheFile() {
 
@@ -396,6 +436,86 @@
        }
 
        /**
+        * [unit] Test reading an extension-less file.
+        *
+        * @covers MediaWikiFarmUtils::readAnyFile
+        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarm // should be removed: only used in setUp
+        */
+       function testReadAnyFileSuccess() {
+
+               $log = array();
+               $result = MediaWikiFarmUtils::readAnyFile( 'success', 
self::$wgMediaWikiFarmTestDataDir . '/readAnyFile', false, $log );
+
+               $this->assertEquals(
+                       true,
+                       is_array( $result ) && array_keys( $result ) === array( 
0, 1 ),
+                       'The returned value should be a list with two elements.'
+               );
+               $this->assertEquals( 'success.php', $result[1], 'The read file 
should be the PHP file.' );
+               $this->assertEquals(
+                       array(
+                               0 => 'element1',
+                               1 => array(
+                                       'element2' => 'element3',
+                               ),
+                       ),
+                       $result[0],
+                       'The result should be the specified array.'
+               );
+       }
+
+       /**
+        * [unit] Test reading an extension-less file but non-existant file.
+        *
+        * @covers MediaWikiFarmUtils::readAnyFile
+        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarm // should be removed: only used in setUp
+        */
+       function testReadAnyFileNonExistant() {
+
+               $log = array();
+               $result = MediaWikiFarmUtils::readAnyFile( 'nonexistant', 
self::$wgMediaWikiFarmTestDataDir . '/readAnyFile', false, $log );
+
+               $this->assertEquals(
+                       true,
+                       is_array( $result ) && array_keys( $result ) === array( 
0, 1 ),
+                       'The returned value should be a list with two elements.'
+               );
+               $this->assertEquals( '', $result[1], 'There should be no read 
file.' );
+               $this->assertEquals(
+                       array(),
+                       $result[0],
+                       'The result should be an empty array.'
+               );
+       }
+
+       /**
+        * [unit] Test reading an extension-less file with a bad syntax.
+        *
+        * @covers MediaWikiFarmUtils::readAnyFile
+        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarm // should be removed: only used in setUp
+        */
+       function testReadAnyFileBadSyntax() {
+
+               $log = array();
+               $result = MediaWikiFarmUtils::readAnyFile( 'badsyntax', 
self::$wgMediaWikiFarmTestDataDir . '/readAnyFile', false, $log );
+
+               $this->assertEquals(
+                       true,
+                       is_array( $result ) && array_keys( $result ) === array( 
0, 1 ),
+                       'The returned value should be a list with two elements.'
+               );
+               $this->assertEquals( '', $result[1], 'There should be no read 
file because the only file has a syntax error.' );
+               $this->assertEquals(
+                       array(),
+                       $result[0],
+                       'The result should be an empty array.'
+               );
+       }
+
+       /**
         * Test a farm with a badly-formatted ‘variables’ file.
         *
         * This test is mainly used to add code coverage; the assertion is 
tested elsewhere.
@@ -408,6 +528,7 @@
         * @uses MediaWikiFarm::setVariable
         * @uses MediaWikiFarm::replaceVariables
         * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils::readAnyFile
         *
         * @expectedException MWFConfigurationException
         * @expectedExceptionMessage Missing or badly formatted file 
'badsyntax.json' defining existing values for variable 'wiki'
@@ -426,6 +547,7 @@
         * @uses MediaWikiFarm::selectFarm
         * @uses MediaWikiFarm::readFile
         * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils::readAnyFile
         *
         * @expectedException InvalidArgumentException
         * @expectedExceptionMessage Argument of 
MediaWikiFarm->replaceVariables() must be a string or an array.
@@ -445,6 +567,7 @@
         * @uses MediaWikiFarm::getCodeDir
         * @uses MediaWikiFarm::readFile
         * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testCreateLocalSettings() {
 
@@ -565,6 +688,7 @@
         * @uses MediaWikiFarm::selectFarm
         * @uses MediaWikiFarm::readFile
         * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils::readAnyFile
         */
        function testComposerKey() {
 
diff --git a/tests/phpunit/LoadingTest.php b/tests/phpunit/LoadingTest.php
index 6549363..cef98d3 100644
--- a/tests/phpunit/LoadingTest.php
+++ b/tests/phpunit/LoadingTest.php
@@ -100,9 +100,7 @@
         * @uses MediaWikiFarmConfiguration::populateSettings
         * @uses MediaWikiFarmConfiguration::detectComposer
         * @uses MediaWikiFarmConfiguration::getConfiguration
-        * @uses MediaWikiFarmUtils::arrayMerge
-        * @uses MediaWikiFarmUtils::isMediaWiki
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testAllLoadingMechanisms() {
 
@@ -270,9 +268,7 @@
         * @uses MediaWikiFarmConfiguration::setEnvironment
         * @uses MediaWikiFarmConfiguration::sortExtensions
         * @uses MediaWikiFarmConfiguration::getConfiguration
-        * @uses MediaWikiFarmUtils::arrayMerge
-        * @uses MediaWikiFarmUtils::isMediaWiki
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testExceptionsLoadingMechanisms() {
 
diff --git a/tests/phpunit/LoggingTest.php b/tests/phpunit/LoggingTest.php
index 7b03845..7a8015d 100644
--- a/tests/phpunit/LoggingTest.php
+++ b/tests/phpunit/LoggingTest.php
@@ -61,7 +61,7 @@
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::selectFarm
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testLoggingAMessage() {
 
@@ -86,7 +86,7 @@
         * @uses MediaWikiFarm::__construct
         * @uses MediaWikiFarm::selectFarm
         * @uses MediaWikiFarm::readFile
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testLoggingAMessageAndAnException() {
 
diff --git a/tests/phpunit/MediaWikiFarmTestCase.php 
b/tests/phpunit/MediaWikiFarmTestCase.php
index 6b21161..7355e9b 100644
--- a/tests/phpunit/MediaWikiFarmTestCase.php
+++ b/tests/phpunit/MediaWikiFarmTestCase.php
@@ -50,6 +50,9 @@
        /** @var string Farm code directory. */
        public static $wgMediaWikiFarmFarmDir = '';
 
+       /** @var string Data directory for tests. */
+       public static $wgMediaWikiFarmTestDataDir = '';
+
        /** @var string Configuration directory for tests. */
        public static $wgMediaWikiFarmConfigDir = '';
 
@@ -114,6 +117,7 @@
 
                # Set test configuration parameters
                self::$wgMediaWikiFarmFarmDir = dirname( dirname( dirname( 
__FILE__ ) ) );
+               self::$wgMediaWikiFarmTestDataDir = dirname( __FILE__ ) . 
'/data';
                self::$wgMediaWikiFarmConfigDir = dirname( __FILE__ ) . 
'/data/config';
                self::$wgMediaWikiFarmCodeDir = dirname( __FILE__ ) . 
'/data/mediawiki';
                self::$wgMediaWikiFarmCacheDir = dirname( __FILE__ ) . 
'/data/cache';
diff --git a/tests/phpunit/MonoversionInstallationTest.php 
b/tests/phpunit/MonoversionInstallationTest.php
index eb6af33..baf9435 100644
--- a/tests/phpunit/MonoversionInstallationTest.php
+++ b/tests/phpunit/MonoversionInstallationTest.php
@@ -18,6 +18,7 @@
  * @group MediaWikiFarm
  * @covers MediaWikiFarm
  * @covers MediaWikiFarmUtils::readFile
+ * @uses MediaWikiFarmUtils::readAnyFile
  */
 class MonoversionInstallationTest extends MediaWikiFarmTestCase {
 
diff --git a/tests/phpunit/MultiversionInstallationTest.php 
b/tests/phpunit/MultiversionInstallationTest.php
index 5ff1323..ca41658 100644
--- a/tests/phpunit/MultiversionInstallationTest.php
+++ b/tests/phpunit/MultiversionInstallationTest.php
@@ -19,6 +19,7 @@
  * @covers MediaWikiFarmUtils::isMediaWiki
  * @covers MediaWikiFarmUtils::cacheFile
  * @covers MediaWikiFarmUtils::readFile
+ * @uses MediaWikiFarmUtils::readAnyFile
  */
 class MultiversionInstallationTest extends MediaWikiFarmTestCase {
 
diff --git a/tests/phpunit/bin/MediaWikiFarmScriptTest.php 
b/tests/phpunit/bin/MediaWikiFarmScriptTest.php
index 50e0370..a63fddb 100644
--- a/tests/phpunit/bin/MediaWikiFarmScriptTest.php
+++ b/tests/phpunit/bin/MediaWikiFarmScriptTest.php
@@ -325,7 +325,7 @@
         * @uses MediaWikiFarmConfiguration::setEnvironment
         * @uses MediaWikiFarmConfiguration::sortExtensions
         * @uses MediaWikiFarmConfiguration::getConfiguration
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testMissingHost() {
 
@@ -367,7 +367,7 @@
         * @uses MediaWikiFarm::readFile
         * @uses MediaWikiFarm::prepareLog
         * @uses MediaWikiFarm::issueLog
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testInternalProblem() {
 
@@ -425,7 +425,7 @@
         * @uses MediaWikiFarmConfiguration::sortExtensions
         * @uses MediaWikiFarmConfiguration::getConfiguration
         * @uses MediaWikiFarmUtils::arrayMerge
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testMissingScript() {
 
@@ -487,9 +487,7 @@
         * @uses MediaWikiFarmConfiguration::setEnvironment
         * @uses MediaWikiFarmConfiguration::sortExtensions
         * @uses MediaWikiFarmConfiguration::getConfiguration
-        * @uses MediaWikiFarmUtils::arrayMerge
-        * @uses MediaWikiFarmUtils::isMediaWiki
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testSuccessfulLoading() {
 
@@ -567,8 +565,7 @@
         * @uses MediaWikiFarmConfiguration::setEnvironment
         * @uses MediaWikiFarmConfiguration::sortExtensions
         * @uses MediaWikiFarmConfiguration::getConfiguration
-        * @uses MediaWikiFarmUtils::arrayMerge
-        * @uses MediaWikiFarmUtils::readFile
+        * @uses MediaWikiFarmUtils
         */
        function testRestInPeace() {
 
diff --git a/tests/phpunit/data/readAnyFile/success.json 
b/tests/phpunit/data/readAnyFile/success.json
new file mode 100644
index 0000000..16774d1
--- /dev/null
+++ b/tests/phpunit/data/readAnyFile/success.json
@@ -0,0 +1,3 @@
+[
+       "element1"
+]
diff --git a/tests/phpunit/data/readAnyFile/success.php 
b/tests/phpunit/data/readAnyFile/success.php
new file mode 100644
index 0000000..933e950
--- /dev/null
+++ b/tests/phpunit/data/readAnyFile/success.php
@@ -0,0 +1,8 @@
+<?php
+
+return array(
+       0 => 'element1',
+       1 => array(
+               'element2' => 'element3',
+       ),
+);

-- 
To view, visit https://gerrit.wikimedia.org/r/380394
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If01341da9fd6d099baadb61bf51d86eadbbfc919
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MediaWikiFarm
Gerrit-Branch: master
Gerrit-Owner: Seb35 <se...@seb35.fr>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to