Преглед изворни кода

Tests: Image pasting model content integration tests.

Krzysztof Krztoń пре 7 година
родитељ
комит
4528007cc9

Разлика између датотеке није приказан због своје велике величине
+ 36 - 1
packages/ckeditor5-paste-from-office/tests/_data/images/image/adjacent-groups/model.word2016.html


Разлика између датотеке није приказан због своје велике величине
+ 0 - 1
packages/ckeditor5-paste-from-office/tests/_data/images/image/alternative-text/model.word2016.html


Разлика између датотеке није приказан због своје велике величине
+ 0 - 1
packages/ckeditor5-paste-from-office/tests/_data/images/image/linked/model.word2016.html


+ 3 - 1
packages/ckeditor5-paste-from-office/tests/_data/images/image/offline/model.word2016.html

@@ -1 +1,3 @@
-// TODO
+<paragraph>This word contains some pictures:</paragraph>
+<image src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAjFJREFUaEPt2r9KA0EQx/G967WwSmOjVr6FpRLwBWJeQ0vfwy7a2AhC1EawTi1YqZVIICAY7c85Dsy/3dudmd/d7UGuiaCZ/X52A8KSxAzGpt+5PLwyuOfo+dw67OLjG7eIOTMTik+pnoaePPSAo2sYldfT0++kO7dd+iGb1rAocokiOMuylF7IsPvU7V235hBOpxOzQfEZxeeA4mmLoaj/z54BWmFYql84gfjPYbXeAoj2HKz1dkCEBle9ExCVoaS+DBCJobzeA2jc4K33Axo0hNQHARoxBNaHAmo2hNczALUZWPU8QA0Gbj0bUKlBUC8BVGSQ1QsBcIO4Xg4AGjT1KgDEoKzXApQGfT0AIDZA6jEAgQFVDwOwDMB6JCDQgK2nRZPiYgv4vB0Mv/b3rAO3Xl7nb0Qgiy5cq0Am0v2Sc87cfQ5kLfBHCNXEmoM/Adby+j9eA/R7qJuwPgHd/unfvT6BlT2kf2TOff1J9Fu+NAF8AlR//7vtrHwcGbQBCfDUFyy0AQYIqq/AgAEw6tEGAIBdDzVoAcJ6nEEFUNWDDHIAoB5hEAJg9WqDBACu1xnYgErqFQYeoMJ6qYEBqLxeZAgF1FTPNwQBaq1nGvyABuo5Bg+gsfpgQxmg4fowgxMQRX2AwQ6IqN5nsACiqy81LAMirXcbFgBR1zsMM0AL6m2GHPB+PGxN/ZwhSfJrspTq6SXZdF5GxfmLIpgMaf71e2PuPt3XaVEKsptR3jUY/wHBK1hAuhHH8wAAAABJRU5ErkJggg=="></image>
+<image src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAjBJREFUaEPtmjFOAzEQRVmoaVJTporERbgBJeIiXARRcgMusEdASsUVSEONwCuj3c3GO/+PPfGalant8fv/2+OQuGnb9kLzt7t/0AxXj92/vqjmNLyAc6OPuXkZlICc6FoZlzCvpegdGLM0EMCUgBakDIAA0haCkydkm8crkvXw/E2O9MOEIxEWoELnuU+hVUqCMgICePoU9LEYXsapBnyIg1k7dCt6Vz+l2jQBaL8hd9AamMYkhKMEFqf3acjnewI5CCiB3qOrNPwJKIdeq4E6xNASVVMnB5OLdgJk+8lCJJZqmLy0xwYJLEhP7qXm82Y758ri9D2Y0FupM6DKPfPgWQHl2C831pUmUJT98mnuDvFm/5F541otd9htV7qFrBzKUKcmkMFkcYmaQE0g0QHxHrj+SaxuNv2rCf8DXe8BM4ujC9UuFG2d0cT6Yc7IyOgy9QxEW2c0sSZgZGR0mZpAtHVGE8PfzL3dPhnVtyxz9x6gWukWCmq1NFNfaw5ppQk4g4oKQYD5/wkIv+IXEoKA4eBBAotrgACdAPl1ESyh7yjsDHlpj02dgQU1QK3DUwP4U3HO6xla1u+aIQH4TA0WhW6RA+BCY9SjLVSCBhW9cyTyvdA5thNE9wFOXI4U4GtZySDRgw3T4MlZigwefa7dWz7645WouIM7p+8H4OEr7K1kY0kZJrcWcJHBvpRCxsyFAPgmhiUYjrgxzNLU22m/fM7txKB7KoWAPDJ4dM/zC4TmxygpN24IAAAAAElFTkSuQmCC"></image>

Разлика између датотеке није приказан због своје велике величине
+ 1 - 1
packages/ckeditor5-paste-from-office/tests/_data/images/image/online-offline/model.word2016.html


Разлика између датотеке није приказан због своје велике величине
+ 0 - 1
packages/ckeditor5-paste-from-office/tests/_data/images/image/reflection/model.word2016.html


Разлика између датотеке није приказан због своје велике величине
+ 0 - 1
packages/ckeditor5-paste-from-office/tests/_data/images/image/rotated/model.word2016.html


Разлика између датотеке није приказан због своје велике величине
+ 1 - 1
packages/ckeditor5-paste-from-office/tests/_data/images/image/shapes-online-offline/model.word2016.html


+ 1 - 1
packages/ckeditor5-paste-from-office/tests/_data/images/image/wrapped/model.word2016.html

@@ -1 +1 @@
-// TODO
+<image src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAD7SURBVGhD7Y5BagNBEMT2N3lmnp5cdAgCG+Otag+hhY4zpb6WZVmWZVmW5R/x8/31SF6ciW59Ln8OQce9Lv8/i256Q4bm0R13ZHESXXBfdmdQOyXrbVTNSqOKknHJlFCsIaUGKvWkF0eZnvSyqNGWahAF2lINokBbqim0PiPtCJqekXYETc9IO4KmZ6QdQdMz0o6g6RlpR9D0jLQjaHpG2hE0PSPtFFpvSzWIAm2pBlGgLdUsavSkF0eZnvQaqNSQUgnFGlLqoV5WGm1UTcn6DGrfl91JdMEdWZxHd7wnWx9EB70u/w9Bxz2XP2eiW//Ki2VZlmVZljO4rl/CKbQ1HZeV+wAAAABJRU5ErkJggg=="></image>

+ 26 - 8
packages/ckeditor5-paste-from-office/tests/_utils/utils.js

@@ -192,7 +192,7 @@ function generateIntegrationTests( title, fixtures, editorConfig, skip ) {
 
 		for ( const name of Object.keys( fixtures.input ) ) {
 			( skip.indexOf( name ) !== -1 ? it.skip : it )( name, () => {
-				expectModel( editor, fixtures.input[ name ], fixtures.model[ name ] );
+				expectModel( editor, fixtures.input[ name ], fixtures.model[ name ], fixtures.inputRtf && fixtures.inputRtf[ name ] );
 			} );
 		}
 	} );
@@ -251,7 +251,8 @@ function expectNormalized( actualView, expectedHtml ) {
 // @param {module:core/editor/editor~Editor} editor Editor instance.
 // @param {String} input Input HTML which will be pasted into the editor.
 // @param {String} expected Expected model.
-function expectModel( editor, input, expected ) {
+// @param {String} [inputRtf] Input RTF data which will be pasted into the editor.
+function expectModel( editor, input, expected, inputRtf = null ) {
 	const editorModel = editor.model;
 	const insertContent = editorModel.insertContent;
 
@@ -264,11 +265,23 @@ function expectModel( editor, input, expected ) {
 		insertContent.call( editorModel, content, selection );
 	} );
 
-	firePasteEvent( editor, input );
+	firePasteEvent( editor, {
+		'text/html': input,
+		'text/rtf': inputRtf
+	} );
 
 	sinon.restore();
 
-	expect( actual ).to.equal( inlineData( expected ) );
+	// Extract base64 images so they do not pollute model diff and can be compared separately.
+	const { data: actualModel, images: actualImages } = extractBase64Srcs( actual );
+	const { data: expectedModel, images: expectedImages } = extractBase64Srcs( inlineData( expected ) );
+
+	expect( actualModel ).to.equal( expectedModel );
+
+	if ( actualImages.length > 0 && expectedImages.length > 0 ) {
+		expect( actualImages.length ).to.equal( expectedImages.length );
+		expect( actualImages ).to.deep.equal( expectedImages );
+	}
 }
 
 // Inlines given HTML / model representation string by removing preceding tabs and line breaks.
@@ -291,11 +304,16 @@ function inlineData( data ) {
 function extractBase64Srcs( data ) {
 	const regexp = /src="data:image\/(png|jpe?g);base64,([^"]*)"/gm;
 	const images = [];
+	const replacements = [];
 
 	let match;
 	while ( ( match = regexp.exec( data ) ) !== null ) {
 		images.push( match[ 2 ].toLowerCase() );
-		data = data.replace( match[ 2 ], '' );
+		replacements.push( match[ 2 ] );
+	}
+
+	for ( const replacement of replacements ) {
+		data = data.replace( replacement, '' );
 	}
 
 	return { data, images };
@@ -304,10 +322,10 @@ function extractBase64Srcs( data ) {
 // Fires paste event on a given editor instance with a specific HTML data.
 //
 // @param {module:core/editor/editor~Editor} editor Editor instance on which paste event will be fired.
-// @param {String} html The HTML data with which paste event will be fired.
-function firePasteEvent( editor, html ) {
+// @param {Object} data Object with `type: content` pairs used as data transfer data in the fired paste event.
+function firePasteEvent( editor, data ) {
 	editor.editing.view.document.fire( 'paste', {
-		dataTransfer: createDataTransfer( { 'text/html': html } ),
+		dataTransfer: createDataTransfer( data ),
 		preventDefault() {}
 	} );
 }

+ 11 - 0
packages/ckeditor5-paste-from-office/tests/data/integration.js

@@ -13,6 +13,8 @@ import Italic from '@ckeditor/ckeditor5-basic-styles/src/italic';
 import Link from '@ckeditor/ckeditor5-link/src/link';
 import Strikethrough from '@ckeditor/ckeditor5-basic-styles/src/strikethrough';
 import List from '@ckeditor/ckeditor5-list/src/list';
+import Image from '@ckeditor/ckeditor5-image/src/image';
+import Table from '@ckeditor/ckeditor5-table/src/table';
 import PasteFromOffice from '../../src/pastefromoffice';
 
 import { generateTests } from '../_utils/utils';
@@ -31,6 +33,15 @@ generateTests( {
 	}
 } );
 
+generateTests( {
+	input: 'image',
+	type: 'integration',
+	browsers,
+	editorConfig: {
+		plugins: [ Clipboard, Paragraph, Image, Table, PasteFromOffice ]
+	}
+} );
+
 generateTests( {
 	input: 'link',
 	type: 'integration',

Неке датотеке нису приказане због велике количине промена