jenkins-bot has submitted this change and it was merged.
Change subject: Add test for internal copy/paste
......................................................................
Add test for internal copy/paste
Change-Id: I3a264a283a75dad64675b3e0c0230faa14847ffb
---
M tests/ce/ve.ce.Surface.test.js
1 file changed, 70 insertions(+), 48 deletions(-)
Approvals:
Divec: Looks good to me, approved
jenkins-bot: Verified
diff --git a/tests/ce/ve.ce.Surface.test.js b/tests/ce/ve.ce.Surface.test.js
index f715c69..7c35cef 100644
--- a/tests/ce/ve.ce.Surface.test.js
+++ b/tests/ce/ve.ce.Surface.test.js
@@ -69,6 +69,23 @@
view.destroy();
};
+ve.test.utils.TestEvent = function TestEvent( data ) {
+ data = data || {};
+ this.originalEvent = {
+ clipboardData: {
+ getData: function ( prop ) {
+ return data[ prop ];
+ },
+ setData: function ( prop, val ) {
+ data[ prop ] = val;
+ return true;
+ },
+ items: []
+ }
+ };
+ this.preventDefault = this.stopPropagation = function () {};
+};
+
QUnit.test( 'special key down: backspace/delete', function ( assert ) {
var i,
emptyList = '<ul><li><p></p></li></ul>',
@@ -1167,21 +1184,8 @@
} );
QUnit.test( 'onCopy', function ( assert ) {
- var i, testClipboardData,
+ var i,
count = 0,
- testEvent = {
- originalEvent: {
- clipboardData: {
- items: [],
- setData: function ( prop, val ) {
- testClipboardData[ prop ] = val;
- return true;
- }
- }
- },
- preventDefault: function () {},
- stopPropagation: function () {}
- },
cases = [
{
rangeOrSelection: new ve.Range( 27, 32 ),
@@ -1241,18 +1245,15 @@
QUnit.expect( count );
function testRunner( doc, rangeOrSelection, expectedData,
expectedOriginalRange, expectedBalancedRange, expectedHtml, expectedText, msg )
{
- var clipboardKey, slice,
+ var slice,
+ testEvent = new ve.test.utils.TestEvent(),
+ clipboardData = testEvent.originalEvent.clipboardData,
view = ve.test.utils.createSurfaceViewFromDocument( doc
|| ve.dm.example.createExampleDocument() ),
model = view.getModel();
// Paste sequence
model.setSelection(
ve.test.utils.selectionFromRangeOrSelection( model.getDocument(),
rangeOrSelection ) );
- testClipboardData = {};
view.onCopy( testEvent );
-
- clipboardKey = testClipboardData[ 'text/xcustom' ];
-
- assert.strictEqual( clipboardKey, view.clipboardId + '-' +
view.clipboardIndex, msg + ': clipboardId set' );
slice = view.clipboard.slice;
@@ -1263,14 +1264,15 @@
}
if ( expectedHtml ) {
assert.equalDomElement(
- $( '<div>' ).html( testClipboardData[
'text/html' ] )[ 0 ],
+ $( '<div>' ).html( clipboardData.getData(
'text/html' ) )[ 0 ],
$( '<div>' ).html( expectedHtml )[ 0 ],
msg + ': html'
);
}
if ( expectedText ) {
- assert.strictEqual( testClipboardData[ 'text/plain' ],
expectedText, msg + ': text' );
+ assert.strictEqual( clipboardData.getData( 'text/plain'
), expectedText, msg + ': text' );
}
+ assert.strictEqual( clipboardData.getData( 'text/xcustom' ),
view.clipboardId + '-' + view.clipboardIndex, msg + ': clipboardId set' );
view.destroy();
}
@@ -1289,20 +1291,10 @@
var i,
layout = $.client.profile().layout,
expected = 0,
- exampleDoc = '<p id="foo"></p><p>Foo</p><h2> Baz
</h2><table><tbody><tr><td></td></tbody></table>',
+ exampleDoc = '<p id="foo"></p><p>Foo</p><h2> Baz
</h2><table><tbody><tr><td></td></tbody></table><p><b>Quux</b></p>',
exampleSurface = ve.test.utils.createSurfaceViewFromHtml(
exampleDoc ),
- docLen = 24,
- TestEvent = function ( data ) {
- this.originalEvent = {
- clipboardData: {
- getData: function ( prop ) {
- return data[ prop ];
- }
- }
- };
- this.preventDefault = function () {};
- this.stopPropagation = function () {};
- },
+ docLen = 30,
+ bold = ve.dm.example.bold,
cases = [
{
rangeOrSelection: new ve.Range( 1 ),
@@ -1339,6 +1331,29 @@
]
],
msg: 'Text into paragraph'
+ },
+ {
+ rangeOrSelection: new ve.Range( 25 ),
+ internalSourceRangeOrSelection: new ve.Range(
3, 6 ),
+ expectedRangeOrSelection: new ve.Range( 28 ),
+ expectedOps: [
+ [
+ { type: 'retain', length: 25 },
+ {
+ type: 'replace',
+ insert: [
+ [ 'F', [ bold ]
],
+ [ 'o', [ bold ]
],
+ [ 'o', [ bold ]
]
+ ],
+ insertedDataLength: 3,
+ insertedDataOffset: 0,
+ remove: []
+ },
+ { type: 'retain', length:
docLen - 25 }
+ ]
+ ],
+ msg: 'Text into annotated content'
},
{
rangeOrSelection: new ve.Range( 4 ),
@@ -2499,8 +2514,8 @@
}
QUnit.expect( expected );
- function testRunner( documentHtml, pasteHtml, fromVe, useClipboardData,
pasteTargetHtml, rangeOrSelection, pasteSpecial, expectedOps,
expectedRangeOrSelection, expectedHtml, originalDomElements, msg ) {
- var i, j, txs, ops, txops, htmlDoc, expectedSelection,
+ function testRunner( documentHtml, pasteHtml,
internalSourceRangeOrSelection, fromVe, useClipboardData, pasteTargetHtml,
rangeOrSelection, pasteSpecial, expectedOps, expectedRangeOrSelection,
expectedHtml, originalDomElements, msg ) {
+ var i, j, txs, ops, txops, htmlDoc, expectedSelection,
testEvent,
e = {},
view = documentHtml ?
ve.test.utils.createSurfaceViewFromHtml( documentHtml ) : exampleSurface,
model = view.getModel(),
@@ -2514,22 +2529,29 @@
}
// Paste sequence
+ if ( internalSourceRangeOrSelection ) {
+ model.setSelection(
ve.test.utils.selectionFromRangeOrSelection( model.getDocument(),
internalSourceRangeOrSelection ) );
+ testEvent = new ve.test.utils.TestEvent();
+ view.onCopy( testEvent );
+ } else {
+ if ( useClipboardData ) {
+ e[ 'text/html' ] = pasteHtml;
+ e[ 'text/xcustom' ] = 'useClipboardData-0';
+ } else if ( fromVe ) {
+ e[ 'text/html' ] = pasteHtml;
+ e[ 'text/xcustom' ] = '0.123-0';
+ }
+ testEvent = new ve.test.utils.TestEvent( e );
+ }
model.setSelection(
ve.test.utils.selectionFromRangeOrSelection( model.getDocument(),
rangeOrSelection ) );
view.pasteSpecial = pasteSpecial;
- if ( useClipboardData ) {
- e[ 'text/html' ] = pasteHtml;
- e[ 'text/xcustom' ] = 'useClipboardData-0';
- } else if ( fromVe ) {
- e[ 'text/html' ] = pasteHtml;
- e[ 'text/xcustom' ] = '0.123-0';
- }
- view.beforePaste( new TestEvent( e ) );
+ view.beforePaste( testEvent );
if ( pasteTargetHtml ) {
view.$pasteTarget.html( pasteTargetHtml );
} else {
document.execCommand( 'insertHTML', false, pasteHtml );
}
- view.afterPaste( new TestEvent( e ) );
+ view.afterPaste( testEvent );
if ( expectedOps ) {
expectedOps = getLayoutSpecific( expectedOps );
@@ -2555,7 +2577,7 @@
ops.push( txops );
}
}
- assert.equalLinearData( ops, expectedOps, msg + ':
keys' );
+ assert.equalLinearData( ops, expectedOps, msg + ':
data' );
}
if ( expectedRangeOrSelection ) {
expectedSelection =
ve.test.utils.selectionFromRangeOrSelection( model.getDocument(),
getLayoutSpecific( expectedRangeOrSelection ) );
@@ -2577,7 +2599,7 @@
for ( i = 0; i < cases.length; i++ ) {
testRunner(
- cases[ i ].documentHtml, cases[ i ].pasteHtml, cases[ i
].fromVe, cases[ i ].useClipboardData,
+ cases[ i ].documentHtml, cases[ i ].pasteHtml, cases[ i
].internalSourceRangeOrSelection, cases[ i ].fromVe, cases[ i
].useClipboardData,
cases[ i ].pasteTargetHtml, cases[ i
].rangeOrSelection, cases[ i ].pasteSpecial,
cases[ i ].expectedOps, cases[ i
].expectedRangeOrSelection, cases[ i ].expectedHtml, cases[ i
].originalDomElements,
cases[ i ].msg
--
To view, visit https://gerrit.wikimedia.org/r/300261
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I3a264a283a75dad64675b3e0c0230faa14847ffb
Gerrit-PatchSet: 2
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>
Gerrit-Reviewer: DLynch <[email protected]>
Gerrit-Reviewer: Divec <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits