protected function parseMultiValue( $valueName, $value, $allowMultiple, $allowedValues,
$allSpecifier = null, $limit1 = null, $limit2 = null
) {
- if ( ( trim( $value ) === '' || trim( $value ) === "\x1f" ) && $allowMultiple ) {
+ if ( ( $value === '' || $value === "\x1f" ) && $allowMultiple ) {
return [];
}
$limit1 = $limit1 ?: self::LIMIT_SML1;
"lockmanager-fail-closelock": "Could not close lock file for \"$1\".",
"lockmanager-fail-deletelock": "Could not delete lock file for \"$1\".",
"lockmanager-fail-acquirelock": "Could not acquire lock for \"$1\".",
- "lockmanager-fail-openlock": "Could not open lock file for \"$1\".",
+ "lockmanager-fail-openlock": "Could not open lock file for \"$1\". Make sure your upload directory is configured correctly and your web server has permission to write to that directory. See https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory for more information.",
"lockmanager-fail-releaselock": "Could not release lock for \"$1\".",
"lockmanager-fail-db-bucket": "Could not contact enough lock databases in bucket $1.",
"lockmanager-fail-db-release": "Could not release locks on database $1.",
mw.hook( 'RcFilters.popup.open' ).fire();
- if ( !this.getMenu().getSelectedItem() ) {
+ if ( !this.getMenu().findSelectedItem() ) {
// If there are no selected items, scroll menu to top
// This has to be in a setTimeout so the menu has time
// to be positioned and fixed
*/
mw.rcfilters.ui.MenuSelectWidget.prototype.onKeyDown = function ( e ) {
var nextItem,
- currentItem = this.findHighlightedItem() || this.getSelectedItem();
+ currentItem = this.findHighlightedItem() || this.findSelectedItem();
// Call parent
mw.rcfilters.ui.MenuSelectWidget.parent.prototype.onKeyDown.call( this, e );
$this->assertArrayHasKey( 'invalid', $data[0]['query']['pages'][-1] );
}
+ public function testTitlesWithWhitespaces() {
+ $data = $this->doApiRequest( [
+ 'action' => 'query',
+ 'titles' => ' '
+ ] );
+
+ $this->assertArrayHasKey( 'query', $data[0] );
+ $this->assertArrayHasKey( 'pages', $data[0]['query'] );
+ $this->assertEquals( 1, count( $data[0]['query']['pages'] ) );
+ $this->assertArrayHasKey( -1, $data[0]['query']['pages'] );
+ $this->assertArrayHasKey( 'invalid', $data[0]['query']['pages'][-1] );
+ }
+
/**
* Test the ApiBase::titlePartToKey function
*
--- /dev/null
+'use strict';
+const Page = require( './page' );
+
+class UserMessagePage extends Page {
+ get usermessage() { return browser.element( 'div.usermessage' ); }
+}
+module.exports = new UserMessagePage();
const assert = require( 'assert' ),
CreateAccountPage = require( '../pageobjects/createaccount.page' ),
PreferencesPage = require( '../pageobjects/preferences.page' ),
- UserLoginPage = require( '../pageobjects/userlogin.page' );
+ UserLoginPage = require( '../pageobjects/userlogin.page' ),
+ UserMessagePage = require( '../pageobjects/usermessage.page' ),
+ EditPage = require( '../pageobjects/edit.page' );
describe( 'User', function () {
} );
+ it( 'should be able to view new message banner', function () {
+
+ // create user
+ browser.call( function () {
+ return CreateAccountPage.apiCreateAccount( username, password );
+ } );
+
+ // create talk page with content
+ browser.call( function () {
+ return EditPage.apiEdit( 'User_talk:' + username, Math.random().toString() );
+ } );
+
+ // log in
+ UserLoginPage.login( username, password );
+
+ // check
+ assert.equal( UserMessagePage.usermessage.getText(), 'You have a new message (last change).' );
+
+ } );
+
} );