Bartosz Dziewoński has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/113307

Change subject: mediawiki.jqueryMsg: Don't throw parse errors in the user's face
......................................................................

mediawiki.jqueryMsg: Don't throw parse errors in the user's face

Log them to the console instead, displaying unparsed text.

Added tests for this behavior.

Change-Id: I8290387e1e85ad68f0198c6c8e4cd5e4c74832d3
---
M resources/mediawiki/mediawiki.jqueryMsg.js
M tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
2 files changed, 42 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/07/113307/1

diff --git a/resources/mediawiki/mediawiki.jqueryMsg.js 
b/resources/mediawiki/mediawiki.jqueryMsg.js
index e4a9316..c39f38c 100644
--- a/resources/mediawiki/mediawiki.jqueryMsg.js
+++ b/resources/mediawiki/mediawiki.jqueryMsg.js
@@ -122,7 +122,14 @@
                        try {
                                return parser.parse( key, argsArray );
                        } catch ( e ) {
-                               return $( '<span>' ).text( key + ': ' + 
e.message );
+                               var fallback = parser.settings.messages.get( 
key );
+                               // 'text' should not be escaped; 'plain' never 
reaches here; 'parse' is escaped later
+                               if ( parser.settings.format === 'escaped' ) {
+                                       fallback = mw.html.escape( fallback );
+                               }
+
+                               mw.log.warn( 'mediawiki.jqueryMsg: ' + key + ': 
' + e.message );
+                               return $( '<span>' ).text( fallback );
                        }
                };
        }
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js 
b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
index 6e13e13..700341f 100644
--- a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
@@ -1,6 +1,7 @@
 ( function ( mw, $ ) {
-       var mwLanguageCache = {}, formatText, formatParse, formatnumTests, 
specialCharactersPageName,
-               expectedListUsers, expectedEntrypoints;
+       var mwLanguageCache = {}, formatText, formatEscaped, formatParse,
+               formatnumTests, specialCharactersPageName,
+               expectedListUsers, expectedEntrypoints, fakeLog;
 
        // When the expected result is the same in both modes
        function assertBothModes( assert, parserArguments, expectedResult, 
assertMessage ) {
@@ -48,7 +49,9 @@
                        formatText = mw.jqueryMsg.getMessageFunction( {
                                format: 'text'
                        } );
-
+                       formatEscaped = mw.jqueryMsg.getMessageFunction( {
+                               format: 'escaped'
+                       } );
                        formatParse = mw.jqueryMsg.getMessageFunction( {
                                format: 'parse'
                        } );
@@ -274,8 +277,8 @@
                mw.messages.set( 'pipe-trick', '[[Tampa, Florida|]]' );
                assert.equal(
                        formatParse( 'pipe-trick' ),
-                       'pipe-trick: Parse error at position 0 in input: 
[[Tampa, Florida|]]',
-                       'Pipe trick should return error string.'
+                       '[[Tampa, Florida|]]',
+                       'Pipe trick should not be parsed.'
                );
 
                expectedMultipleBars = '<a title="Main Page" 
href="/wiki/Main_Page">Main|Page</a>';
@@ -710,4 +713,30 @@
        );
 } );
 
+       QUnit.test( 'Behavior in case of invalid wikitext', 4, function ( 
assert ) {
+               var logSpy = this.sandbox.spy( mw.log, 'warn' );
+
+               mw.messages.set( 'invalid-wikitext', '<b>{{FAIL}}</b>' );
+
+               assert.equal(
+                       formatParse( 'invalid-wikitext' ),
+                       '&lt;b&gt;{{FAIL}}&lt;/b&gt;',
+                       'Invalid wikitext: \'parse\' format'
+               );
+
+               assert.equal(
+                       formatEscaped( 'invalid-wikitext' ),
+                       '&lt;b&gt;{{FAIL}}&lt;/b&gt;',
+                       'Invalid wikitext: \'escaped\' format'
+               );
+
+               assert.equal(
+                       formatText( 'invalid-wikitext' ),
+                       '<b>{{FAIL}}</b>',
+                       'Invalid wikitext: \'text\' format'
+               );
+
+               assert.equal( logSpy.callCount, 3, 'mw.log.warn calls' );
+       } );
+
 }( mediaWiki, jQuery ) );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8290387e1e85ad68f0198c6c8e4cd5e4c74832d3
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Bartosz Dziewoński <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to