//<nowiki>
$( function($) {
// Only load on script's pages
if ( mw.config.get('wgPageName').indexOf(':Evad37/rater') === -1 ) {
return;
}
// Create (hidden) output div, if needed
$('<div>').attr('id', 'qunit').hide().insertBefore('#firstHeading');
// Load QUnit
mw.loader.load( 'https://en.wikipedia.org/w/index.php?title=User:Evad37/qunit-2.8.0.css&action=raw&ctype=text/css', 'text/css' );
/* ========== Unit tests ======================================================================== */
var runTests = function() {
$.getScript( 'https://en.wikipedia.org/w/index.php?title=User:Evad37/qunit-2.8.0.js&action=raw&ctype=text/javascript', function() {
// Show output div
$('#qunit').show();
// Import vars
var config = window.testRater.config;
var API = window.testRater.API;
var getListOfBanner = window.testRater.getListOfBaners;
var Page = window.testRater.Page;
var Template = window.testRater.Template;
var SuggestionLookupTextInputWidget = window.testRater.SuggestionLookupTextInputWidget;
var ComboBoxInputPrompt = window.testRater.ComboBoxInputPrompt;
var OverlayDialog = window.testRater.OverlayDialog;
var windowFactory = window.testRater.windowFactory;
var windowManager = window.testRater.windowManager;
var Dialog = window.testRater.Dialog;
var setupRater = window.testRater.setupRater;
var autoStart = window.testRater.autoStart;
var writeToCache = window.testRater.writeToCache;
QUnit.module("Config")
QUnit.test("Banners are set", function( assert ) {
assert.expect();
var done = assert.async();
config.gotListOfBanners.always(function() {
assert.ok(config.banners != null, "config.banners is set");
assert.ok(config.banners.withRatings != null, "config.banners.withRatings is set");
assert.ok(config.banners.withoutRatings != null, "config.banners.withoutRatings is set");
assert.ok(config.banners.withoutRatings != null, "config.banners.withoutRatings is set");
assert.ok(config.banners.wrappers != null, "config.banners.wrappers is set");
assert.ok(config.banners.withRatings instanceof Object, "config.banners.withRatings is an Object");
assert.ok(config.banners.withoutRatings instanceof Array, "config.banners.withoutRatings is an Array");
assert.ok(config.banners.withoutRatings instanceof Array, "config.banners.withoutRatings is an Array");
assert.ok(config.banners.wrappers instanceof Array, "config.banners.wrappers is an Array");
done();
});
})
QUnit.module( "Page class");
QUnit.test( "newFromText()", function( assert ) {
assert.ok( Page.newFromText('Example') instanceof Page, "'Example' makes a Page object" );
assert.ok( Page.newFromText('Talk:Example') instanceof Page, "'Talk:Example' makes a Page object" );
assert.notOk( Page.newFromText(':::Example') instanceof Page, "':::Example' does not make a Page object" );
});
QUnit.test( "getTalk()", function( assert ) {
assert.equal( Page.newFromText('Example').getTalk(), 'Talk:Example', "Talk page for 'Example' is 'Talk:Example'" );
assert.equal( Page.newFromText('Talk:Example').getTalk(), 'Talk:Example', "Talk page for 'Talk:Example' is 'Talk:Example'" );
assert.equal( Page.newFromText('Template:Example').getTalk(), 'Template talk:Example', "Talk page for 'Template:Example' is 'Template talk:Example'" );
assert.equal( Page.newFromText('Template talk:Example').getTalk(), 'Template talk:Example', "Talk page for 'Template talk:Example' is 'Template talk:Example'" );
});
QUnit.test( "getSubject()", function( assert ) {
assert.equal( Page.newFromText('Example').getSubject(), 'Example', "Subject page for 'Example' is 'Example'" );
assert.equal( Page.newFromText('Talk:Example').getSubject(), 'Example', "Subject page for 'Talk:Example' is 'Example'" );
assert.equal( Page.newFromText('Template:Example').getSubject(), 'Template:Example', "Subject page for 'Template:Example' is 'Template:Example'" );
assert.equal( Page.newFromText('Template talk:Example').getSubject(), 'Template:Example', "Subject page for 'Template talk:Example' is 'Template:Example'" );
});
QUnit.test( "getListasAutofill()", function( assert ) {
assert.equal( Page.newFromText('Single').getListasAutofill(), 'Single', "Single" );
assert.equal( Page.newFromText('First Last').getListasAutofill(), 'Last, First', "First Last" );
assert.equal( Page.newFromText('First Middle Last').getListasAutofill(), 'Last, First Middle', "First Middle Last" );
assert.equal( Page.newFromText('First Middle Other Last').getListasAutofill(), 'Last, First Middle Other', "First Middle Other Last" );
assert.equal( Page.newFromText('Single (disambig)').getListasAutofill(), 'Single', "Single (disambig)" );
assert.equal( Page.newFromText('First Last (disambig)').getListasAutofill(), 'Last, First', "First Last (disambig)" );
assert.equal( Page.newFromText('First Middle Last (disambig)').getListasAutofill(), 'Last, First Middle', "First Middle Last (disambig)" );
assert.equal( Page.newFromText('First Middle Other Last (disambig)').getListasAutofill(), 'Last, First Middle Other', "First Middle Other Last (disambig)" );
assert.equal( Page.newFromText('Single Jr.').getListasAutofill(), 'Single Jr.', "Single Jr." );
assert.equal( Page.newFromText('First Last Jr.').getListasAutofill(), 'Last, First Jr.', "First Last Jr." );
assert.equal( Page.newFromText('First Middle Last Jr.').getListasAutofill(), 'Last, First Middle Jr.', "First Middle Last Jr." );
assert.equal( Page.newFromText('First Middle Other Last Jr.').getListasAutofill(), 'Last, First Middle Other Jr.', "First Middle Other Last Jr." );
assert.equal( Page.newFromText('Single Jr. (disambig)').getListasAutofill(), 'Single Jr.', "Single Jr. (disambig)" );
assert.equal( Page.newFromText('First Last Jr. (disambig)').getListasAutofill(), 'Last, First Jr.', "First Last Jr. (disambig)" );
assert.equal( Page.newFromText('First Middle Last Jr. (disambig)').getListasAutofill(), 'Last, First Middle Jr.', "First Middle Last Jr. (disambig)" );
assert.equal( Page.newFromText('First Middle Other Last Jr. (disambig)').getListasAutofill(), 'Last, First Middle Other Jr.', "First Middle Other Last Jr. (disambig)" );
assert.equal( Page.newFromText('Single XIV').getListasAutofill(), 'Single XIV', "Single XIV" );
assert.equal( Page.newFromText('First Last XIV').getListasAutofill(), 'Last, First XIV', "First Last XIV" );
assert.equal( Page.newFromText('First Middle Last XIV').getListasAutofill(), 'Last, First Middle XIV', "First Middle Last XIV" );
assert.equal( Page.newFromText('First Middle Other Last XIV').getListasAutofill(), 'Last, First Middle Other XIV', "First Middle Other Last XIV" );
assert.equal( Page.newFromText('Single XIV (disambig)').getListasAutofill(), 'Single XIV', "Single XIV (disambig)" );
assert.equal( Page.newFromText('First Last XIV (disambig)').getListasAutofill(), 'Last, First XIV', "First Last XIV (disambig)" );
assert.equal( Page.newFromText('First Middle Last XIV (disambig)').getListasAutofill(), 'Last, First Middle XIV', "First Middle Last XIV (disambig)" );
assert.equal( Page.newFromText('First Middle Other Last XIV (disambig)').getListasAutofill(), 'Last, First Middle Other XIV', "First Middle Other Last XIV (disambig)" );
});
QUnit.test( "getBannerFromNameOrRedirect()", function( assert ) {
var examplePage = Page.newFromText('Perth (suburb)');
examplePage.banners = [
Template.newFromRawWikitext('{{WP AUSTRALIA}}'),
Template.newFromRawWikitext('{{WikiProject Biography}}'),
Template.newFromRawWikitext('{{WikiProject Australian Roads}}')
];
examplePage.banners[0].redirectsTo = Template.newFromRawWikitext('{{WikiProject Australia}}');
assert.notOk( Page.newFromText('Example').getBannerFromNameOrRedirect('Some banner name'), "Page has no banners" );
assert.notOk( examplePage.getBannerFromNameOrRedirect('Some banner name'), "Banner not present" );
assert.deepEqual( examplePage.getBannerFromNameOrRedirect('WikiProject Biography'), examplePage.banners[1], "Banner is present" );
assert.deepEqual( examplePage.getBannerFromNameOrRedirect('WikiProject Australia'), examplePage.banners[0], "Banner's redirect is present" );
});
QUnit.test( "getTalkpageTopSection", function( assert ) {
assert.expect();
var done = assert.async();
var exampleWhereTalkExists = Page.newFromText('Perth (suburb)');
var exampleWhereTalkDoesNotExist = Page.newFromText('ifdjbingjuhtrsiugbbvhsiuriutniuv');
$.when(
exampleWhereTalkExists.getTalkpageTopSection(),
exampleWhereTalkDoesNotExist.getTalkpageTopSection()
).always(function() {
assert.ok( exampleWhereTalkExists.oldTopSection, "Page exists --> oldTopSection is set" );
assert.equal( exampleWhereTalkDoesNotExist.oldTopSection, '', "Page does not exist --> oldTopSection is empty string" );
done();
});
});
QUnit.test( "getLatestSubjectRevisionID", function( assert ) {
assert.expect();
var done = assert.async();
var exampleWhereTalkExists = Page.newFromText('Perth (suburb)');
var exampleWhereTalkDoesNotExist = Page.newFromText('ifdjbingjuhtrsiugbbvhsiuriutniuv');
$.when(
exampleWhereTalkExists.getLatestSubjectRevisionID(),
exampleWhereTalkDoesNotExist.getLatestSubjectRevisionID()
)
.done(function() {
assert.equal( typeof exampleWhereTalkExists.latestSubjectRevisionID, 'number', "Page exists --> latestSubjectRevisionID is a number" );
})
.always(function(){
assert.notOk( exampleWhereTalkDoesNotExist.latestSubjectRevisionID, "Page does not exist --> latestSubjectRevisionID not set" );
done();
});
});
QUnit.test( "getOresScore", function( assert ) {
assert.expect();
var done = assert.async();
var examplePage = Page.newFromText('Example');
var randomTitle = ''+Math.floor(Math.random()*20);
var randomPage = Page.newFromText(randomTitle);
$.when( examplePage.getLatestSubjectRevisionID(), randomPage.getLatestSubjectRevisionID() ).then(function(){
$.when( examplePage.getOresScore(), randomPage.getOresScore() ).always(function() {
assert.equal(typeof examplePage.oresScore, 'string', 'ORES score is a string for "Example"');
assert.notEqual( config.bannerDefaults.classes.indexOf(examplePage.oresScore), -1, 'ORES score is a valid class for "Example"');
assert.equal(typeof randomPage.oresScore, 'string', 'ORES score is a string for random page "'+randomTitle+'"');
assert.notEqual( config.bannerDefaults.classes.indexOf(examplePage.oresScore), -1, 'ORES score ("'+randomPage.oresScore+'") is a valid class for random page "'+randomTitle+'"');
done();
});
});
});
QUnit.test( "splitOldTopSection", function(assert) {
var examplePage = Page.newFromText('Example');
assert.deepEqual(examplePage.splitOldTopSection(), {above:'', projects:'', below: ''}, 'Splits correctly with empty talk page, no banners');
var example2Page = Page.newFromText('Example2');
example2Page.oldTopSection = 'Lorem ipsum dorem par';
assert.deepEqual(example2Page.splitOldTopSection(), {above:'Lorem ipsum dorem par', projects:'', below: ''}, 'Splits correctly with non-empty talk page, no banners');
examplePage.banners = [
Template.newFromRawWikitext('{{WP AUSTRALIA}}\n'),
Template.newFromRawWikitext('{{WikiProject Biography}}\n'),
Template.newFromRawWikitext('{{WikiProject Australian Roads}}')
];
assert.deepEqual(examplePage.splitOldTopSection(), {above:'', projects:'', below: ''}, 'Splits correctly with empty talk page, and added banners');
examplePage.oldTopSection = '{{WP AUSTRALIA}}\n{{WikiProject Biography}}\n{{WikiProject Australian Roads}}';
assert.deepEqual(
examplePage.splitOldTopSection(),
{ above: '',
projects: '{{WP AUSTRALIA}}\n{{WikiProject Biography}}\n{{WikiProject Australian Roads}}',
below: ''
},
'Splits correctly with only banners'
);
examplePage.oldTopSection = '{{talk header}}\n{{WP AUSTRALIA}}\n{{WikiProject Biography}}\n{{WikiProject Australian Roads}}';
assert.deepEqual(
examplePage.splitOldTopSection(),
{ above: '{{talk header}}',
projects: '{{WP AUSTRALIA}}\n{{WikiProject Biography}}\n{{WikiProject Australian Roads}}',
below: ''
},
'Splits correctly with banners and content above'
);
examplePage.oldTopSection = '{{WP AUSTRALIA}}\n{{WikiProject Biography}}\n{{WikiProject Australian Roads}}\n{{archive banner}}';
assert.deepEqual(
examplePage.splitOldTopSection(),
{ above: '',
projects: '{{WP AUSTRALIA}}\n{{WikiProject Biography}}\n{{WikiProject Australian Roads}}',
below: '{{archive banner}}'
},
'Splits correctly with banners and contennt below'
);
examplePage.oldTopSection = '{{talk header}}\n{{WP AUSTRALIA}}\n{{WikiProject Biography}}\n{{WikiProject Australian Roads}}\n{{archive banner}}';
assert.deepEqual(
examplePage.splitOldTopSection(),
{ above: '{{talk header}}',
projects: '{{WP AUSTRALIA}}\n{{WikiProject Biography}}\n{{WikiProject Australian Roads}}',
below: '{{archive banner}}'
},
'Splits correctly with banners and contennt above and below'
);
});
QUnit.test("makeBannerShellWikitext", function(assert) {
var examplePage = Page.newFromText('Example');
examplePage.hasShellTemplate = true;
assert.notOk(examplePage.makeBannerShellWikitext(), 'No shell if there is already a shell');
examplePage.hasShellTemplate = false;
assert.notOk(examplePage.makeBannerShellWikitext(), 'No shell if there are no banners');
examplePage.banners = [
Template.newFromRawWikitext('{{WP AUSTRALIA}}\n')
];
assert.notOk(examplePage.makeBannerShellWikitext(), 'No shell if there is one banner');
examplePage.banners.push(
Template.newFromRawWikitext('{{WikiProject Austria}}\n')
);
assert.notOk(examplePage.makeBannerShellWikitext(), 'No shell if there are two banners');
examplePage.banners.push(
Template.newFromRawWikitext('{{WikiProject Australian Roads}}\n')
);
assert.ok(examplePage.makeBannerShellWikitext(), 'Is a shell if there are three banners');
assert.deepEqual(examplePage.makeBannerShellWikitext(), {
top:'{{WikiProject banner shell|1=',
bottom:'}}'
}, 'Standard wikitext when no Bio banner');
examplePage.banners.push(
Template.newFromRawWikitext('{{WikiProject Biography}}\n')
);
assert.ok(examplePage.makeBannerShellWikitext(), 'Is a shell if there are four banners');
assert.deepEqual(examplePage.makeBannerShellWikitext(), {
top:'{{WikiProject banner shell|1=',
bottom:'}}'
}, 'Standard wikitext when Bio banner has no parameters');
examplePage.banners[3].setParamValue('living', 'yes');
assert.deepEqual(examplePage.makeBannerShellWikitext(), {
top:'{{WikiProject banner shell|living=yes|1=',
bottom:'}}'
}, 'Wikitext has `|living=yes` when Bio banner does');
examplePage.banners[3].setParamValue('activepol', '1');
assert.deepEqual(examplePage.makeBannerShellWikitext(), {
top:'{{WikiProject banner shell|living=yes|activepol=yes|1=',
bottom:'}}'
}, 'Wikitext has `|living=yes|activepol=yes` when Bio banner does');
examplePage.banners[3].setParamValue('living', 'no');
assert.deepEqual(examplePage.makeBannerShellWikitext(), {
top:'{{WikiProject banner shell|1=',
bottom:'}}'
}, 'Standard wikitext when Bio banner has living=no');
examplePage.banners[3].setParamValue('blpo', 'true');
assert.deepEqual(examplePage.makeBannerShellWikitext(), {
top:'{{WikiProject banner shell|blpo=yes|1=',
bottom:'}}'
}, 'Wikitext has `|blpo=yes` when Bio banner has that and `living=no`');
});
QUnit.test("makeUpdatedBanners", function(assert) {
var examplePage = Page.newFromText('Example');
examplePage.banners = [
Template.newFromRawWikitext('{{WP AUSTRALIA}}\n'),
Template.newFromRawWikitext('{{WikiProject Biography}}\n'),
Template.newFromRawWikitext('{{WikiProject Australian Roads}}')
];
var isTrue = function() { return true; };
var isFalse = function() { return false; };
examplePage.banners[0].setParamValue('class', 'C'); examplePage.banners[1].setParamValue('class', 'C'); examplePage.banners[2].setParamValue('class', 'C');
examplePage.banners[0].isNew = isTrue; examplePage.banners[1].isNew = isTrue; examplePage.banners[2].isNew = isTrue;
assert.equal(examplePage.makeUpdatedBanners(''), '{{WP AUSTRALIA |class=C}}\n{{WikiProject Biography |class=C}}\n{{WikiProject Australian Roads |class=C}}', 'No existing projects');
examplePage.banners[0].isNew = isFalse; examplePage.banners[1].isNew = isFalse;
assert.equal(examplePage.makeUpdatedBanners('{{WP AUSTRALIA}}\n{{WikiProject Biography}}'), '{{WP AUSTRALIA |class=C}}\n{{WikiProject Biography |class=C}}\n{{WikiProject Australian Roads |class=C}}', 'Some existing projects');
examplePage.banners[2].isNew = isFalse;
assert.equal(examplePage.makeUpdatedBanners('{{WP AUSTRALIA}}\n{{WikiProject Biography}}\n{{WikiProject Australian Roads}}'), '{{WP AUSTRALIA |class=C}}\n{{WikiProject Biography |class=C}}\n{{WikiProject Australian Roads |class=C}}', 'All existing projects');
examplePage.banners[2].isNew = isFalse;
examplePage.banners[1].remove = true;
assert.equal(examplePage.makeUpdatedBanners('{{WP AUSTRALIA}}\n{{WikiProject Biography}}\n{{WikiProject Australian Roads}}'), '{{WP AUSTRALIA |class=C}}\n{{WikiProject Australian Roads |class=C}}', 'A project to remove');
examplePage.banners[1].remove = false;
examplePage.banners[0].rawWikitext = '{{WP AUSTRALIA|class=stub}}';
examplePage.banners[1].rawWikitext = '{{WikiProject Biography |class = Stub}}';
examplePage.banners[2].rawWikitext = '{{WikiProject Australian Roads | class = stub }}';
assert.equal(examplePage.makeUpdatedBanners('{{WP AUSTRALIA|class=stub}}\n{{WikiProject Biography |class = Stub}}\n{{WikiProject Australian Roads | class = stub }}'), '{{WP AUSTRALIA |class=C}}\n{{WikiProject Biography |class=C}}\n{{WikiProject Australian Roads |class=C}}', 'All existing projects with parameters to update');
examplePage.banners[0].rawWikitext = '{{WP AUSTRALIA|class=stub|small=yes}}';
examplePage.banners[0].setParamValue('small', 'yes'); examplePage.banners[0].deleteParam('small');
examplePage.banners[1].rawWikitext = '{{WikiProject Biography |class = Stub |blpo= true}}';
examplePage.banners[1].setParamValue('blpo', 'true'); examplePage.banners[1].deleteParam('blpo');
examplePage.banners[2].rawWikitext = '{{WikiProject Australian Roads | class = stub | WA = yes }}';
examplePage.banners[2].setParamValue('WA', 'yes'); examplePage.banners[2].deleteParam('WA');
assert.equal(examplePage.makeUpdatedBanners('{{WP AUSTRALIA|class=stub|small=yes}}\n{{WikiProject Biography |class = Stub |blpo= true}}\n{{WikiProject Australian Roads | class = stub | WA = yes }}'), '{{WP AUSTRALIA |class=C}}\n{{WikiProject Biography |class=C}}\n{{WikiProject Australian Roads |class=C}}', 'All existing projects with parameters to update and parameters to remove');
});
QUnit.test("makeEditSummary", function(assert) {
var examplePage = Page.newFromText('Example');
var isTrue = function() { return true; };
var isFalse = function() { return false; };
assert.equal(examplePage.makeEditSummary(), 'Assessment', 'No additions, modifications, or removals');
examplePage.banners = [
Template.newFromRawWikitext('{{WikiProject Biography}}\n'),
];
examplePage.banners[0].isNew = isTrue;
assert.equal(examplePage.makeEditSummary(), 'Assessment: +Biography', '{{WikiProject Biography}} banner added');
examplePage.banners[0].isNew = isFalse;
examplePage.banners[0].touched = {foo: true};
assert.equal(examplePage.makeEditSummary(), 'Assessment: Biography', '{{WikiProject Biography}} banner modified');
examplePage.banners[0].remove = true;
assert.equal(examplePage.makeEditSummary(), 'Assessment: −Biography', '{{WikiProject Biography}} banner removed');
examplePage.banners[0].remove = false;
examplePage.banners[0].setParamValue('class', 'C');
assert.equal(examplePage.makeEditSummary(), 'Assessment: Biography (C)', '{{WikiProject Biography}} banner modified, class changed');
examplePage.banners[0].touched = {};
examplePage.banners[0].setParamValue('importance', 'Low');
assert.equal(examplePage.makeEditSummary(), 'Assessment: Biography (Low)', '{{WikiProject Biography}} banner modified, including importance changed');
examplePage.banners[0].setParamValue('class', 'C');
assert.equal(examplePage.makeEditSummary(), 'Assessment: Biography (C/Low)', '{{WikiProject Biography}} banner modified, including class and importance changed');
examplePage.banners = [
Template.newFromRawWikitext('{{WP Australia}}\n'),
];
examplePage.banners[0].isNew = isTrue;
assert.equal(examplePage.makeEditSummary(), 'Assessment: +WP Australia', '{{WP Australia}} banner added');
examplePage.banners[0].isNew = isFalse;
examplePage.banners[0].touched = {foo: true};
assert.equal(examplePage.makeEditSummary(), 'Assessment: WP Australia', '{{WP Australia}} banner modified');
examplePage.banners[0].remove = true;
assert.equal(examplePage.makeEditSummary(), 'Assessment: −WP Australia', '{{WP Australia}} banner removed');
examplePage.banners[0].remove = false;
examplePage.banners[0].setParamValue('class', 'C');
assert.equal(examplePage.makeEditSummary(), 'Assessment: WP Australia (C)', '{{WP Australia}} banner modified, class changed');
examplePage.banners[0].touched = {};
examplePage.banners[0].setParamValue('importance', 'Low');
assert.equal(examplePage.makeEditSummary(), 'Assessment: WP Australia (Low)', '{{WP Australia}} banner modified, including importance changed');
examplePage.banners[0].setParamValue('class', 'C');
assert.equal(examplePage.makeEditSummary(), 'Assessment: WP Australia (C/Low)', '{{WP Australia}} banner modified, including class and importance changed');
/* Example from Mr. Guye (Template talk:Infobox government agency: 9 December 2017)
{{talkheader}}
− {{WP Australia|class=template|importance=NA|politics=yes}}
{{WikiProject Infoboxes}}
+ {{WikiProject Politics of the United Kingdom}}
{{archives|search=yes}}
Expected: `Assessment: −WP Australia; +Politics of the United Kingdom`
Actual was: `Assessment: +Politics of the United Kingdom`
*/
exampleTwo = Page.newFromText('Template talk:Infobox government agency');
exampleTwo.banners = [
Template.newFromRawWikitext('{{WP Australia|class=template|importance=NA|politics=yes}}'),
Template.newFromRawWikitext('{{WikiProject Infoboxes}}'),
Template.newFromRawWikitext('{{WikiProject Politics of the United Kingdom}}')
];
exampleTwo.banners[0].remove = true;
exampleTwo.banners[0].isNew = isFalse;
exampleTwo.banners[1].isNew = isFalse;
exampleTwo.banners[2].isNew = isTrue;
assert.equal(exampleTwo.makeEditSummary(), 'Assessment: −WP Australia; +Politics of the United Kingdom', 'One banner removed, a second unchanged, another added');
});
QUnit.module( "Template class");
QUnit.test("Template.makeParamsObject", function(assert) {
assert.deepEqual(Template.makeParamsObject('|class=c'), {'class':'c'}, 'Single named parameter');
assert.deepEqual(Template.makeParamsObject('|class=c|importance=low'), {'class':'c', 'importance':'low'}, 'Two named parameters');
assert.deepEqual(Template.makeParamsObject('|foo'), {'1':'foo'}, 'Single unnamed parameter');
assert.deepEqual(Template.makeParamsObject('|foo|bar'), {'1':'foo', '2':'bar'}, 'Two unnamed parameters');
assert.deepEqual(Template.makeParamsObject('|1=foo'), {'1':'foo'}, 'Single numbered parameter');
assert.deepEqual(Template.makeParamsObject('|1=foo|2=bar'), {'1':'foo', '2':'bar'}, 'Two numbered parameters');
assert.deepEqual(Template.makeParamsObject('|foo|bar=qux'), {'1':'foo', 'bar':'qux'}, 'Unnamed and then named parameter');
assert.deepEqual(Template.makeParamsObject('|bar=qux|foo'), {'1':'foo', 'bar':'qux'}, 'Named and then unnamed parameter');
assert.deepEqual(Template.makeParamsObject('|class=c|bar=qux|foo|baz'), {'1':'foo', '2':'baz', 'class':'c', 'bar':'qux'}, 'Two named and two unnamed parameters (1)');
assert.deepEqual(Template.makeParamsObject('|class=c|foo|bar=qux|baz'), {'1':'foo', '2':'baz', 'class':'c', 'bar':'qux'}, 'Two named and two unnamed parameters (2)');
assert.deepEqual(Template.makeParamsObject('|foo|class=c|bar=qux|baz'), {'1':'foo', '2':'baz', 'class':'c', 'bar':'qux'}, 'Two named and two unnamed parameters (3)');
assert.deepEqual(Template.makeParamsObject('|class=c|foo|baz|bar=qux'), {'1':'foo', '2':'baz', 'class':'c', 'bar':'qux'}, 'Two named and two unnamed parameters (4)');
assert.deepEqual(Template.makeParamsObject('|foo|class=c|baz|bar=qux'), {'1':'foo', '2':'baz', 'class':'c', 'bar':'qux'}, 'Two named and two unnamed parameters (5)');
assert.deepEqual(Template.makeParamsObject('|foo|baz|class=c|bar=qux'), {'1':'foo', '2':'baz', 'class':'c', 'bar':'qux'}, 'Two named and two unnamed parameters (6)');
assert.deepEqual(Template.makeParamsObject('|class =c'), {'class':'c'}, 'Spacing should not matter - single param (1)');
assert.deepEqual(Template.makeParamsObject('|class= c'), {'class':'c'}, 'Spacing should not matter - single param (2)');
assert.deepEqual(Template.makeParamsObject('|class = c'), {'class':'c'}, 'Spacing should not matter - single param (3)');
assert.deepEqual(Template.makeParamsObject('|class = c'), {'class':'c'}, 'Spacing should not matter - single param (4)');
assert.deepEqual(Template.makeParamsObject('| class =c'), {'class':'c'}, 'Spacing should not matter - single param (5)');
assert.deepEqual(Template.makeParamsObject('| class= c'), {'class':'c'}, 'Spacing should not matter - single param (6)');
assert.deepEqual(Template.makeParamsObject('| class = c'), {'class':'c'}, 'Spacing should not matter - single param (7)');
assert.deepEqual(Template.makeParamsObject('| class = c'), {'class':'c'}, 'Spacing should not matter - single param (8)');
assert.deepEqual(Template.makeParamsObject('|nested={{WPAUS}}'), {'nested':'{{WPAUS}}'}, 'Nested template (without its own parameters) - in named parameter');
assert.deepEqual(Template.makeParamsObject('|nested={{WPAUS|class=c}}'), {'nested':'{{WPAUS|class=c}}'}, 'Nested template (with its own single parameter) - in named parameter');
assert.deepEqual(Template.makeParamsObject('|nested={{WPAUS|class=c|importance=low}}'), {'nested':'{{WPAUS|class=c|importance=low}}'}, 'Nested template (with its own parameters) - in named parameter');
assert.deepEqual(Template.makeParamsObject('|1={{WPAUS}}'), {'1':'{{WPAUS}}'}, 'Nested template (without its own parameters) - in numbered parameter');
assert.deepEqual(Template.makeParamsObject('|1={{WPAUS|class=c}}'), {'1':'{{WPAUS|class=c}}'}, 'Nested template (with its own single parameter) - in numbered parameter');
assert.deepEqual(Template.makeParamsObject('|1={{WPAUS|class=c|importance=low}}'), {'1':'{{WPAUS|class=c|importance=low}}'}, 'Nested template (with its own parameters) - in numbered parameter');
assert.deepEqual(Template.makeParamsObject('|{{WPAUS}}'), {'1':'{{WPAUS}}'}, 'Nested template (without its own parameters) - in unnamed parameter');
assert.deepEqual(Template.makeParamsObject('|{{WPAUS|class=c}}'), {'1':'{{WPAUS|class=c}}'}, 'Nested template (with its own single parameter) - in unnamed parameter');
assert.deepEqual(Template.makeParamsObject('|{{WPAUS|class=c|importance=low}}'), {'1':'{{WPAUS|class=c|importance=low}}'}, 'Nested template (with its own parameters) - in unnamed parameter');
});
QUnit.test("setParamDataAndSuggestions", function(assert) {
assert.expect();
var done = assert.async();
var templateWithData = Template.newFromRawWikitext('{{WikiProject Biography}}');
var templateNoData = Template.newFromRawWikitext('{{Foo}}');
$.when( templateWithData.setParamDataAndSuggestions(), templateNoData.setParamDataAndSuggestions() )
.then( function() {
assert.ok(templateWithData.paramData, 'paramData set for template with TemplateData');
assert.ok(templateWithData.parameterSuggestions, 'parameterSuggestions set for template with TemplateData');
assert.ok(templateNoData.paramData, 'paramData set for template without TemplateData');
assert.ok(templateNoData.parameterSuggestions, 'parameterSuggestions set for template without TemplateData');
done();
})
.fail(function() {
assert.ok(false, 'Deferred failed');
});
});
});
};
// Add portlet link
mw.util.addPortletLink( 'p-views', '#', 'Test script', 'ca-testScript', 'Run unit tests for this script' );
$('#ca-testScript').click(function(e) {
e.preventDefault();
runTests();
});
// On test page, run automatically after 2.5 seconds
if ( mw.config.get('wgPageName') === 'User:Evad37/rater/test' ) {
setTimeout(runTests, 2500);
}
});
//</nowiki>