mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-11-30 09:04:21 +00:00
5afd15b2cc
The trailing space at the end of the regexp is no longer required to prevent matching (and executing) too soon. We also don't need to know about trailing punctuation. However, to prevent the match from ending in the middle of typing, we have to allow for ' ' and '-' at the end of the match. Tweaked tests to better match the intent now that a trailing space is not included, but they pass without changes too, the command is quite permissive. Bug: T117165 Depends-On: Ie36046fa43ce49f8a25c99f2de577eb296d68a51 Depends-On: I2af0a738afa43295bf6d7d612cac4349bc6cd20d Change-Id: I7c28d5c93b1a441387ad05a75846af83d2b21b6a
137 lines
3.8 KiB
JavaScript
137 lines
3.8 KiB
JavaScript
/*!
|
|
* VisualEditor UserInterface Actions MWLinkAction tests.
|
|
*
|
|
* @copyright 2011-2017 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', function ( assert ) {
|
|
var i,
|
|
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: function ( data, action ) {
|
|
var i,
|
|
a = action.getLinkAnnotation( 'https://en.wikipedia.org/wiki/Red_(disambiguation)' );
|
|
for ( 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: function ( data ) {
|
|
data.splice( 1, 8, {
|
|
type: 'link/mwMagic',
|
|
attributes: {
|
|
content: 'RFC 1234'
|
|
},
|
|
annotations: data[ 1 ][ 1 ]
|
|
}, {
|
|
type: '/link/mwMagic',
|
|
annotations: data[ 1 ][ 1 ]
|
|
} );
|
|
},
|
|
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: function () {
|
|
/* 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: function ( data ) {
|
|
data.splice( 1, 9, {
|
|
type: 'link/mwMagic',
|
|
attributes: {
|
|
content: 'PMID 1234'
|
|
},
|
|
annotations: data[ 1 ][ 1 ]
|
|
}, {
|
|
type: '/link/mwMagic',
|
|
annotations: data[ 1 ][ 1 ]
|
|
} );
|
|
},
|
|
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: function () {
|
|
/* 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: function ( data ) {
|
|
data.splice( 1, 19, {
|
|
type: 'link/mwMagic',
|
|
attributes: {
|
|
content: 'ISBN 978-0596517748'
|
|
},
|
|
annotations: data[ 1 ][ 1 ]
|
|
}, {
|
|
type: '/link/mwMagic',
|
|
annotations: data[ 1 ][ 1 ]
|
|
} );
|
|
},
|
|
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: function () {
|
|
/* no change, no link */
|
|
}
|
|
}
|
|
];
|
|
|
|
QUnit.expect( ve.test.utils.countActionTests( cases ) );
|
|
for ( i = 0; i < cases.length; i++ ) {
|
|
ve.test.utils.runActionTest(
|
|
'link', assert, cases[ i ].html, false, cases[ i ].method, [], cases[ i ].rangeOrSelection, cases[ i ].msg,
|
|
{
|
|
expectedData: cases[ i ].expectedData,
|
|
expectedRangeOrSelection: cases[ i ].expectedRangeOrSelection,
|
|
expectedOriginalRangeOrSelection: cases[ i ].expectedOriginalRangeOrSelection,
|
|
undo: cases[ i ].undo
|
|
}
|
|
);
|
|
}
|
|
} );
|