mediawiki-extensions-Visual.../modules/ve-mw/tests/dm/ve.dm.Document.test.js
Roan Kattouw 34ec304ec7 Update VE core submodule to master (d6904b5)
New changes:
925ed5c Move sluggability methods to model
a618491 Calculate slug positions in the model
b8fb05e Make the trigger demo kind of work again
e41d22e Update OOjs UI to v0.1.0-pre (ec785c2c64)
4119470 build: Make headers atop dist files suitable for distribution
fca4fec Follow-up cc657c4: Change strikethrough key command to not clash with Macs
a29a561 Add hasSlugAtOffset to DM document
9f47efb Move getRelativeOffset, getRelativeRange, getNearestFocusableNode to model
aa35e96 Remove hard coded types from canHaveSlugBefore and fix logic
49a239b Emit 'position' and 'contextChange' events correctly
3c50321 Refactor out finding of CE focusedNodes
d6904b5 Update OOjs UI to v0.1.0-pre (f2c3f12959)

Local changes:
* Move ce.Document tests to dm.Document

Change-Id: Ifa5abd0341e858b20e73e9071d597a25112cadfb
2014-09-18 17:03:46 -07:00

237 lines
5.3 KiB
JavaScript

/*!
* VisualEditor DataModel Document tests.
*
* @copyright 2011-2014 VisualEditor Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
QUnit.module( 've.dm.Document' );
/* Tests */
// FIXME runner copypasted from core, use data provider
QUnit.test( 'getRelativeRange (mwBlockImage / mwInlineImage)', function ( assert ) {
var documentModel, i, j,
expectCount = 0,
store = new ve.dm.IndexValueStore(),
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 )
},
{
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.index( 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++ ) {
expectCount++;
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
);
}
}
QUnit.expect( expectCount );
} );