Merge "mw.loader: Use for-loop instead of $.each()"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sat, 19 Nov 2016 00:41:15 +0000 (00:41 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sat, 19 Nov 2016 00:41:15 +0000 (00:41 +0000)
includes/EditPage.php
includes/content/CodeContentHandler.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderImageModule.php
includes/resourceloader/ResourceLoaderUserOptionsModule.php
includes/resourceloader/ResourceLoaderUserTokensModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
resources/Resources.php
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/suite.xml
tests/phpunit/tests/MediaWikiTestCaseTest.php

index 5e31a5c..745f8de 100644 (file)
@@ -4071,7 +4071,7 @@ HTML
 
        /**
         * Returns an array of html code of the following buttons:
-        * save, diff, preview and live
+        * save, diff and preview
         *
         * @param int $tabindex Current tabindex
         *
@@ -4105,7 +4105,6 @@ HTML
                ] + Linker::tooltipAndAccesskeyAttribs( 'preview' );
                $buttons['preview'] = Html::submitButton( $this->context->msg( 'showpreview' )->text(),
                        $attribs );
-               $buttons['live'] = '';
 
                $attribs = [
                        'id' => 'wpDiff',
index 20893bb..dfd46c8 100644 (file)
 abstract class CodeContentHandler extends TextContentHandler {
 
        /**
-        * Returns the english language, because code is english, and should be handled as such.
+        * Returns the English language, because code is English, and should be handled as such.
         *
         * @param Title $title
         * @param Content $content
         *
-        * @return Language Return of wfGetLangObj( 'en' )
+        * @return Language
         *
         * @see ContentHandler::getPageLanguage()
         */
        public function getPageLanguage( Title $title, Content $content = null ) {
-               return wfGetLangObj( 'en' );
+               return Language::factory( 'en' );
        }
 
        /**
-        * Returns the english language, because code is english, and should be handled as such.
+        * Returns the English language, because code is English, and should be handled as such.
         *
         * @param Title $title
         * @param Content $content
         *
-        * @return Language Return of wfGetLangObj( 'en' )
+        * @return Language
         *
         * @see ContentHandler::getPageViewLanguage()
         */
        public function getPageViewLanguage( Title $title, Content $content = null ) {
-               return wfGetLangObj( 'en' );
+               return Language::factory( 'en' );
        }
 
        /**
index 07649e3..725bc6a 100644 (file)
@@ -117,9 +117,6 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        /** @var string Name of group to load this module in */
        protected $group;
 
-       /** @var string Position on the page to load this module at */
-       protected $position = 'bottom';
-
        /** @var bool Link to raw files in debug mode */
        protected $debugRaw = true;
 
@@ -204,8 +201,6 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         *         'messages' => [array of message key strings],
         *         // Group which this module should be loaded together with
         *         'group' => [group name string],
-        *         // Position on the page to load this module at
-        *         'position' => ['bottom' (default) or 'top']
         *         // Function that, if it returns true, makes the loader skip this module.
         *         // The file must contain valid JavaScript for execution in a private function.
         *         // The file must not contain the "function () {" and "}" wrapper though.
@@ -272,7 +267,6 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                                        $this->{$member} = $option;
                                        break;
                                // Single strings
-                               case 'position':
                                case 'group':
                                case 'skipFunction':
                                        $this->{$member} = (string)$option;
@@ -445,13 +439,6 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                return $this->group;
        }
 
-       /**
-        * @return string
-        */
-       public function getPosition() {
-               return $this->position;
-       }
-
        /**
         * Gets list of names of modules this module depends on.
         * @param ResourceLoaderContext|null $context
@@ -573,7 +560,6 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        // - dependencies (provided via startup module)
                        // - targets
                        // - group (provided via startup module)
-                       // - position (only used by OutputPage)
                        'scripts',
                        'debugScripts',
                        'styles',
index 6a8957e..ff1b7b1 100644 (file)
@@ -45,9 +45,6 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
        protected $selectorWithVariant = '.{prefix}-{name}-{variant}';
        protected $targets = [ 'desktop', 'mobile' ];
 
-       /** @var string Position on the page to load this module at */
-       protected $position = 'bottom';
-
        /**
         * Constructs a new module from an options array.
         *
@@ -183,7 +180,6 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
                                        $this->{$member} = $option;
                                        break;
 
-                               case 'position':
                                case 'prefix':
                                case 'selectorWithoutVariant':
                                case 'selectorWithVariant':
@@ -448,14 +444,6 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
                return $localBasePath;
        }
 
-       /**
-        * @return string
-        */
-       public function getPosition() {
-               $this->loadFromDefinition();
-               return $this->position;
-       }
-
        /**
         * @return string
         */
index c1b47bf..b3b3f16 100644 (file)
@@ -64,13 +64,6 @@ class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
                return false;
        }
 
-       /**
-        * @return string
-        */
-       public function getPosition() {
-               return 'top';
-       }
-
        /**
         * @return string
         */
index c8a0ff1..cea1f39 100644 (file)
@@ -74,13 +74,6 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule {
                return false;
        }
 
-       /**
-        * @return string
-        */
-       public function getPosition() {
-               return 'top';
-       }
-
        /**
         * @return string
         */
index ccb336f..14d6e05 100644 (file)
@@ -36,7 +36,6 @@
  * Safe for calls on local wikis are:
  * - Option getters:
  *   - getGroup()
- *   - getPosition()
  *   - getPages()
  * - Basic methods that strictly involve the foreign database
  *   - getDB()
@@ -44,8 +43,6 @@
  *   - getTitleInfo()
  */
 class ResourceLoaderWikiModule extends ResourceLoaderModule {
-       /** @var string Position on the page to load this module at */
-       protected $position = 'bottom';
 
        // Origin defaults to users with sitewide authority
        protected $origin = self::ORIGIN_USER_SITEWIDE;
@@ -72,7 +69,6 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
 
                foreach ( $options as $member => $option ) {
                        switch ( $member ) {
-                               case 'position':
                                case 'styles':
                                case 'scripts':
                                case 'group':
@@ -435,13 +431,6 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
                }
        }
 
-       /**
-        * @return string
-        */
-       public function getPosition() {
-               return $this->position;
-       }
-
        /**
         * @since 1.28
         * @return string
index 1dfafc7..e619771 100644 (file)
@@ -40,7 +40,6 @@ return [
                'group' => 'noscript',
        ],
        'filepage' => [
-               'position' => 'top',
                'class' => 'ResourceLoaderWikiModule',
                'styles' => [ 'MediaWiki:Filepage.css' ],
        ],
@@ -97,13 +96,11 @@ return [
         * including more than one of them into your skin as this will result in duplicate CSS.
         */
        'mediawiki.skinning.elements' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki.skinning/elements.css' => [ 'media' => 'screen' ],
                ],
        ],
        'mediawiki.skinning.content' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki.skinning/elements.css' => [ 'media' => 'screen' ],
                        'resources/src/mediawiki.skinning/content.css' => [ 'media' => 'screen' ],
@@ -111,7 +108,6 @@ return [
        ],
        // Used in the web installer. Test it after modifying this definition!
        'mediawiki.skinning.interface' => [
-               'position' => 'top',
                'class' => 'ResourceLoaderSkinModule',
                'styles' => [
                        'resources/src/mediawiki.skinning/elements.css' => [ 'media' => 'screen' ],
@@ -121,7 +117,6 @@ return [
        ],
 
        'mediawiki.skinning.content.parsoid' => [
-               'position' => 'top',
                // Style Parsoid HTML+RDFa output consistent with wikitext from PHP parser
                // with the interface.css styles; skinStyles should be used if your
                // skin over-rides common content styling.
@@ -132,7 +127,6 @@ return [
        ],
 
        'mediawiki.skinning.content.externallinks' => [
-               'position' => 'bottom',
                'styles' => [
                        'resources/src/mediawiki.skinning/content.externallinks.css' => [ 'media' => 'screen' ],
                ],
@@ -323,7 +317,6 @@ return [
        'jquery.qunit' => [
                'scripts' => 'resources/lib/qunitjs/qunit.js',
                'styles' => 'resources/lib/qunitjs/qunit.css',
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'jquery.qunit.completenessTest' => [
@@ -395,7 +388,6 @@ return [
                'group' => 'jquery.ui',
        ],
        'jquery.ui.core.styles' => [
-               'position' => 'top',
                'skinStyles' => [
                        'default' => [
                                'resources/lib/jquery.ui/themes/smoothness/jquery.ui.core.css',
@@ -869,7 +861,6 @@ return [
        'mediawiki.apihelp' => [
                'styles' => 'resources/src/mediawiki/mediawiki.apihelp.css',
                'targets' => [ 'desktop' ],
-               'position' => 'top',
        ],
        'mediawiki.template' => [
                'scripts' => 'resources/src/mediawiki/mediawiki.template.js',
@@ -891,7 +882,6 @@ return [
        'mediawiki.apipretty' => [
                'styles' => 'resources/src/mediawiki/mediawiki.apipretty.css',
                'targets' => [ 'desktop', 'mobile' ],
-               'position' => 'top',
        ],
        'mediawiki.api' => [
                'scripts' => 'resources/src/mediawiki/api.js',
@@ -967,7 +957,6 @@ return [
                ],
        ],
        'mediawiki.content.json' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki/mediawiki.content.json.less',
        ],
        'mediawiki.confirmCloseWindow' => [
@@ -986,12 +975,8 @@ return [
                'dependencies' => [
                        'jquery.footHovzer',
                ],
-               // Uses a custom mw.config variable that is set in debughtml,
-               // must be loaded on the bottom
-               'position' => 'bottom',
        ],
        'mediawiki.diff.styles' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki/mediawiki.diff.styles.css',
                        'resources/src/mediawiki/mediawiki.diff.styles.print.css' => [
@@ -1036,7 +1021,6 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.feedlink' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki/mediawiki.feedlink.css',
        ],
        'mediawiki.filewarning' => [
@@ -1061,7 +1045,6 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.helplink' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki/mediawiki.helplink.less',
                ],
@@ -1111,12 +1094,10 @@ return [
        ],
        'mediawiki.htmlform.styles' => [
                'styles' => 'resources/src/mediawiki/htmlform/styles.css',
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.htmlform.ooui.styles' => [
                'styles' => 'resources/src/mediawiki/htmlform/ooui.styles.css',
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.icon' => [
@@ -1179,7 +1160,6 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.notification.convertmessagebox.styles' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki/mediawiki.notification.convertmessagebox.styles.less',
                ],
@@ -1191,7 +1171,6 @@ return [
        ],
        'mediawiki.pager.tablePager' => [
                'styles' => 'resources/src/mediawiki/mediawiki.pager.tablePager.less',
-               'position' => 'top',
        ],
        'mediawiki.searchSuggest' => [
                'scripts' => 'resources/src/mediawiki/mediawiki.searchSuggest.js',
@@ -1209,7 +1188,6 @@ return [
                ],
        ],
        'mediawiki.sectionAnchor' => [
-               'position' => 'top',
                // Back-compat to hide it on cached pages (T18691; Ie9e334e973; 2015-03-17)
                'styles' => 'resources/src/mediawiki/mediawiki.sectionAnchor.css',
                'targets' => [ 'desktop', 'mobile' ],
@@ -1440,7 +1418,6 @@ return [
        ],
        'mediawiki.viewport' => [
                'scripts' => 'resources/src/mediawiki/mediawiki.viewport.js',
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.checkboxtoggle' => [
@@ -1459,7 +1436,6 @@ return [
                'scripts' => 'resources/src/mediawiki.toolbar/toolbar.js',
                'styles' => 'resources/src/mediawiki.toolbar/toolbar.less',
                'dependencies' => 'jquery.textSelection',
-               'position' => 'top',
        ],
        'mediawiki.experiments' => [
                'scripts' => 'resources/src/mediawiki/mediawiki.experiments.js',
@@ -1480,10 +1456,8 @@ return [
                        'jquery.byteLimit',
                        'mediawiki.api',
                ],
-               'position' => 'top',
        ],
        'mediawiki.action.edit.styles' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.styles.css',
        ],
        'mediawiki.action.edit.collapsibleFooter' => [
@@ -1526,12 +1500,10 @@ return [
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.history.css',
        ],
        'mediawiki.action.history.styles' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.history.styles.css',
        ],
        // using this module is deprecated, for diff styles use mediawiki.diff.styles instead
        'mediawiki.action.history.diff' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki/mediawiki.diff.styles.css',
                        'resources/src/mediawiki/mediawiki.diff.styles.print.css' => [
@@ -1557,7 +1529,6 @@ return [
                ],
        ],
        'mediawiki.action.view.categoryPage.styles' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less',
                'targets' => [ 'desktop', 'mobile' ]
        ],
@@ -1580,11 +1551,9 @@ return [
        'mediawiki.action.view.redirect' => [
                'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.redirect.js',
                'dependencies' => 'jquery.client',
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.action.view.redirectPage' => [
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css',
        ],
@@ -1611,7 +1580,6 @@ return [
                                [ 'media' => 'print' ],
                        'resources/src/mediawiki.action/mediawiki.action.view.filepage.css',
                ],
-               'position' => 'top',
        ],
 
        /* MediaWiki Language */
@@ -1717,12 +1685,10 @@ return [
                        'resources/src/mediawiki/page/gallery.print.css' => [ 'media' => 'print' ],
                        'resources/src/mediawiki/page/gallery.css',
                ],
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.page.gallery.slideshow' => [
                'scripts' => 'resources/src/mediawiki/page/gallery-slideshow.js',
-               'position' => 'top',
                'dependencies' => [
                        'mediawiki.api',
                        'mediawiki.Title',
@@ -1749,7 +1715,6 @@ return [
        'mediawiki.page.startup' => [
                'scripts' => 'resources/src/mediawiki/page/startup.js',
                'dependencies' => 'mediawiki.util',
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.page.patrol.ajax' => [
@@ -1812,7 +1777,6 @@ return [
        /* MediaWiki Special pages */
 
        'mediawiki.special' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.css',
                'targets' => [ 'desktop', 'mobile' ],
        ],
@@ -1883,11 +1847,9 @@ return [
                'dependencies' => 'mediawiki.util',
        ],
        'mediawiki.special.changeslist' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.css',
        ],
        'mediawiki.special.changeslist.legend' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.legend.css',
        ],
        'mediawiki.special.changeslist.legend.js' => [
@@ -1898,15 +1860,12 @@ return [
                ],
        ],
        'mediawiki.special.changeslist.enhanced' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.enhanced.css',
        ],
        'mediawiki.special.changeslist.visitedstatus' => [
-               'position' => 'top',
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.visitedstatus.js',
        ],
        'mediawiki.special.comparepages.styles' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.comparepages.styles.less',
        ],
        'mediawiki.special.edittags' => [
@@ -1921,7 +1880,6 @@ return [
        ],
        'mediawiki.special.edittags.styles' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.edittags.css',
-               'position' => 'top',
        ],
        'mediawiki.special.import' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.import.js',
@@ -1935,7 +1893,6 @@ return [
        ],
        'mediawiki.special.movePage.styles' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.movePage.css',
-               'position' => 'top',
        ],
        'mediawiki.special.pageLanguage' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.pageLanguage.js',
@@ -1944,12 +1901,10 @@ return [
                ],
        ],
        'mediawiki.special.pagesWithProp' => [
-               'position' => 'top',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.pagesWithProp.css',
        ],
        'mediawiki.special.preferences' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.preferences.js',
-               'position' => 'top',
                'messages' => [
                        'prefs-tabs-navigation-hint',
                        'prefswarning-warning',
@@ -1970,14 +1925,11 @@ return [
        ],
        'mediawiki.special.preferences.styles' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.preferences.styles.css',
-               'position' => 'top',
        ],
        'mediawiki.special.recentchanges' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.recentchanges.js',
-               'position' => 'top',
        ],
        'mediawiki.special.search' => [
-               'position' => 'top',
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.search.js',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.search.css',
                'dependencies' => 'mediawiki.widgets.SearchInputWidget',
@@ -2029,16 +1981,13 @@ return [
                'styles' => [
                        'resources/src/mediawiki.special/mediawiki.special.userlogin.common.css',
                ],
-               'position' => 'top',
        ],
        'mediawiki.special.userlogin.signup.styles' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki.special/mediawiki.special.userlogin.signup.css',
                ],
        ],
        'mediawiki.special.userlogin.login.styles' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki.special/mediawiki.special.userlogin.login.css',
                ],
@@ -2096,7 +2045,6 @@ return [
        /* MediaWiki Legacy */
 
        'mediawiki.legacy.commonPrint' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki.legacy/commonPrint.css' => [ 'media' => 'print' ]
                ],
@@ -2108,13 +2056,11 @@ return [
        ],
        // Used in the web installer. Test it after modifying this definition!
        'mediawiki.legacy.shared' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki.legacy/shared.css' => [ 'media' => 'screen' ]
                ],
        ],
        'mediawiki.legacy.oldshared' => [
-               'position' => 'top',
                'styles' => [
                        'resources/src/mediawiki.legacy/oldshared.css' => [ 'media' => 'screen' ]
                ],
@@ -2122,14 +2068,12 @@ return [
        'mediawiki.legacy.wikibits' => [
                'scripts' => 'resources/src/mediawiki.legacy/wikibits.js',
                'dependencies' => 'mediawiki.util',
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
 
        /* MediaWiki UI */
 
        'mediawiki.ui' => [
-               'position' => 'top',
                'skinStyles' => [
                        'default' => [
                                'resources/src/mediawiki.ui/default.less',
@@ -2138,7 +2082,6 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.ui.checkbox' => [
-               'position' => 'top',
                'skinStyles' => [
                        'default' => [
                                'resources/src/mediawiki.ui/components/checkbox.less',
@@ -2147,7 +2090,6 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.ui.radio' => [
-               'position' => 'top',
                'skinStyles' => [
                        'default' => [
                                'resources/src/mediawiki.ui/components/radio.less',
@@ -2157,7 +2099,6 @@ return [
        ],
        // Lightweight module for anchor styles
        'mediawiki.ui.anchor' => [
-               'position' => 'top',
                'skinStyles' => [
                        'default' => [
                                'resources/src/mediawiki.ui/components/anchors.less',
@@ -2167,7 +2108,6 @@ return [
        ],
        // Lightweight module for button styles
        'mediawiki.ui.button' => [
-               'position' => 'top',
                'skinStyles' => [
                        'default' => [
                                'resources/src/mediawiki.ui/components/buttons.less',
@@ -2176,7 +2116,6 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.ui.input' => [
-               'position' => 'top',
                'skinStyles' => [
                        'default' => [
                                'resources/src/mediawiki.ui/components/inputs.less',
@@ -2185,7 +2124,6 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.ui.icon' => [
-               'position' => 'top',
                'skinStyles' => [
                        'default' => [
                                'resources/src/mediawiki.ui/components/icons.less',
@@ -2195,7 +2133,6 @@ return [
        ],
        // Lightweight module for text styles
        'mediawiki.ui.text' => [
-               'position' => 'top',
                'skinStyles' => [
                        'default' => [
                                'resources/src/mediawiki.ui/components/text.less',
@@ -2246,7 +2183,6 @@ return [
                                'resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.base.css',
                        ],
                ],
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.widgets.DateInputWidget' => [
@@ -2375,7 +2311,6 @@ return [
                                'resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.css',
                        ],
                ],
-               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.widgets.StashedFileWidget' => [
index e0f4416..db1df5c 100644 (file)
@@ -81,6 +81,13 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         */
        private $mwGlobals = [];
 
+       /**
+        * Holds list of MediaWiki configuration settings to be unset in tearDown().
+        * See also setMwGlobals().
+        * @var array
+        */
+       private $mwGlobalsToUnset = [];
+
        /**
         * Holds original loggers which have been replaced by setLogger()
         * @var LoggerInterface[]
@@ -535,7 +542,11 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                foreach ( $this->mwGlobals as $key => $value ) {
                        $GLOBALS[$key] = $value;
                }
+               foreach ( $this->mwGlobalsToUnset as $value ) {
+                       unset( $GLOBALS[$value] );
+               }
                $this->mwGlobals = [];
+               $this->mwGlobalsToUnset = [];
                $this->restoreLoggers();
 
                if ( self::$serviceLocator && MediaWikiServices::getInstance() !== self::$serviceLocator ) {
@@ -684,8 +695,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         *
         * @param array|string $globalKeys Key to the global variable, or an array of keys.
         *
-        * @throws Exception When trying to stash an unset global
-        *
         * @note To allow changes to global variables to take effect on global service instances,
         *       call overrideMwServices().
         *
@@ -700,9 +709,13 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                        // NOTE: make sure we only save the global once or a second call to
                        // setMwGlobals() on the same global would override the original
                        // value.
-                       if ( !array_key_exists( $globalKey, $this->mwGlobals ) ) {
+                       if (
+                               !array_key_exists( $globalKey, $this->mwGlobals ) &&
+                               !array_key_exists( $globalKey, $this->mwGlobalsToUnset )
+                       ) {
                                if ( !array_key_exists( $globalKey, $GLOBALS ) ) {
-                                       throw new Exception( "Global with key {$globalKey} doesn't exist and cant be stashed" );
+                                       $this->mwGlobalsToUnset[$globalKey] = $globalKey;
+                                       continue;
                                }
                                // NOTE: we serialize then unserialize the value in case it is an object
                                // this stops any objects being passed by reference. We could use clone
index 16299aa..11a25c4 100644 (file)
@@ -43,6 +43,9 @@
                <testsuite name="structure">
                        <directory>structure</directory>
                </testsuite>
+               <testsuite name="tests">
+                       <directory>tests</directory>
+               </testsuite>
                <testsuite name="uploadfromurl">
                        <file>suites/UploadFromUrlTestSuite.php</file>
                </testsuite>
index 5d2f37e..a2ef35f 100644 (file)
@@ -90,14 +90,22 @@ class MediaWikiTestCaseTest extends MediaWikiTestCase {
 
        /**
         * @covers MediaWikiTestCase::stashMwGlobals
+        * @covers MediaWikiTestCase::tearDown
         */
-       public function testExceptionThrownWhenStashingNonExistentGlobals() {
-               $this->setExpectedException(
-                       'Exception',
-                       'Global with key ' . self::GLOBAL_KEY_NONEXISTING . ' doesn\'t exist and cant be stashed'
+       public function testSetNonExistentGlobalsAreUnsetOnTearDown() {
+               $globalKey = 'abcdefg1234567';
+               $this->setMwGlobals( $globalKey, true );
+               $this->assertTrue(
+                       $GLOBALS[$globalKey],
+                       'Global failed to correctly set'
                );
 
-               $this->stashMwGlobals( self::GLOBAL_KEY_NONEXISTING );
+               $this->tearDown();
+
+               $this->assertFalse(
+                       isset( $GLOBALS[$globalKey] ),
+                       'Global failed to be correctly unset'
+               );
        }
 
        public function testOverrideMwServices() {
@@ -134,8 +142,7 @@ class MediaWikiTestCaseTest extends MediaWikiTestCase {
         * @covers MediaWikiTestCase::setLogger
         * @covers MediaWikiTestCase::restoreLogger
         */
-       public function testLoggersAreRestoredOnTearDown() {
-               // replacing an existing logger
+       public function testLoggersAreRestoredOnTearDown_replacingExistingLogger() {
                $logger1 = LoggerFactory::getInstance( 'foo' );
                $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
                $logger2 = LoggerFactory::getInstance( 'foo' );
@@ -144,17 +151,27 @@ class MediaWikiTestCaseTest extends MediaWikiTestCase {
 
                $this->assertSame( $logger1, $logger3 );
                $this->assertNotSame( $logger1, $logger2 );
+       }
 
-               // replacing a non-existing logger
+       /**
+        * @covers MediaWikiTestCase::setLogger
+        * @covers MediaWikiTestCase::restoreLogger
+        */
+       public function testLoggersAreRestoredOnTearDown_replacingNonExistingLogger() {
                $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
-               $logger1 = LoggerFactory::getInstance( 'bar' );
+               $logger1 = LoggerFactory::getInstance( 'foo' );
                $this->tearDown();
-               $logger2 = LoggerFactory::getInstance( 'bar' );
+               $logger2 = LoggerFactory::getInstance( 'foo' );
 
                $this->assertNotSame( $logger1, $logger2 );
                $this->assertInstanceOf( '\Psr\Log\LoggerInterface', $logger2 );
+       }
 
-               // replacing same logger twice
+       /**
+        * @covers MediaWikiTestCase::setLogger
+        * @covers MediaWikiTestCase::restoreLogger
+        */
+       public function testLoggersAreRestoredOnTearDown_replacingSameLoggerTwice() {
                $logger1 = LoggerFactory::getInstance( 'baz' );
                $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
                $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );