Explorar el Código

Tests: Checking whether paste+typing calls the auto-media handler once.

Kamil Piechaczek hace 7 años
padre
commit
1d9aa02722

+ 1 - 0
packages/ckeditor5-media-embed/package.json

@@ -23,6 +23,7 @@
     "@ckeditor/ckeditor5-link": "^10.0.3",
     "@ckeditor/ckeditor5-list": "^11.0.1",
     "@ckeditor/ckeditor5-paragraph": "^10.0.2",
+    "@ckeditor/ckeditor5-typing": "^11.0.0",
     "@ckeditor/ckeditor5-undo": "^10.0.2",
     "eslint": "^5.5.0",
     "eslint-config-ckeditor5": "^1.0.7",

+ 36 - 1
packages/ckeditor5-media-embed/tests/automediaembed.js

@@ -13,6 +13,7 @@ import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
 import Link from '@ckeditor/ckeditor5-link/src/link';
 import List from '@ckeditor/ckeditor5-list/src/list';
 import Bold from '@ckeditor/ckeditor5-basic-styles/src/bold';
+import Typing from '@ckeditor/ckeditor5-typing/src/typing';
 import global from '@ckeditor/ckeditor5-utils/src/dom/global';
 import { getData, setData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
 
@@ -25,7 +26,7 @@ describe( 'AutoMediaEmbed - integration', () => {
 
 		return ClassicTestEditor
 			.create( editorElement, {
-				plugins: [ MediaEmbed, AutoMediaEmbed, Link, List, Bold ]
+				plugins: [ MediaEmbed, AutoMediaEmbed, Link, List, Bold, Typing ]
 			} )
 			.then( newEditor => {
 				editor = newEditor;
@@ -340,8 +341,42 @@ describe( 'AutoMediaEmbed - integration', () => {
 				done();
 			} );
 		} );
+
+		// Checking whether paste+typing calls the auto-media handler once.
+		it( 'pasting handler should be executed once', done => {
+			const autoMediaEmbedPlugin = editor.plugins.get( AutoMediaEmbed );
+			const autoMediaHandler = autoMediaEmbedPlugin._autoEmbedingEventHandler;
+			let counter = 0;
+
+			autoMediaEmbedPlugin._autoEmbedingEventHandler = function( ...args ) {
+				counter += 1;
+
+				return autoMediaHandler.apply( this, args );
+			};
+
+			setData( editor.model, '<paragraph>[]</paragraph>' );
+			pasteHtml( editor, 'https://www.youtube.com/watch?v=H08tGjXNHO4' );
+			simulateTyping( 'Foo. Bar.' );
+
+			setTimeout( () => {
+				autoMediaEmbedPlugin._autoEmbedingEventHandler = autoMediaHandler;
+
+				expect( counter ).to.equal( 1 );
+
+				done();
+			}, 100 );
+		} );
 	} );
 
+	function simulateTyping( text ) {
+		// While typing, every character is an atomic change.
+		text.split( '' ).forEach( character => {
+			editor.execute( 'input', {
+				text: character
+			} );
+		} );
+	}
+
 	function pasteHtml( editor, html ) {
 		editor.editing.view.document.fire( 'paste', {
 			dataTransfer: createDataTransfer( { 'text/html': html } ),