Browse Source

Added tests for new code in DataController.

Piotrek Koszuliński 9 years ago
parent
commit
51be189a61

+ 21 - 4
packages/ckeditor5-engine/src/controller/datacontroller.js

@@ -265,10 +265,15 @@ export default class DataController {
 		this.fire( 'modifySelection', { selection, options } );
 		this.fire( 'modifySelection', { selection, options } );
 	}
 	}
 
 
-	getSelectedContent() {
-		const evtData = {
-			selection: this.model.selection
-		};
+	/**
+	 * See {@link engine.controller.getSelectedContent}.
+	 *
+	 * @fires engine.controller.DataController#getSelectedContent
+	 * @param {engine.model.Selection} The selection of which content will be retrieved.
+	 * @returns {engine.model.DocumentFragment} Document fragment holding the clone of the selected content.
+	 */
+	getSelectedContent( selection ) {
+		const evtData = { selection };
 
 
 		this.fire( 'getSelectedContent', evtData );
 		this.fire( 'getSelectedContent', evtData );
 
 
@@ -312,3 +317,15 @@ mix( DataController, EmitterMixin );
  * @param {engine.model.Selection} data.selection
  * @param {engine.model.Selection} data.selection
  * @param {Object} data.options See {@link engine.controller.modifySelection}'s options.
  * @param {Object} data.options See {@link engine.controller.modifySelection}'s options.
  */
  */
+
+/**
+ * Event fired when {@link engine.controller.DataController#getSelectedContent} method is called.
+ * The {@link engine.controller.getSelectedContent default action of that method} is implemented as a
+ * listener to this event so it can be fully customized by the features.
+ *
+ * @event engine.controller.DataController#getSelectedContent
+ * @param {Object} data
+ * @param {engine.model.Selection} data.selection
+ * @param {engine.model.DocumentFragment} data.content The document fragment to return
+ * (holding a clone of the selected content).
+ */

+ 1 - 1
packages/ckeditor5-engine/src/controller/getselectedcontent.js

@@ -11,7 +11,7 @@ import Text from '../model/text.js';
 import { remove } from '../model/writer.js';
 import { remove } from '../model/writer.js';
 
 
 /**
 /**
- * Gets selected content.
+ * Gets a clone of the selected content.
  *
  *
  * For example, for the following selection:
  * For example, for the following selection:
  *
  *

+ 42 - 0
packages/ckeditor5-engine/tests/controller/datacontroller.js

@@ -12,6 +12,7 @@ import buildModelConverter  from 'ckeditor5/engine/conversion/buildmodelconverte
 
 
 import ModelDocumentFragment from 'ckeditor5/engine/model/documentfragment.js';
 import ModelDocumentFragment from 'ckeditor5/engine/model/documentfragment.js';
 import ModelText from 'ckeditor5/engine/model/text.js';
 import ModelText from 'ckeditor5/engine/model/text.js';
+import ModelSelection from 'ckeditor5/engine/model/selection.js';
 
 
 import { getData, setData, stringify, parse } from 'ckeditor5/engine/dev-utils/model.js';
 import { getData, setData, stringify, parse } from 'ckeditor5/engine/dev-utils/model.js';
 
 
@@ -98,6 +99,20 @@ describe( 'DataController', () => {
 				.to.equal( '<paragraph>fo[o]bar</paragraph>' );
 				.to.equal( '<paragraph>fo[o]bar</paragraph>' );
 			expect( modelDocument.selection.isBackward ).to.true;
 			expect( modelDocument.selection.isBackward ).to.true;
 		} );
 		} );
+
+		it( 'should add getSelectedContent listener', () => {
+			schema.registerItem( 'paragraph', '$block' );
+
+			setData( modelDocument, '<paragraph>fo[ob]ar</paragraph>' );
+
+			const evtData = {
+				selection: modelDocument.selection
+			};
+
+			data.fire( 'getSelectedContent', evtData );
+
+			expect( stringify( evtData.content ) ).to.equal( 'ob' );
+		} );
 	} );
 	} );
 
 
 	describe( 'parse', () => {
 	describe( 'parse', () => {
@@ -363,4 +378,31 @@ describe( 'DataController', () => {
 			expect( evtData.options ).to.equal( opts );
 			expect( evtData.options ).to.equal( opts );
 		} );
 		} );
 	} );
 	} );
+
+	describe( 'getSelectedContent', () => {
+		it( 'should fire the getSelectedContent event', () => {
+			const spy = sinon.spy();
+			const sel = new ModelSelection();
+
+			data.on( 'getSelectedContent', spy );
+
+			data.getSelectedContent( sel );
+
+			const evtData = spy.args[ 0 ][ 1 ];
+
+			expect( evtData.selection ).to.equal( sel );
+		} );
+
+		it( 'should return the evtData.content of the getSelectedContent event', () => {
+			const frag = new ModelDocumentFragment();
+
+			data.on( 'getSelectedContent', ( evt, data ) => {
+				data.content = frag;
+
+				evt.stop();
+			}, { priority: 'high' } );
+
+			expect( data.getSelectedContent() ).to.equal( frag );
+		} );
+	} );
 } );
 } );