8
0
Просмотр исходного кода

Added more restricted types in setTo().

Maciej Bukowski 8 лет назад
Родитель
Сommit
55a88aa063

+ 2 - 2
packages/ckeditor5-engine/src/model/selection.js

@@ -299,11 +299,11 @@ export default class Selection {
 	 * @param {Boolean|Number|'before'|'end'|'after'} [backwardSelectionOrOffset]
 	 */
 	setTo( selectable, backwardSelectionOrOffset ) {
-		if ( !selectable ) {
+		if ( selectable === null ) {
 			this._setRanges( [] );
 		} else if ( selectable instanceof Selection ) {
 			this._setRanges( selectable.getRanges(), selectable.isBackward );
-		} else if ( selectable._selection && selectable._selection instanceof Selection ) {
+		} else if ( selectable && selectable._selection instanceof Selection ) {
 			// We assume that the selectable is a DocumentSelection.
 			// It can't be imported here, because it would lead to circular imports.
 			this._setRanges( selectable.getRanges(), selectable.isBackward );

+ 1 - 1
packages/ckeditor5-engine/src/view/selection.js

@@ -412,7 +412,7 @@ export default class Selection {
 	 * @param {Boolean|Number|'before'|'end'|'after'} [backwardSelectionOrOffset]
 	 */
 	setTo( selectable, backwardSelectionOrOffset ) {
-		if ( selectable == null ) {
+		if ( selectable === null ) {
 			this._removeAllRanges();
 		} else if ( selectable instanceof Selection ) {
 			this._isFake = selectable.isFake;

+ 6 - 0
packages/ckeditor5-engine/tests/model/selection.js

@@ -241,6 +241,12 @@ describe( 'Selection', () => {
 			} ).to.throw( /model-selection-setTo-not-selectable/ );
 		} );
 
+		it( 'should throw an error when trying to set selection to not selectable #2', () => {
+			expect( () => {
+				selection.setTo();
+			} ).to.throw( /model-selection-setTo-not-selectable/ );
+		} );
+
 		it( 'should allow setting selection inside an element', () => {
 			const element = new Element( 'p', null, [ new Text( 'foo' ), new Text( 'bar' ) ] );
 

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

@@ -647,6 +647,14 @@ describe( 'Selection', () => {
 					otherSelection.setTo( {} );
 				} ).to.throw( /view-selection-setTo-not-selectable/ );
 			} );
+
+			it( 'should throw an error when trying to set to not selectable #2', () => {
+				const otherSelection = new Selection();
+
+				expect( () => {
+					otherSelection.setTo();
+				} ).to.throw( /view-selection-setTo-not-selectable/ );
+			} );
 		} );
 
 		describe( 'setting collapsed selection', () => {