From a0628e5c22314a787b13b93c40c3de9cbb141431 Mon Sep 17 00:00:00 2001 From: Fomafix Date: Thu, 1 Oct 2015 18:28:45 +0000 Subject: [PATCH] mediawiki.Uri: Support names of Object prototypes as keys in query JSHint W001 has to be disabled to avoid warnings about a key named 'hasOwnProperty'. Bug: T114344 Change-Id: I7a58204c98d7a490906c6a23620e9f24ebb3db0a --- resources/src/mediawiki/mediawiki.Uri.js | 5 +++-- .../resources/mediawiki/mediawiki.Uri.test.js | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/resources/src/mediawiki/mediawiki.Uri.js b/resources/src/mediawiki/mediawiki.Uri.js index 29b224ee6a..9d29b4cd74 100644 --- a/resources/src/mediawiki/mediawiki.Uri.js +++ b/resources/src/mediawiki/mediawiki.Uri.js @@ -276,7 +276,8 @@ */ parse: function ( str, options ) { var q, matches, - uri = this; + uri = this, + hasOwn = Object.prototype.hasOwnProperty; // Apply parser regex and set all properties based on the result matches = parser[ options.strictMode ? 'strict' : 'loose' ].exec( str ); @@ -298,7 +299,7 @@ // If overrideKeys, always (re)set top level value. // If not overrideKeys but this key wasn't set before, then we set it as well. - if ( options.overrideKeys || q[ k ] === undefined ) { + if ( options.overrideKeys || !hasOwn.call( q, k ) ) { q[ k ] = v; // Use arrays if overrideKeys is false and key was already seen before diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js index 51374bd8f4..63de2fdd24 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js @@ -60,7 +60,7 @@ } ); } ); - QUnit.test( 'Constructor( String[, Object ] )', 10, function ( assert ) { + QUnit.test( 'Constructor( String[, Object ] )', 11, function ( assert ) { var uri; uri = new mw.Uri( 'http://www.example.com/dir/?m=foo&m=bar&n=1', { @@ -132,6 +132,20 @@ strictMode: false } ); assert.equal( uri.toString(), 'http://example.com/bar/baz', 'normalize URI without protocol or // in loose mode' ); + + /*jshint -W001 */ + uri = new mw.Uri( 'http://example.com/index.php?key=key&hasOwnProperty=hasOwnProperty&constructor=constructor&watch=watch' ); + assert.deepEqual( + uri.query, + { + key: 'key', + constructor: 'constructor', + hasOwnProperty: 'hasOwnProperty', + watch: 'watch' + }, + 'Keys in query strings support names of Object prototypes (bug T114344)' + ); + /*jshint +W001 */ } ); QUnit.test( 'Constructor( Object )', 3, function ( assert ) { -- 2.20.1