diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2012-05-03 13:01:35 +0200 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2012-05-03 13:01:35 +0200 |
commit | d9022f63880ce039446fba8364f68e656b7bf4cb (patch) | |
tree | 16b40fbf17bf7c9ee6f4ead25b16dd192378050a /tests/qunit/suites/resources/mediawiki | |
parent | 27cf83d177256813e2e802241085fce5dd0f3fb9 (diff) |
Update to MediaWiki 1.19.0
Diffstat (limited to 'tests/qunit/suites/resources/mediawiki')
-rw-r--r-- | tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js | 201 | ||||
-rw-r--r-- | tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js | 43 | ||||
-rw-r--r-- | tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js | 29 | ||||
-rw-r--r-- | tests/qunit/suites/resources/mediawiki/mediawiki.test.js (renamed from tests/qunit/suites/resources/mediawiki/mediawiki.js) | 130 | ||||
-rw-r--r-- | tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js (renamed from tests/qunit/suites/resources/mediawiki/mediawiki.user.js) | 12 | ||||
-rw-r--r-- | tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js (renamed from tests/qunit/suites/resources/mediawiki/mediawiki.util.js) | 56 |
6 files changed, 394 insertions, 77 deletions
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js new file mode 100644 index 00000000..e04111f1 --- /dev/null +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js @@ -0,0 +1,201 @@ +( function () { + +// mw.Title relies on these three config vars +// Restore them after each test run +var config = { + "wgFormattedNamespaces": { + "-2": "Media", + "-1": "Special", + "0": "", + "1": "Talk", + "2": "User", + "3": "User talk", + "4": "Wikipedia", + "5": "Wikipedia talk", + "6": "File", + "7": "File talk", + "8": "MediaWiki", + "9": "MediaWiki talk", + "10": "Template", + "11": "Template talk", + "12": "Help", + "13": "Help talk", + "14": "Category", + "15": "Category talk", + // testing custom / localized namespace + "100": "Penguins" + }, + "wgNamespaceIds": { + "media": -2, + "special": -1, + "": 0, + "talk": 1, + "user": 2, + "user_talk": 3, + "wikipedia": 4, + "wikipedia_talk": 5, + "file": 6, + "file_talk": 7, + "mediawiki": 8, + "mediawiki_talk": 9, + "template": 10, + "template_talk": 11, + "help": 12, + "help_talk": 13, + "category": 14, + "category_talk": 15, + "image": 6, + "image_talk": 7, + "project": 4, + "project_talk": 5, + /* testing custom / alias */ + "penguins": 100, + "antarctic_waterfowl": 100 + }, + "wgCaseSensitiveNamespaces": [] +}; + +module( 'mediawiki.Title', QUnit.newMwEnvironment( config ) ); + +test( '-- Initial check', function () { + expect(1); + ok( mw.Title, 'mw.Title defined' ); +}); + +test( 'Transformation', function () { + expect(8); + + var title; + + title = new mw.Title( 'File:quux pif.jpg' ); + equal( title.getName(), 'Quux_pif' ); + + title = new mw.Title( 'File:Glarg_foo_glang.jpg' ); + equal( title.getNameText(), 'Glarg foo glang' ); + + title = new mw.Title( 'User:ABC.DEF' ); + equal( title.toText(), 'User:ABC.DEF' ); + equal( title.getNamespaceId(), 2 ); + equal( title.getNamespacePrefix(), 'User:' ); + + title = new mw.Title( 'uSEr:hAshAr' ); + equal( title.toText(), 'User:HAshAr' ); + equal( title.getNamespaceId(), 2 ); + + title = new mw.Title( ' MediaWiki: Foo bar .js ' ); + // Don't ask why, it's the way the backend works. One space is kept of each set + equal( title.getName(), 'Foo_bar_.js', "Merge multiple spaces to a single space." ); +}); + +test( 'Main text for filename', function () { + expect(8); + + var title = new mw.Title( 'File:foo_bar.JPG' ); + + equal( title.getNamespaceId(), 6 ); + equal( title.getNamespacePrefix(), 'File:' ); + equal( title.getName(), 'Foo_bar' ); + equal( title.getNameText(), 'Foo bar' ); + equal( title.getMain(), 'Foo_bar.JPG' ); + equal( title.getMainText(), 'Foo bar.JPG' ); + equal( title.getExtension(), 'JPG' ); + equal( title.getDotExtension(), '.JPG' ); +}); + +test( 'Namespace detection and conversion', function () { + expect(6); + + var title; + + title = new mw.Title( 'something.PDF', 6 ); + equal( title.toString(), 'File:Something.PDF' ); + + title = new mw.Title( 'NeilK', 3 ); + equal( title.toString(), 'User_talk:NeilK' ); + equal( title.toText(), 'User talk:NeilK' ); + + title = new mw.Title( 'Frobisher', 100 ); + equal( title.toString(), 'Penguins:Frobisher' ); + + title = new mw.Title( 'antarctic_waterfowl:flightless_yet_cute.jpg' ); + equal( title.toString(), 'Penguins:Flightless_yet_cute.jpg' ); + + title = new mw.Title( 'Penguins:flightless_yet_cute.jpg' ); + equal( title.toString(), 'Penguins:Flightless_yet_cute.jpg' ); +}); + +test( 'Throw error on invalid title', function () { + expect(1); + + raises(function () { + var title = new mw.Title( '' ); + }, 'Throw error on empty string' ); +}); + +test( 'Case-sensivity', function () { + expect(3); + + var title; + + // Default config + mw.config.set( 'wgCaseSensitiveNamespaces', [] ); + + title = new mw.Title( 'article' ); + equal( title.toString(), 'Article', 'Default config: No sensitive namespaces by default. First-letter becomes uppercase' ); + + // $wgCapitalLinks = false; + mw.config.set( 'wgCaseSensitiveNamespaces', [0, -2, 1, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15] ); + + title = new mw.Title( 'article' ); + equal( title.toString(), 'article', '$wgCapitalLinks=false: Article namespace is sensitive, first-letter case stays lowercase' ); + + title = new mw.Title( 'john', 2 ); + equal( title.toString(), 'User:John', '$wgCapitalLinks=false: User namespace is insensitive, first-letter becomes uppercase' ); +}); + +test( 'toString / toText', function () { + expect(2); + + var title = new mw.Title( 'Some random page' ); + + equal( title.toString(), title.getPrefixedDb() ); + equal( title.toText(), title.getPrefixedText() ); +}); + +test( 'Exists', function () { + expect(3); + + var title; + + // Empty registry, checks default to null + + title = new mw.Title( 'Some random page', 4 ); + strictEqual( title.exists(), null, 'Return null with empty existance registry' ); + + // Basic registry, checks default to boolean + mw.Title.exist.set( ['Does_exist', 'User_talk:NeilK', 'Wikipedia:Sandbox_rules'], true ); + mw.Title.exist.set( ['Does_not_exist', 'User:John', 'Foobar'], false ); + + title = new mw.Title( 'Project:Sandbox rules' ); + assertTrue( title.exists(), 'Return true for page titles marked as existing' ); + title = new mw.Title( 'Foobar' ); + assertFalse( title.exists(), 'Return false for page titles marked as nonexistent' ); + +}); + +test( 'Url', function () { + expect(2); + + var title; + + // Config + mw.config.set( 'wgArticlePath', '/wiki/$1' ); + + title = new mw.Title( 'Foobar' ); + equal( title.getUrl(), '/wiki/Foobar', 'Basic functionally, toString passing to wikiGetlink' ); + + title = new mw.Title( 'John Doe', 3 ); + equal( title.getUrl(), '/wiki/User_talk:John_Doe', 'Escaping in title and namespace for urls' ); +}); + +}() );
\ No newline at end of file diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js new file mode 100644 index 00000000..265ec2ae --- /dev/null +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js @@ -0,0 +1,43 @@ +module( 'mediawiki.jqueryMsg' ); + +test( '-- Initial check', function() { + expect( 1 ); + ok( mw.jqueryMsg, 'mw.jqueryMsg defined' ); +} ); + +test( 'mw.jqueryMsg Plural', function() { + expect( 5 ); + var parser = mw.jqueryMsg.getMessageFunction(); + ok( parser, 'Parser Function initialized' ); + ok( mw.messages.set( 'plural-msg', 'Found $1 {{PLURAL:$1|item|items}}' ), 'mw.messages.set: Register' ); + equal( parser( 'plural-msg', 0 ) , 'Found 0 items', 'Plural test for english with zero as count' ); + equal( parser( 'plural-msg', 1 ) , 'Found 1 item', 'Singular test for english' ); + equal( parser( 'plural-msg', 2 ) , 'Found 2 items', 'Plural test for english' ); +} ); + + +test( 'mw.jqueryMsg Gender', function() { + expect( 16 ); + //TODO: These tests should be for mw.msg once mw.msg integrated with mw.jqueryMsg + var user = mw.user; + user.options.set( 'gender', 'male' ); + var parser = mw.jqueryMsg.getMessageFunction(); + ok( parser, 'Parser Function initialized' ); + //TODO: English may not be the best language for these tests. Use a language like Arabic or Russian + ok( mw.messages.set( 'gender-msg', '$1 reverted {{GENDER:$2|his|her|their}} last edit' ), 'mw.messages.set: Register' ); + equal( parser( 'gender-msg', 'Bob', 'male' ) , 'Bob reverted his last edit', 'Gender masculine' ); + equal( parser( 'gender-msg', 'Bob', user ) , 'Bob reverted his last edit', 'Gender masculine' ); + user.options.set( 'gender', 'unknown' ); + equal( parser( 'gender-msg', 'They', user ) , 'They reverted their last edit', 'Gender neutral or unknown' ); + equal( parser( 'gender-msg', 'Alice', 'female' ) , 'Alice reverted her last edit', 'Gender feminine' ); + equal( parser( 'gender-msg', 'User' ) , 'User reverted their last edit', 'Gender neutral' ); + equal( parser( 'gender-msg', 'User', 'unknown' ) , 'User reverted their last edit', 'Gender neutral' ); + ok( mw.messages.set( 'gender-msg-one-form', '{{GENDER:$1|User}} reverted last $2 {{PLURAL:$2|edit|edits}}' ), 'mw.messages.set: Register' ); + equal( parser( 'gender-msg-one-form', 'male', 10 ) , 'User reverted last 10 edits', 'Gender neutral and plural form' ); + equal( parser( 'gender-msg-one-form', 'female', 1 ) , 'User reverted last 1 edit', 'Gender neutral and singular form' ); + ok( mw.messages.set( 'gender-msg-lowercase', '{{gender:$1|he|she}} is awesome' ), 'mw.messages.set: Register' ); + equal( parser( 'gender-msg-lowercase', 'male' ) , 'he is awesome', 'Gender masculine' ); + equal( parser( 'gender-msg-lowercase', 'female' ) , 'she is awesome', 'Gender feminine' ); + ok( mw.messages.set( 'gender-msg-wrong', '{{gender}} is awesome' ), 'mw.messages.set: Register' ); + equal( parser( 'gender-msg-wrong', 'female' ) , ' is awesome', 'Wrong syntax used, but ignore the {{gender}}' ); +} ); diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js index 52cd32c8..24005b64 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js @@ -1,6 +1,6 @@ /* Some misc JavaScript compatibility tests, just to make sure the environments we run in are consistent */ -module( 'mediawiki.jscompat' ); +module( 'mediawiki.jscompat', QUnit.newMwEnvironment() ); test( 'Variable with Unicode letter in name', function() { expect(3); @@ -33,3 +33,30 @@ test( 'Keyword workaround: "if" as member variable name using Unicode escapes', deepEqual( foo.\u0069\u0066, orig, 'foo.\\u0069\\u0066' ); }); */ + +test( 'Stripping of single initial newline from textarea\'s literal contents (bug 12130)', function() { + var maxn = 4; + expect(maxn * 2); + + var repeat = function(str, n) { + if (n <= 0) { + return ''; + } else { + var out = Array(n); + for (var i = 0; i < n; i++) { + out[i] = str; + } + return out.join(''); + } + }; + + for (var n = 0; n < maxn; n++) { + var expected = repeat('\n', n) + 'some text'; + + var $textarea = $('<textarea>\n' + expected + '</textarea>'); + equal($textarea.val(), expected, 'Expecting ' + n + ' newlines (HTML contained ' + (n + 1) + ')'); + + var $textarea2 = $('<textarea>').val(expected); + equal($textarea2.val(), expected, 'Expecting ' + n + ' newlines (from DOM set with ' + n + ')'); + } +}); diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.js b/tests/qunit/suites/resources/mediawiki/mediawiki.test.js index 4beed881..e6934eda 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.test.js @@ -1,4 +1,4 @@ -module( 'mediawiki.js' ); +module( 'mediawiki', QUnit.newMwEnvironment() ); test( '-- Initial check', function() { expect(8); @@ -80,7 +80,7 @@ test( 'mw.config', function() { }); test( 'mw.message & mw.messages', function() { - expect(17); + expect(20); ok( mw.messages, 'messages defined' ); ok( mw.messages instanceof mw.Map, 'mw.messages instance of mw.Map' ); @@ -88,7 +88,7 @@ test( 'mw.message & mw.messages', function() { var hello = mw.message( 'hello' ); - equal( hello.format, 'parse', 'Message property "format" defaults to "parse"' ); + equal( hello.format, 'plain', 'Message property "format" defaults to "plain"' ); strictEqual( hello.map, mw.messages, 'Message property "map" defaults to the global instance in mw.messages' ); equal( hello.key, 'hello', 'Message property "key" (currect key)' ); deepEqual( hello.parameters, [], 'Message property "parameters" defaults to an empty array' ); @@ -111,59 +111,45 @@ test( 'mw.message & mw.messages', function() { strictEqual( hello.exists(), true, 'Message.exists returns true for existing messages' ); var goodbye = mw.message( 'goodbye' ); - strictEqual( goodbye.exists(), false, 'Message.exists returns false for inexisting messages' ); + strictEqual( goodbye.exists(), false, 'Message.exists returns false for nonexistent messages' ); equal( goodbye.plain(), '<goodbye>', 'Message.toString returns plain <key> if format is "plain" and key does not exist' ); // bug 30684 equal( goodbye.escaped(), '<goodbye>', 'Message.toString returns properly escaped <key> if format is "escaped" and key does not exist' ); + + ok( mw.messages.set( 'pluraltestmsg', 'There {{PLURAL:$1|is|are}} $1 {{PLURAL:$1|result|results}}' ), 'mw.messages.set: Register' ); + var pluralMessage = mw.message( 'pluraltestmsg' , 6 ); + equal( pluralMessage.plain(), 'There are 6 results', 'plural get resolved when format is plain' ); + equal( pluralMessage.parse(), 'There are 6 results', 'plural get resolved when format is parse' ); + }); test( 'mw.msg', function() { - expect(3); + expect(11); ok( mw.messages.set( 'hello', 'Hello <b>awesome</b> world' ), 'mw.messages.set: Register' ); - equal( mw.msg( 'hello' ), 'Hello <b>awesome</b> world', 'Gets message with default options (existing message)' ); - equal( mw.msg( 'goodbye' ), '<goodbye>', 'Gets message with default options (inexisting message)' ); -}); + equal( mw.msg( 'goodbye' ), '<goodbye>', 'Gets message with default options (nonexistent message)' ); -test( 'mw.loader', function() { - expect(5); + ok( mw.messages.set( 'plural-item' , 'Found $1 {{PLURAL:$1|item|items}}' ) ); + equal( mw.msg( 'plural-item', 5 ), 'Found 5 items', 'Apply plural for count 5' ); + equal( mw.msg( 'plural-item', 0 ), 'Found 0 items', 'Apply plural for count 0' ); + equal( mw.msg( 'plural-item', 1 ), 'Found 1 item', 'Apply plural for count 1' ); - // Regular expression to extract the path for the QUnit tests - // Takes into account that tests could be run from a file:// URL - // by excluding the 'index.html' part from the URL - var rePath = /(?:[^#\?](?!index.html))*\/?/; + ok( mw.messages.set('gender-plural-msg' , '{{GENDER:$1|he|she|they}} {{PLURAL:$2|is|are}} awesome' ) ); + equal( mw.msg( 'gender-plural-msg', 'male', 1 ), 'he is awesome', 'Gender test for male, plural count 1' ); + equal( mw.msg( 'gender-plural-msg', 'female', '1' ), 'she is awesome', 'Gender test for female, plural count 1' ); + equal( mw.msg( 'gender-plural-msg', 'unknown', 10 ), 'they are awesome', 'Gender test for neutral, plural count 10' ); - // Four assertions to test the above regular expression: - equal( - rePath.exec( 'http://path/to/tests/?foobar' )[0], - "http://path/to/tests/", - "Extracting path from http URL with query" - ); - equal( - rePath.exec( 'http://path/to/tests/#frag' )[0], - "http://path/to/tests/", - "Extracting path from http URL with fragment" - ); - equal( - rePath.exec( 'file://path/to/tests/index.html?foobar' )[0], - "file://path/to/tests/", - "Extracting path from local URL (file://) with query" - ); - equal( - rePath.exec( 'file://path/to/tests/index.html#frag' )[0], - "file://path/to/tests/", - "Extracting path from local URL (file://) with fragment" - ); +}); - // Asynchronous ahead - stop(5000); +test( 'mw.loader', function() { + expect(1); - // Extract path - var tests_path = rePath.exec( location.href ); + // Asynchronous ahead + stop(); - mw.loader.implement( 'is.awesome', [QUnit.fixurl( tests_path + 'data/defineTestCallback.js')], {}, {} ); + mw.loader.implement( 'is.awesome', [QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/defineTestCallback.js' )], {}, {} ); mw.loader.using( 'is.awesome', function() { @@ -185,9 +171,9 @@ test( 'mw.loader.bug29107' , function() { // Message doesn't exist already ok( !mw.messages.exists( 'bug29107' ) ); - // Async! Include a timeout, as failure in this test leads to neither the - // success nor failure callbacks getting called. - stop(5000); + // Async! Failure in this test may lead to neither the success nor error callbacks getting called. + // Due to QUnit's timeout feauture we won't hang here forever if this happends. + stop(); mw.loader.implement( 'bug29107.messages-only', [], {}, {'bug29107': 'loaded'} ); mw.loader.using( 'bug29107.messages-only', function() { @@ -199,8 +185,31 @@ test( 'mw.loader.bug29107' , function() { }); }); +test( 'mw.loader.bug30825', function() { + // This bug was actually already fixed in 1.18 and later when discovered in 1.17. + // Test is for regressions! + + expect(2); + + // Forge an URL to the test callback script + var target = QUnit.fixurl( + mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/qunitOkCall.js' + ); + + // Confirm that mw.loader.load() works with protocol-relative URLs + target = target.replace( /https?:/, '' ); + + equal( target.substr( 0, 2 ), '//', + 'URL must be relative to test relative URLs!' + ); + + // Async! + stop(); + mw.loader.load( target ); +}); + test( 'mw.html', function() { - expect(7); + expect(11); raises( function(){ mw.html.escape(); @@ -214,11 +223,40 @@ test( 'mw.html', function() { equal( mw.html.element( 'div' ), '<div/>', 'html.element DIV (simple)' ); - equal( mw.html.element( 'div', - { id: 'foobar' } ), + equal( + mw.html.element( + 'div', { + id: 'foobar' + } + ), '<div id="foobar"/>', 'html.element DIV (attribs)' ); + equal( mw.html.element( 'p', null, 12 ), '<p>12</p>', 'Numbers are valid content and should be casted to a string' ); + + equal( mw.html.element( 'p', { title: 12 }, '' ), '<p title="12"></p>', 'Numbers are valid attribute values' ); + + equal( + mw.html.element( + 'option', { + selected: true + }, 'Foo' + ), + '<option selected="selected">Foo</option>', + 'Attributes may have boolean values. True copies the attribute name to the value.' + ); + + equal( + mw.html.element( + 'option', { + value: 'foo', + selected: false + }, 'Foo' + ), + '<option value="foo">Foo</option>', + 'Attributes may have boolean values. False keeps the attribute from output.' + ); + equal( mw.html.element( 'div', null, 'a' ), '<div>a</div>', diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.user.js b/tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js index d5c6baad..15265db5 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.user.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js @@ -1,4 +1,4 @@ -module( 'mediawiki.user.js' ); +module( 'mediawiki.user', QUnit.newMwEnvironment() ); test( '-- Initial check', function() { expect(1); @@ -16,6 +16,16 @@ test( 'options', function() { test( 'User login status', function() { expect(5); + /** + * Tests can be run under three different conditions: + * 1) From tests/qunit/index.html, user will be anonymous. + * 2) Logged in on [[Special:JavaScriptTest/qunit]] + * 3) Anonymously at the same special page. + */ + + // Forge an anonymous user: + mw.config.set( 'wgUserName', null); + strictEqual( mw.user.name(), null, 'user.name should return null when anonymous' ); ok( mw.user.anonymous(), 'user.anonymous should reutrn true when anonymous' ); diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.util.js b/tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js index 9c05d9b2..ea28935e 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.util.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js @@ -1,4 +1,4 @@ -module( 'mediawiki.util.js' ); +module( 'mediawiki.util', QUnit.newMwEnvironment() ); test( '-- Initial check', function() { expect(1); @@ -47,13 +47,12 @@ test( 'wikiScript', function() { equal( mw.util.wikiScript(), mw.config.get( 'wgScript' ), 'Defaults to index.php and is equal to wgScript' ); equal( mw.util.wikiScript( 'api' ), '/w/api.php', 'API path' ); - }); test( 'addCSS', function() { expect(3); - var $testEl = $( '<div>' ).attr( 'id', 'mw-addcsstest' ).appendTo( 'body' ); + var $testEl = $( '<div>' ).attr( 'id', 'mw-addcsstest' ).appendTo( '#qunit-fixture' ); var style = mw.util.addCSS( '#mw-addcsstest { visibility: hidden; }' ); equal( typeof style, 'object', 'addCSS returned an object' ); @@ -62,9 +61,7 @@ test( 'addCSS', function() { equal( $testEl.css( 'visibility' ), 'hidden', 'Added style properties are in effect' ); // Clean up - $( style.ownerNode ) - .add( $testEl ) - .remove(); + $( style.ownerNode ).remove(); }); test( 'toggleToc', function() { @@ -80,7 +77,7 @@ test( 'toggleToc', function() { '</div>' + '<ul><li></li></ul>' + '</td></tr></table>', - $toc = $(tocHtml).appendTo( 'body' ), + $toc = $(tocHtml).appendTo( '#qunit-fixture' ), $toggleLink = $( '#togglelink' ); strictEqual( $toggleLink.length, 1, 'Toggle link is appended to the page.' ); @@ -91,9 +88,6 @@ test( 'toggleToc', function() { var actionC = function() { start(); - - // Clean up - $toc.remove(); }; var actionB = function() { start(); stop(); @@ -109,18 +103,18 @@ test( 'toggleToc', function() { test( 'getParamValue', function() { expect(5); - var url1 = 'http://mediawiki.org/?foo=wrong&foo=right#&foo=bad'; + var url1 = 'http://example.org/?foo=wrong&foo=right#&foo=bad'; equal( mw.util.getParamValue( 'foo', url1 ), 'right', 'Use latest one, ignore hash' ); strictEqual( mw.util.getParamValue( 'bar', url1 ), null, 'Return null when not found' ); - var url2 = 'http://mediawiki.org/#&foo=bad'; + var url2 = 'http://example.org/#&foo=bad'; strictEqual( mw.util.getParamValue( 'foo', url2 ), null, 'Ignore hash if param is not in querystring but in hash (bug 27427)' ); - var url3 = 'example.com?' + $.param({ 'TEST': 'a b+c' }); + var url3 = 'example.org?' + $.param({ 'TEST': 'a b+c' }); strictEqual( mw.util.getParamValue( 'TEST', url3 ), 'a b+c', 'Bug 30441: getParamValue must understand "+" encoding of space' ); - var url4 = 'example.com?' + $.param({ 'TEST': 'a b+c d' }); // check for sloppy code from r95332 :) + var url4 = 'example.org?' + $.param({ 'TEST': 'a b+c d' }); // check for sloppy code from r95332 :) strictEqual( mw.util.getParamValue( 'TEST', url4 ), 'a b+c d', 'Bug 30441: getParamValue must understand "+" encoding of space (multiple spaces)' ); }); @@ -139,51 +133,55 @@ test( '$content', function() { strictEqual( mw.util.$content.length, 1, 'mw.util.$content must have length of 1' ); }); + +/** + * Portlet names are prefixed with 'p-test' to avoid conflict with core + * when running the test suite under a wiki page. + * Previously, test elements where invisible to the selector since only + * one element can have a given id. + */ test( 'addPortletLink', function() { expect(7); var mwPanel = '<div id="mw-panel" class="noprint">\ <h5>Toolbox</h5>\ - <div class="portlet" id="p-tb">\ + <div class="portlet" id="p-test-tb">\ <ul class="body"></ul>\ </div>\ </div>', - vectorTabs = '<div id="p-views" class="vectorTabs">\ + vectorTabs = '<div id="p-test-views" class="vectorTabs">\ <h5>Views</h5>\ <ul></ul>\ </div>', - $mwPanel = $(mwPanel).appendTo( 'body' ), - $vectorTabs = $(vectorTabs).appendTo( 'body' ); + $mwPanel = $(mwPanel).appendTo( '#qunit-fixture' ), + $vectorTabs = $(vectorTabs).appendTo( '#qunit-fixture' ); - var tbRL = mw.util.addPortletLink( 'p-tb', 'http://mediawiki.org/wiki/ResourceLoader', + var tbRL = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/ResourceLoader', 'ResourceLoader', 't-rl', 'More info about ResourceLoader on MediaWiki.org ', 'l' ); ok( $.isDomElement( tbRL ), 'addPortletLink returns a valid DOM Element according to $.isDomElement' ); - var tbMW = mw.util.addPortletLink( 'p-tb', 'http://mediawiki.org/', + var tbMW = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/', 'MediaWiki.org', 't-mworg', 'Go to MediaWiki.org ', 'm', tbRL ), $tbMW = $( tbMW ); - + equal( $tbMW.attr( 'id' ), 't-mworg', 'Link has correct ID set' ); - equal( $tbMW.closest( '.portlet' ).attr( 'id' ), 'p-tb', 'Link was inserted within correct portlet' ); + equal( $tbMW.closest( '.portlet' ).attr( 'id' ), 'p-test-tb', 'Link was inserted within correct portlet' ); equal( $tbMW.next().attr( 'id' ), 't-rl', 'Link is in the correct position (by passing nextnode)' ); - var tbRLDM = mw.util.addPortletLink( 'p-tb', 'http://mediawiki.org/wiki/RL/DM', + var tbRLDM = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM', 'Default modules', 't-rldm', 'List of all default modules ', 'd', '#t-rl' ); equal( $( tbRLDM ).next().attr( 'id' ), 't-rl', 'Link is in the correct position (by passing CSS selector)' ); - var caFoo = mw.util.addPortletLink( 'p-views', '#', 'Foo' ); + var caFoo = mw.util.addPortletLink( 'p-test-views', '#', 'Foo' ); strictEqual( $tbMW.find( 'span').length, 0, 'No <span> element should be added for porlets without vectorTabs class.' ); strictEqual( $( caFoo ).find( 'span').length, 1, 'A <span> element should be added for porlets with vectorTabs class.' ); - + // Clean up - $( [tbRL, tbMW, tbRLDM, caFoo] ) - .add( $mwPanel ) - .add( $vectorTabs ) - .remove(); + $( [tbRL, tbMW, tbRLDM, caFoo] ).remove(); }); test( 'jsMessage', function() { |