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

Provided `Range.createCollapsedAt()` method with tests.

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

+ 7 - 0
packages/ckeditor5-engine/src/model/range.js

@@ -716,6 +716,13 @@ export default class Range {
 		return this.createFromPositionAndShift( Position.createBefore( item ), item.offsetSize );
 	}
 
+	static createCollapsedAt( itemOrPosition, offset ) {
+		const start = Position.createAt( itemOrPosition, offset );
+		const end = Position.createFromPosition( start );
+
+		return new Range( start, end );
+	}
+
 	/**
 	 * Combines all ranges from the passed array into a one range. At least one range has to be passed.
 	 * Passed ranges must not have common parts.

+ 7 - 0
packages/ckeditor5-engine/src/view/range.js

@@ -440,6 +440,13 @@ export default class Range {
 	static createOn( item ) {
 		return this.createFromPositionAndShift( Position.createBefore( item ), 1 );
 	}
+
+	static createCollapsedAt( itemOrPosition, offset ) {
+		const start = Position.createAt( itemOrPosition, offset );
+		const end = Position.createFromPosition( start );
+
+		return new Range( start, end );
+	}
 }
 
 // Function used by getEnlagred and getTrimmed methods.

+ 24 - 0
packages/ckeditor5-engine/tests/model/range.js

@@ -176,6 +176,30 @@ describe( 'Range', () => {
 			} );
 		} );
 
+		describe( 'createCollapsedAt()', () => {
+			it( 'should return new collapse range at the given item position and offset', () => {
+				const item = new Element( 'p', null, new Text( 'foo' ) );
+				const range = Range.createCollapsedAt( item, 1 );
+
+				expect( range.start.parent ).to.equal( item );
+				expect( range.start.offset ).to.equal( 1 );
+
+				expect( range.isCollapsed ).to.be.true;
+			} );
+
+			it( 'should return new collapsed range at the given item position', () => {
+				const item = new Element( 'p', null, new Text( 'foo' ) );
+				const range = Range.createCollapsedAt( item );
+
+				expect( range.start.parent ).to.equal( item );
+				expect( range.start.offset ).to.equal( 0 );
+
+				expect( range.isCollapsed ).to.be.true;
+			} );
+
+			// TODO - TextProxy
+		} );
+
 		describe( 'createFromParentsAndOffsets()', () => {
 			it( 'should return range', () => {
 				const range = Range.createFromParentsAndOffsets( root, 0, p, 2 );

+ 24 - 0
packages/ckeditor5-engine/tests/view/range.js

@@ -675,6 +675,30 @@ describe( 'Range', () => {
 			} );
 		} );
 
+		describe( 'createCollapsedAt()', () => {
+			it( 'should return new collapse range at the given item position and offset', () => {
+				const item = new Element( 'p', null, new Text( 'foo' ) );
+				const range = Range.createCollapsedAt( item, 1 );
+
+				expect( range.start.parent ).to.equal( item );
+				expect( range.start.offset ).to.equal( 1 );
+
+				expect( range.isCollapsed ).to.be.true;
+			} );
+
+			it( 'should return new collapsed range at the given item position', () => {
+				const item = new Element( 'p', null, new Text( 'foo' ) );
+				const range = Range.createCollapsedAt( item );
+
+				expect( range.start.parent ).to.equal( item );
+				expect( range.start.offset ).to.equal( 0 );
+
+				expect( range.isCollapsed ).to.be.true;
+			} );
+
+			// TODO - TextProxy
+		} );
+
 		describe( 'createFromParentsAndOffsets', () => {
 			it( 'should return range', () => {
 				const range = Range.createFromParentsAndOffsets( div, 0, foz, 1 );