8
0
Pārlūkot izejas kodu

Added missing view selection docs and tests.

Maciej Bukowski 8 gadi atpakaļ
vecāks
revīzija
df2bba5a03

+ 33 - 4
packages/ckeditor5-engine/src/view/selection.js

@@ -407,14 +407,38 @@ export default class Selection {
 	/**
 	 * Sets this selection's ranges and direction to the specified location based on the given
 	 * {@link module:engine/view/selection~Selection selection}, {@link module:engine/view/position~Position position},
-	 * {@link module:engine/view/range~Range range} or an iterable of {@link module:engine/view/range~Range ranges}.
+	 * {@link module:engine/view/item~Item item}, {@link module:engine/view/range~Range range},
+	 * an iterable of {@link module:engine/view/range~Range ranges} or null.
 	 *
+	 *		// Sets ranges from the given range.
+	 *		const range = new Range( start, end );
+	 *		selection.setTo( range, isBackwardSelection );
+	 *
+	 *		// Sets ranges from the iterable of ranges.
+	 * 		const ranges = [ new Range( start1, end2 ), new Range( star2, end2 ) ];
+	 *		selection.setTo( range, isBackwardSelection );
+	 *
+	 *		// Sets ranges from the other selection.
+	 *		const otherSelection = new Selection();
+	 *		selection.setTo( otherSelection );
+	 *
+	 * 		// Sets collapsed range at the given position.
+	 *		const position = new Position( root, path );
+	 *		selection.setTo( position );
+	 *
+	 * 		// Sets collapsed range on the given item.
+	 *		const paragraph = writer.createElement( 'paragraph' );
+	 *		selection.setTo( paragraph, offset );
+	 *
+	 * 		// Removes all ranges.
+	 *		selection.setTo( null );
+
 	 * @param {module:engine/view/selection~Selection|module:engine/view/position~Position|
-	 * Iterable.<module:engine/view/range~Range>|module:engine/view/range~Range} selectable
+	 * Iterable.<module:engine/view/range~Range>|module:engine/view/range~Range|module:engine/view/item~Item|null} selectable
 	 * @param {Boolean|Number|'before'|'end'|'after'} [backwardSelectionOrOffset]
 	 */
 	setTo( selectable, backwardSelectionOrOffset ) {
-		if ( !selectable ) {
+		if ( selectable == null ) {
 			this._removeAllRanges();
 		} else if ( selectable instanceof Selection ) {
 			this._isFake = selectable.isFake;
@@ -432,7 +456,12 @@ export default class Selection {
 			// We assume that the selectable is an iterable of ranges.
 			this._setRanges( selectable, backwardSelectionOrOffset );
 		} else {
-			throw new CKEditorError( 'model-selection-set-not-selectable' );
+			/**
+			 * Cannot set selection to given place.
+			 *
+			 * @error view-selection-setTo-not-selectable
+			 */
+			throw new CKEditorError( 'view-selection-setTo-not-selectable: Cannot set selection to given place.' );
 		}
 	}
 

+ 17 - 0
packages/ckeditor5-engine/tests/view/selection.js

@@ -575,6 +575,15 @@ describe( 'Selection', () => {
 
 			selection._setRanges( [ range2, range3 ] );
 		} );
+
+		it( 'should throw when range is intersecting with already added range', () => {
+			const text = el.getChild( 0 );
+			const range2 = Range.createFromParentsAndOffsets( text, 7, text, 15 );
+
+			expect( () => {
+				selection._setRanges( [ range1, range2 ] );
+			} ).to.throw( CKEditorError, 'view-selection-range-intersects' );
+		} );
 	} );
 
 	describe( 'setTo()', () => {
@@ -650,6 +659,14 @@ describe( 'Selection', () => {
 			expect( selection.isFake ).to.be.true;
 			expect( selection.fakeSelectionLabel ).to.equal( label );
 		} );
+
+		it( 'should throw an error when trying to set to not selectable', () => {
+			const otherSelection = new Selection();
+
+			expect( () => {
+				otherSelection.setTo( {} );
+			} ).to.throw( /view-selection-setTo-not-selectable/ );
+		} );
 	} );
 
 	describe( 'setTo - set collapsed at', () => {