mediawiki-extensions-Visual.../modules/ve-mw/tests/dm/ve.dm.Document.test.js
Ed Sanders 970cca735d Suppress slugs between floated images
Logically depends on Idb4a58fa616 in core.

Bug: T107745
Depends-On: Idb4a58fa616dedb29d42bdf659a7497451f8eb6c
Change-Id: I206bf1a15cbac487b0d937a1b0447e0b9113156e
2019-03-21 11:33:27 +00:00

254 lines
5.3 KiB
JavaScript

/*!
* VisualEditor DataModel Document tests.
*
* @copyright 2011-2019 VisualEditor Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
QUnit.module( 've.dm.Document (MW)', ve.test.utils.mwEnvironment );
/* Tests */
// FIXME runner copypasted from core, use data provider
QUnit.test( 'getRelativeRange (mwBlockImage / mwInlineImage)', function ( assert ) {
var documentModel, i, j,
store = new ve.dm.HashValueStore(),
storeItems = [
ve.dm.mwExample.MWBlockImage.storeItems,
ve.dm.mwExample.MWInlineImage.storeItems
],
tests = [
{
data: [
// 0
ve.copy( ve.dm.mwExample.MWBlockImage.data[ 0 ] ),
// 1
{ type: '/mwBlockImage' }
],
cases: [
{
direction: 1,
expand: false,
given: new ve.Range( 0 ),
expected: new ve.Range( 0, 2 )
},
{
direction: 1,
expand: false,
given: new ve.Range( 0, 2 ),
expected: new ve.Range( 2 )
},
{
direction: 1,
expand: true,
given: new ve.Range( 0 ),
expected: new ve.Range( 0, 2 )
},
{
direction: 1,
expand: true,
given: new ve.Range( 0, 2 ),
expected: new ve.Range( 0, 2 )
},
{
direction: -1,
expand: false,
given: new ve.Range( 2 ),
expected: new ve.Range( 2, 0 )
},
{
direction: -1,
expand: false,
given: new ve.Range( 2, 0 ),
expected: new ve.Range( 0 )
},
{
direction: -1,
expand: false,
given: new ve.Range( 0, 2 ),
expected: new ve.Range( 0 )
},
{
direction: -1,
expand: true,
given: new ve.Range( 2 ),
expected: new ve.Range( 2, 0 )
},
{
direction: -1,
expand: true,
given: new ve.Range( 2, 0 ),
expected: new ve.Range( 2, 0 )
},
{
direction: -1,
expand: true,
given: new ve.Range( 0, 2 ),
expected: new ve.Range( 0 )
}
]
},
{
data: [
// 0
ve.copy( ve.dm.mwExample.MWBlockImage.data[ 0 ] ),
// 1
{ type: '/mwBlockImage' },
// 2
ve.copy( ve.dm.mwExample.MWBlockImage.data[ 0 ] ),
// 3
{ type: '/mwBlockImage' }
],
cases: [
{
direction: 1,
expand: false,
given: new ve.Range( 0, 2 ),
expected: new ve.Range( 2, 4 )
},
{
direction: 1,
expand: false,
given: new ve.Range( 2, 4 ),
expected: new ve.Range( 4 )
},
{
direction: 1,
expand: true,
given: new ve.Range( 0, 2 ),
expected: new ve.Range( 0, 4 )
},
{
direction: -1,
expand: true,
given: new ve.Range( 4, 2 ),
expected: new ve.Range( 4, 0 )
},
{
direction: -1,
expand: true,
given: new ve.Range( 2, 4 ),
expected: new ve.Range( 2 )
}
]
},
{
data: [
// 0
{ type: 'alienBlock' },
// 1
{ type: '/alienBlock' },
// 2
ve.copy( ve.dm.mwExample.MWBlockImage.data[ 0 ] ),
// 3
{ type: '/mwBlockImage' },
// 4
{ type: 'alienBlock' },
// 5
{ type: '/alienBlock' }
],
cases: [
{
direction: 1,
expand: false,
given: new ve.Range( 0 ),
expected: new ve.Range( 0, 2 )
},
{
direction: 1,
expand: false,
given: new ve.Range( 2 ),
expected: new ve.Range( 2, 4 )
},
{
direction: 1,
expand: false,
given: new ve.Range( 2, 4 ),
expected: new ve.Range( 4 )
},
{
direction: 1,
expand: false,
given: new ve.Range( 4 ),
expected: new ve.Range( 4, 6 )
},
{
direction: 1,
expand: true,
given: new ve.Range( 0 ),
expected: new ve.Range( 0, 2 )
},
{
direction: 1,
expand: true,
given: new ve.Range( 0, 2 ),
expected: new ve.Range( 0, 4 )
},
{
direction: 1,
expand: true,
given: new ve.Range( 0, 4 ),
expected: new ve.Range( 0, 6 )
}
]
},
{
data: [
// 0
{ type: 'paragraph' },
// 1
{ type: 'alienInline' },
// 2
{ type: '/alienInline' },
// 3
ve.copy( ve.dm.mwExample.MWInlineImage.data ),
// 4
{ type: '/mwInlineImage' },
// 5
{ type: 'alienInline' },
// 6
{ type: '/alienInline' },
// 7
{ type: '/paragraph' }
],
cases: [
{
direction: 1,
expand: false,
given: new ve.Range( 1 ),
expected: new ve.Range( 1, 3 )
},
{
direction: 1,
expand: false,
given: new ve.Range( 5 ),
expected: new ve.Range( 5, 7 )
}
]
}
];
for ( i = 0; i < storeItems.length; i++ ) {
for ( j = 0; j < storeItems[ i ].length; j++ ) {
store.hash( storeItems[ i ][ j ].value, storeItems[ i ][ j ].hash );
}
}
for ( i = 0; i < tests.length; i++ ) {
documentModel = new ve.dm.Document( new ve.dm.ElementLinearData( store, tests[ i ].data ) );
for ( j = 0; j < tests[ i ].cases.length; j++ ) {
assert.equalRange(
documentModel.getRelativeRange(
tests[ i ].cases[ j ].given,
tests[ i ].cases[ j ].direction,
'character',
tests[ i ].cases[ j ].expand
),
tests[ i ].cases[ j ].expected,
'Test document ' + i +
', range ' + tests[ i ].cases[ j ].given.toJSON() +
', direction ' + tests[ i ].cases[ j ].direction
);
}
}
} );