mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-11-15 18:39:52 +00:00
92c38eab85
Move all MW-specific files into the ve-mw directory, in preparation for moving them out into a separate repo. All MW-specific files were moved into a parallel directory structure in modules/ve-mw . Files with both generic and MW-specific things were split up. Files in ve/init/mw/ were moved to ve-mw/init/ rather than ve-mw/init/mw ; they're still named ve.init.mw.* but we should change that. Some of the test files for core classes had MW-specific test cases, so those were split up and the test runner was duplicated; we should refactor our tests to use data providers so we can add cases more easily. Split files: * ve.ce.Node.css * ve.ce.ContentBranchNode.test.js (MWEntityNode) * ve.ce.Document.test.js (some core test cases genericized) * ve.dm.InternalList.test.js (uses mwReference test document) * ve.dm.SurfaceFragment.test.js, ve.ui.FormatAction.test.js ** Made core tests use heading instead of mwHeading ** Updated core tests because normal headings don't break out of lists ** Moved test runners into ve.test.utils.js * ve.ui.Icons-*.css * ve.ui.Dialog.css (MW parts into ve.ui.MWDialog.css) * ve.ui.Tool.css * ve.ui.Widget.css (move ve-ui-rtl and ve-ui-ltr to ve.ui.css) ve.dm.Converter.test.js: Moved runner functions into ve.test.utils.js ve.dm.example.js: * Refactored createExampleDocument so mwExample can use it * Removed wgExtensionAssetsPath detection, moved into mw-preload.js * Genericized withMeta example document (original version copied to mwExample) * Moved references example document to mwExample ve.dm.mwExample.js: * Move withMeta and references example documents from ve.dm.example.js * Add createExampleDocument function ve-mw/test/index.php: Runner for MW-specific tests only ve-mw/test/mw-preload.js: Sets VE_TESTDIR for Special:JavaScriptTest only ve.ui.Window.js: * Remove magic path interpolation in addLocalStyleSheets() * Pass full(er) paths to addLocalStyleSheets(), here and in subclasses ve.ui.MWDialog.js: Subclass of Dialog that adds MW versions of stylesheets ve.ui.MW*Dialog.js: * Subclass MWDialog rather than Dialog * Load both core and MW versions of stylesheets that have both ve.ui.PagedDialog.js: Converted to a mixin rather than an abstract base class * Don't inherit ve.ui.Dialog * Rather than overriding initialize(), provide initializePages() which the host class is supposed to call from its initialize() * Rename onOutlineSelect to onPageOutlineSelect ve.ui.MWMetaDialog.js, ve.ui.MWTransclusionDialog.js: * Use PagedDialog as a mixin rather than a base class, inherit MWDialog bullet-icon.png: Unused, deleted Stuff we should do later: * Refactor tests to use data providers * Write utility function for SVG compat check * Separate omnibus CSS files such as ve.ui.Widget.css * Separate omnibus RL modules * Use icon classes in ViewPageTarget Change-Id: I1b28f8ba7f2d2513e5c634927a854686fb9dd5a5
89 lines
3.1 KiB
JavaScript
89 lines
3.1 KiB
JavaScript
/*!
|
|
* VisualEditor DataModel InternalList tests.
|
|
*
|
|
* @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
|
|
* @license The MIT License (MIT); see LICENSE.txt
|
|
*/
|
|
|
|
QUnit.module( 've.dm.InternalList' );
|
|
|
|
/* Tests */
|
|
|
|
QUnit.test( 'getDocument', 1, function ( assert ) {
|
|
var doc = ve.dm.example.createExampleDocument(),
|
|
internalList = doc.getInternalList();
|
|
assert.deepEqual( internalList.getDocument(), doc, 'Returns original document' );
|
|
} );
|
|
|
|
QUnit.test( 'queueItemHtml/getItemHtmlQueue', 5, function ( assert ) {
|
|
var doc = ve.dm.example.createExampleDocument(),
|
|
internalList = doc.getInternalList();
|
|
assert.deepEqual(
|
|
internalList.queueItemHtml( 'reference', 'foo', 'Bar' ),
|
|
{ 'index': 0, 'isNew': true },
|
|
'First queued item returns index 0 and is new'
|
|
);
|
|
assert.deepEqual(
|
|
internalList.queueItemHtml( 'reference', 'foo', 'Baz' ),
|
|
{ 'index': 0, 'isNew': false },
|
|
'Duplicate key returns index 0 and is not new'
|
|
);
|
|
assert.deepEqual(
|
|
internalList.queueItemHtml( 'reference', 'bar', 'Baz' ),
|
|
{ 'index': 1, 'isNew': true },
|
|
'Second queued item returns index 1 and is new'
|
|
);
|
|
|
|
// Queue up empty data
|
|
internalList.queueItemHtml( 'reference', 'baz', '' ),
|
|
assert.deepEqual(
|
|
internalList.queueItemHtml( 'reference', 'baz', 'Quux' ),
|
|
{ 'index': 2, 'isNew': true },
|
|
'Third queued item is new because existing data in queue was empty'
|
|
);
|
|
|
|
assert.deepEqual( internalList.getItemHtmlQueue(), ['Bar', 'Baz', 'Quux'], 'getItemHtmlQueue returns stored HTML items' );
|
|
} );
|
|
|
|
QUnit.test( 'convertToData', 2, function ( assert ) {
|
|
var doc = ve.dm.example.createExampleDocument(),
|
|
internalList = doc.getInternalList(),
|
|
expectedData = [
|
|
{ 'type': 'internalList' },
|
|
{ 'type': 'internalItem' },
|
|
{ 'type': 'paragraph', 'internal': { 'generated': 'wrapper' } },
|
|
'B', 'a', 'r',
|
|
{ 'type': '/paragraph' },
|
|
{ 'type': '/internalItem' },
|
|
{ 'type': 'internalItem' },
|
|
{ 'type': 'paragraph', 'internal': { 'generated': 'wrapper' } },
|
|
'B', 'a', 'z',
|
|
{ 'type': '/paragraph' },
|
|
{ 'type': '/internalItem' },
|
|
{ 'type': '/internalList' }
|
|
];
|
|
|
|
// Mimic convert state setup (as done in ve.dm.Converter#getDataFromDom)
|
|
// TODO: The test should not (directly) reference the global instance
|
|
ve.dm.converter.doc = doc;
|
|
ve.dm.converter.store = doc.getStore();
|
|
ve.dm.converter.internalList = internalList;
|
|
ve.dm.converter.contextStack = [];
|
|
|
|
internalList.queueItemHtml( 'reference', 'foo', 'Bar' );
|
|
internalList.queueItemHtml( 'reference', 'bar', 'Baz' );
|
|
assert.deepEqual( internalList.convertToData( ve.dm.converter ), expectedData, 'Data matches' );
|
|
assert.deepEqual( internalList.getItemHtmlQueue(), [], 'Items html is emptied after conversion' );
|
|
} );
|
|
|
|
QUnit.test( 'clone', 2, function ( assert ) {
|
|
var doc = ve.dm.example.createExampleDocument(),
|
|
doc2 = ve.dm.example.createExampleDocument(),
|
|
internalList = doc.getInternalList(),
|
|
internalListClone = internalList.clone(),
|
|
internalListClone2 = internalList.clone( doc2 );
|
|
|
|
assert.equal( internalListClone.getDocument(), internalList.getDocument(), 'Documents match' );
|
|
assert.equal( internalListClone2.getDocument(), doc2, 'Cloning with document parameter' );
|
|
} );
|