Esanders has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/92424


Change subject: Tests for paste
......................................................................

Tests for paste

Simple test for ve.ce.Surface#afterPaste, and more extensive
tests for ve.dm.LinearData#sanitize.

Change-Id: Ic44c6f9abc969fd773b9af556df3e27dca2f9291
---
M modules/ve/test/ce/ve.ce.Surface.test.js
M modules/ve/test/dm/ve.dm.LinearData.test.js
2 files changed, 135 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/24/92424/1

diff --git a/modules/ve/test/ce/ve.ce.Surface.test.js 
b/modules/ve/test/ce/ve.ce.Surface.test.js
index c6a85a6..69e3d1e 100644
--- a/modules/ve/test/ce/ve.ce.Surface.test.js
+++ b/modules/ve/test/ce/ve.ce.Surface.test.js
@@ -261,6 +261,66 @@
 
 } );
 
+QUnit.test( 'afterPaste', function ( assert ) {
+       var i,
+               cases = [
+                       {
+                               'documentHtml': '<p></p>',
+                               'range': new ve.Range( 1 ),
+                               'pasteTargetHtml': 'Foo',
+                               'pasteSpecial': false,
+                               'expectedRange': new ve.Range( 6 ),
+                               'expectedOps': [
+                                       [
+                                               {
+                                                       'type': 'replace',
+                                                       'insert': [
+                                                               { 'type': 
'paragraph', 'internal': { 'generated': 'wrapper' } },
+                                                               'F', 'o', 'o',
+                                                               { 'type': 
'/paragraph' }
+                                                       ],
+                                                       'remove': []
+                                               },
+                                               { 'type': 'retain', 'length': 4 
}
+                                       ]
+                               ],
+                               'msg': 'Plain text paste into empty paragraph'
+                       }
+               ];
+
+       QUnit.expect( cases.length * 2 );
+
+       function testRunner( documentHtml, pasteTargetHtml, range, expectedOps, 
pasteSpecial, expectedRange, msg ) {
+               var i, txs, ops,
+                       surface = ve.test.utils.createSurfaceFromHtml( 
documentHtml ),
+                       view = surface.getView(),
+                       model = surface.getModel();
+
+               model.change( null, range );
+               view.pasteSpecial = pasteSpecial;
+               view.$pasteTarget.html( pasteTargetHtml );
+               view.afterPaste();
+               txs = model.getHistory()[0].stack;
+               ops = [];
+               for ( i = 0; i < txs.length; i++ ) {
+                       ops.push( txs[i].getOperations() );
+               }
+               msg += ': ' + ( pasteSpecial ? 'paste special' : 'paste' );
+               assert.deepEqual( ops, expectedOps, msg + ': operations' );
+               assert.deepEqual( model.getSelection(), expectedRange, msg +  
': range' );
+
+               surface.destroy();
+       }
+
+       for ( i = 0; i < cases.length; i++ ) {
+               testRunner(
+                       cases[i].documentHtml, cases[i].pasteTargetHtml, 
cases[i].range,
+                       cases[i].expectedOps, cases[i].pasteSpecial, 
cases[i].expectedRange, cases[i].msg
+               );
+       }
+
+} );
+
 /* Methods with return values */
 // TODO: ve.ce.Surface.static.getClipboardHash
 // TODO: ve.ce.Surface#hasSlugAtOffset
diff --git a/modules/ve/test/dm/ve.dm.LinearData.test.js 
b/modules/ve/test/dm/ve.dm.LinearData.test.js
index 6fd379e..b5d63c4 100644
--- a/modules/ve/test/dm/ve.dm.LinearData.test.js
+++ b/modules/ve/test/dm/ve.dm.LinearData.test.js
@@ -92,3 +92,78 @@
        );
 
 } );
+
+QUnit.test( 'sanitize', function ( assert ) {
+       var i, fullData, result, data,
+               store = new ve.dm.IndexValueStore(),
+               internalList = new ve.dm.InternalList(),
+               cases = [
+                       {
+                               'html': '<p style="text-shadow: 0 0 1px 
#000;">F<b>o</b>o</p>',
+                               'data': [
+                                       { 'type': 'paragraph' },
+                                       'F', ['o', [0]], 'o',
+                                       { 'type': '/paragraph' },
+                                       { 'type': 'internalList' },
+                                       { 'type': '/internalList' }
+                               ],
+                               'rules': { 'removeHtmlAttributes': true },
+                               'msg': 'HTML attributes removed'
+                       },
+                       {
+                               'html': '<p>B<abbr>a</abbr>r<img 
src="Image.jpg"/></p>',
+                               'data': [
+                                       { 'type': 'paragraph' },
+                                       'B', 'r',
+                                       { 'type': '/paragraph' },
+                                       { 'type': 'internalList' },
+                                       { 'type': '/internalList' }
+                               ],
+                               'rules': { 'blacklist': ['alienInline','image'] 
},
+                               'msg': 'Blacklisted nodes removed'
+                       },
+                       {
+                               'html': '<p>B<i><b>a</b>z</i></p>',
+                               'data': [
+                                       { 'type': 'paragraph' },
+                                       'B', 'a', 'z',
+                                       { 'type': '/paragraph' },
+                                       { 'type': 'internalList' },
+                                       { 'type': '/internalList' }
+                               ],
+                               'plainText': true,
+                               'msg': 'Annotations removed in plainText mode'
+                       },
+                       {
+                               'html': '<p>Foo</p><p></p><h1></h1><p>Bar</p>',
+                               'data': [
+                                       { 'type': 'paragraph' },
+                                       'F', 'o', 'o',
+                                       { 'type': '/paragraph' },
+                                       { 'type': 'paragraph' },
+                                       'B', 'a', 'r',
+                                       { 'type': '/paragraph' },
+                                       { 'type': 'internalList' },
+                                       { 'type': '/internalList' }
+                               ],
+                               'msg': 'Empty content nodes are stripped'
+                       }
+               ];
+
+       QUnit.expect( cases.length );
+       for ( i = 0; i < cases.length; i++ ) {
+               fullData = ve.dm.converter.getDataFromDom( 
ve.createDocumentFromHtml( cases[i].html ), store, internalList );
+               result = ve.dm.Document.static.splitData( fullData, true );
+               data = result.elementData;
+               data.sanitize( cases[i].rules || {}, cases[i].plainText );
+               assert.deepEqualWithDomElements( data.data, cases[i].data, 
cases[i].msg );
+       }
+} );
+
+// TODO: ve.dm.LinearData.static.getType
+// TODO: ve.dm.LinearData.static.isElementData
+// TODO: ve.dm.LinearData.static.isOpenElementData
+// TODO: ve.dm.LinearData.static.isCloseElementData
+// TODO: ve.dm.LinearData#push
+// TODO: ve.dm.LinearData#getDataSlice
+// TODO: ve.dm.LinearData#clone

-- 
To view, visit https://gerrit.wikimedia.org/r/92424
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic44c6f9abc969fd773b9af556df3e27dca2f9291
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to