mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-12-03 10:26:37 +00:00
04516bb02e
The first run of getDomFromData() would preserve whitespace just fine, but it blanked out the .veInternal.whitespace[1] element in certain cases, contaminating the linear model and making the whitespace data inconsistent. Subsequent runs of getDomFromData() would then refuse to serialize that whitespace because the information about it was inconsistent. In getDomFromData(), we sometimes unset .veInternal.whitespace[1] (i.e. set it to undefined) to prevent double processing. Because we're potentially going to modify .veInternal, don't assign it by reference, but copy the object. Added tests asserting that the linear model is unchanged after calling getDomFromData(), because that function should never modify linear model data. This test failed in 4 cases (all whitespace-related) before I added the copyObject() call. Bug: 43543 Change-Id: Ic4c93510518163894201a693ab50331413715967
92 lines
2.4 KiB
JavaScript
92 lines
2.4 KiB
JavaScript
/*!
|
|
* VisualEditor DataModel Converter tests.
|
|
*
|
|
* @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
|
|
* @license The MIT License (MIT); see LICENSE.txt
|
|
*/
|
|
|
|
QUnit.module( 've.dm.Converter' );
|
|
|
|
/* Tests */
|
|
|
|
// TODO rewrite to test getDataElementOrAnnotationFromDomElement
|
|
/*
|
|
QUnit.test( 'getDataElementFromDomElement', 20, function ( assert ) {
|
|
var msg, conversion;
|
|
|
|
for ( msg in ve.dm.example.conversions ) {
|
|
conversion = ve.dm.example.conversions[msg];
|
|
assert.deepEqual(
|
|
ve.dm.converter.getDataElementFromDomElement( conversion.domElement ),
|
|
conversion.dataElement,
|
|
msg
|
|
);
|
|
}
|
|
} );
|
|
*/
|
|
|
|
QUnit.test( 'getDomElementsFromDataElement', 20, function ( assert ) {
|
|
var msg, conversion, doc;
|
|
|
|
for ( msg in ve.dm.example.conversions ) {
|
|
conversion = ve.dm.example.conversions[msg];
|
|
doc = conversion.domElement.ownerDocument;
|
|
assert.equalDomElement(
|
|
ve.dm.converter.getDomElementsFromDataElement( conversion.dataElement, doc )[0],
|
|
conversion.domElement,
|
|
msg
|
|
);
|
|
}
|
|
} );
|
|
|
|
QUnit.test( 'getDataFromDom', function ( assert ) {
|
|
var msg, n = 0,
|
|
store = new ve.dm.IndexValueStore(),
|
|
cases = ve.copyObject( ve.dm.example.domToDataCases );
|
|
|
|
// TODO: this is a hack to make normal heading/preformatted
|
|
// nodes the most recently registered, instead of the MW versions
|
|
ve.dm.modelRegistry.register( ve.dm.HeadingNode );
|
|
ve.dm.modelRegistry.register( ve.dm.PreformattedNode );
|
|
|
|
for ( msg in cases ) {
|
|
if ( cases[msg].html !== null ) {
|
|
n++;
|
|
}
|
|
}
|
|
QUnit.expect( n );
|
|
|
|
for ( msg in cases ) {
|
|
if ( cases[msg].html !== null ) {
|
|
ve.dm.example.preprocessAnnotations( cases[msg].data, store );
|
|
assert.deepEqual(
|
|
ve.dm.converter.getDataFromDom( store, ve.createDocumentFromHTML( cases[msg].html ) ).getData(),
|
|
cases[msg].data,
|
|
msg
|
|
);
|
|
}
|
|
}
|
|
} );
|
|
|
|
QUnit.test( 'getDomFromData', function ( assert ) {
|
|
var msg, originalData, n = 0,
|
|
store = new ve.dm.IndexValueStore(),
|
|
cases = ve.copyObject( ve.dm.example.domToDataCases );
|
|
|
|
for ( msg in cases ) {
|
|
n++;
|
|
}
|
|
QUnit.expect( 2*n );
|
|
|
|
for ( msg in cases ) {
|
|
ve.dm.example.preprocessAnnotations( cases[msg].data, store );
|
|
originalData = ve.copyArray( cases[msg].data );
|
|
assert.equalDomElement(
|
|
ve.dm.converter.getDomFromData( store, cases[msg].data ),
|
|
ve.createDocumentFromHTML( cases[msg].normalizedHtml || cases[msg].html ),
|
|
msg
|
|
);
|
|
assert.deepEqual( cases[msg].data, originalData, msg + ' (data hasn\'t changed)' );
|
|
}
|
|
} );
|