mediawiki-extensions-Visual.../modules/ve-mw/tests/ui/actions/ve.ui.MWLinkAction.test.js
Thiemo Kreuz 346216c050 Update more test code to use ES6 syntax
This patch is mostly about the arrow syntax.

Some places can not be updated because the arrow syntax also
changes the meaning of `this.…`, but some code relies on that.

Change-Id: Ida3ab0e0950a428fbd1a85f281013778ee879df4
2021-04-30 10:08:45 +00:00

131 lines
3.5 KiB
JavaScript

/*!
* VisualEditor UserInterface Actions MWLinkAction tests.
*
* @copyright 2011-2020 VisualEditor Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
QUnit.module( 've.ui.MWLinkAction' );
/* Tests */
QUnit.test( 'MW autolink', ( assert ) => {
const cases = [
{
msg: 'Strip trailing punctuation (but not matched parens)',
html: '<p><b>https://en.wikipedia.org/wiki/Red_(disambiguation) xyz</b></p>',
rangeOrSelection: new ve.Range( 1, 51 ),
method: 'autolinkUrl',
expectedRangeOrSelection: new ve.Range( 51 ),
expectedData: ( data, action ) => {
const a = action.getLinkAnnotation( 'https://en.wikipedia.org/wiki/Red_(disambiguation)' );
for ( let i = 1; i < 51; i++ ) {
data[ i ][ 1 ].push( a.element );
}
}
},
{
msg: 'Autolink valid RFC',
html: '<p><b>RFC 1234 xyz</b></p>',
rangeOrSelection: new ve.Range( 1, 9 ),
method: 'autolinkMagicLink',
expectedRangeOrSelection: new ve.Range( 3 ),
expectedOriginalRangeOrSelection: new ve.Range( 9 ),
expectedData: ( data ) => {
data.splice( 1, 8, {
type: 'link/mwMagic',
attributes: {
content: 'RFC 1234'
},
annotations: data[ 1 ][ 1 ]
}, {
type: '/link/mwMagic'
} );
},
undo: true
},
{
msg: 'Don\'t autolink invalid RFC',
html: '<p><b>RFC 123x xyz</b></p>',
rangeOrSelection: new ve.Range( 1, 9 ),
method: 'autolinkMagicLink',
expectedRangeOrSelection: new ve.Range( 1, 9 ),
expectedData: () => {
/* no change, no link */
}
},
{
msg: 'Autolink valid PMID',
html: '<p><b>PMID 1234 xyz</b></p>',
rangeOrSelection: new ve.Range( 1, 10 ),
method: 'autolinkMagicLink',
expectedRangeOrSelection: new ve.Range( 3 ),
expectedOriginalRangeOrSelection: new ve.Range( 10 ),
expectedData: ( data ) => {
data.splice( 1, 9, {
type: 'link/mwMagic',
attributes: {
content: 'PMID 1234'
},
annotations: data[ 1 ][ 1 ]
}, {
type: '/link/mwMagic'
} );
},
undo: true
},
{
msg: 'Don\'t autolink invalid PMID',
html: '<p><b>PMID 123x xyz</b></p>',
rangeOrSelection: new ve.Range( 1, 10 ),
method: 'autolinkMagicLink',
expectedRangeOrSelection: new ve.Range( 1, 10 ),
expectedData: () => {
/* no change, no link */
}
},
{
msg: 'Autolink valid ISBN',
html: '<p><b>ISBN 978-0596517748 xyz</b></p>',
rangeOrSelection: new ve.Range( 1, 20 ),
method: 'autolinkMagicLink',
expectedRangeOrSelection: new ve.Range( 3 ),
expectedOriginalRangeOrSelection: new ve.Range( 20 ),
expectedData: ( data ) => {
data.splice( 1, 19, {
type: 'link/mwMagic',
attributes: {
content: 'ISBN 978-0596517748'
},
annotations: data[ 1 ][ 1 ]
}, {
type: '/link/mwMagic'
} );
},
undo: true
},
{
msg: 'Don\'t autolink invalid ISBN',
html: '<p><b>ISBN 978-059651774 xyz</b></p>',
rangeOrSelection: new ve.Range( 1, 19 ),
method: 'autolinkMagicLink',
expectedRangeOrSelection: new ve.Range( 1, 19 ),
expectedData: () => {
/* no change, no link */
}
}
];
cases.forEach( ( caseItem ) => {
ve.test.utils.runActionTest(
'link', assert, caseItem.html, false, caseItem.method, [], caseItem.rangeOrSelection, caseItem.msg,
{
expectedData: caseItem.expectedData,
expectedRangeOrSelection: caseItem.expectedRangeOrSelection,
expectedOriginalRangeOrSelection: caseItem.expectedOriginalRangeOrSelection,
undo: caseItem.undo
}
);
} );
} );