mw.Title: Handle empty this.title
authorAlex Monk <krenair@wikimedia.org>
Wed, 1 Jul 2015 15:40:22 +0000 (16:40 +0100)
committerAlex Monk <krenair@gmail.com>
Wed, 1 Jul 2015 19:13:25 +0000 (20:13 +0100)
Otherwise we break code like this:
mw.Title.newFromText( '.foo' ).getPrefixedText()
because this.title[0] won't be set and you can't uppercase it

Bug: T104377
Change-Id: I1dae1e63e474757da725f76bced442ebd5b76c25

resources/src/mediawiki/mediawiki.Title.js
tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js

index e46eca5..661ab74 100644 (file)
                 * @return {string}
                 */
                getName: function () {
-                       if ( $.inArray( this.namespace, mw.config.get( 'wgCaseSensitiveNamespaces' ) ) !== -1 ) {
+                       if (
+                               $.inArray( this.namespace, mw.config.get( 'wgCaseSensitiveNamespaces' ) ) !== -1 ||
+                               !this.title.length
+                       ) {
                                return this.title;
                        }
                        return this.title[0].toUpperCase() + this.title.slice( 1 );
index c0afe07..284f21a 100644 (file)
                }
        } );
 
-       QUnit.test( 'Basic parsing', 12, function ( assert ) {
+       QUnit.test( 'Basic parsing', 21, function ( assert ) {
                var title;
                title = new mw.Title( 'File:Foo_bar.JPG' );
 
                title = new mw.Title( 'Foo#bar' );
                assert.equal( title.getPrefixedText(), 'Foo' );
                assert.equal( title.getFragment(), 'bar' );
+
+               title = new mw.Title( '.foo' );
+               assert.equal( title.getPrefixedText(), '.foo' );
+               assert.equal( title.getName(), '' );
+               assert.equal( title.getNameText(), '' );
+               assert.equal( title.getExtension(), 'foo' );
+               assert.equal( title.getDotExtension(), '.foo' );
+               assert.equal( title.getMain(), '.foo' );
+               assert.equal( title.getMainText(), '.foo' );
+               assert.equal( title.getPrefixedDb(), '.foo' );
+               assert.equal( title.getPrefixedText(), '.foo' );
        } );
 
        QUnit.test( 'Transformation', 11, function ( assert ) {