Fix splice re-ordering when moving items forward

Bug: T127203
Change-Id: I91824a4dff3faf9fc401e4824e568df3e891ea3f
This commit is contained in:
Ed Sanders 2016-02-20 13:46:12 +00:00
parent 6ac0d165b1
commit 4bb9bb317a
2 changed files with 17 additions and 38 deletions

View file

@ -608,9 +608,9 @@ mw.TemplateData.Model.prototype.addKeyTemplateParamOrder = function ( key ) {
*/
mw.TemplateData.Model.prototype.reorderParamOrderKey = function ( key, newIndex ) {
var keyIndex = this.paramOrder.indexOf( key );
// Move the parameter
// Move the parameter, account for left shift if moving forwards
this.paramOrder.splice(
newIndex,
newIndex - ( newIndex > keyIndex ? 1 : 0 ),
0,
this.paramOrder.splice( keyIndex, 1 )[ 0 ]
);

View file

@ -5,7 +5,7 @@
( function () {
'use strict';
var i, testVars, finalJsonStringParams, finalJsonStringOnly, finalJsonStringOnlyParamOrder,
var i, testVars, finalJsonStringParams, finalJsonStringOnly,
resultDescCurrLang, resultDescMockLang, resultDescBothLang, currLanguage, originalWikitext;
QUnit.module( 'ext.templateData', QUnit.newMwEnvironment() );
@ -137,34 +137,6 @@
' ],\n' +
' "format": "inline"\n' +
'}';
finalJsonStringOnlyParamOrder = '{\n' +
' "description": {\n' +
' "' + currLanguage + '": "Label unsigned comments in a conversation.",\n' +
' "blah": "Template description in some blah language."\n' +
' },\n' + finalJsonStringParams +
' "sets": [\n' +
' {\n' +
' "label": "Date",\n' +
' "params": [\n' +
' "year",\n' +
' "month",\n' +
' "day"\n' +
' ]\n' +
' }\n' +
' ],\n' +
' "paramOrder": [\n' +
' "date",\n' +
' "year",\n' +
' "user",\n' +
' "month",\n' +
' "comment",\n' +
' "newParam1",\n' +
' "newParam2",\n' +
' "newParam3",\n' +
' "newParam4"\n' +
' ],\n' +
' "format": "inline"\n' +
'}';
// Test validation tools
QUnit.test( 'Validation tools', function ( assert ) {
@ -519,7 +491,7 @@
// Change properties tests
paramChangeTest.length +
// Json output
2
3
);
sourceHandler.buildModel( originalWikitext )
@ -584,12 +556,19 @@
'Final templatedata output'
);
// Change order and verify result now has paramOrder
model.reorderParamOrderKey( 'user', 2 );
// Ouput a final templatedata string
assert.equal(
model.outputTemplateDataString(),
finalJsonStringOnlyParamOrder,
// Move 'user' to offset 3 (in original array), i.e. after 'year'
model.reorderParamOrderKey( 'user', 3 );
assert.deepEqual(
model.paramOrder,
[ 'date', 'year', 'user', 'month', 'comment', 'newParam1', 'newParam2', 'newParam3', 'newParam4' ],
'Final templatedata output with paramOrder'
);
// Move 'month' to offset 2, i.e. after 'year'
model.reorderParamOrderKey( 'month', 2 );
assert.deepEqual(
model.paramOrder,
[ 'date', 'year', 'month', 'user', 'comment', 'newParam1', 'newParam2', 'newParam3', 'newParam4' ],
'Final templatedata output with paramOrder'
);