Sfoglia il codice sorgente

Added basic structure of treeView.Range class.

Szymon Kupś 10 anni fa
parent
commit
87b65c8477

+ 51 - 0
packages/ckeditor5-engine/src/treeview/range.js

@@ -0,0 +1,51 @@
+/**
+ * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+
+'use strict';
+
+import Position from './position.js';
+
+/**
+ * Tree view range.
+ *
+ * @memberOf core.treeView
+ * @extends core.treeView.Range
+ */
+export default class Range {
+	/**
+	 * Creates a range spanning from `start` position to `end` position.
+	 * **Note:** Constructor creates it's own {@link core.treeView.Position} instances basing on passed values.
+	 *
+	 * @param {core.treeView.Position} start Start position.
+	 * @param {core.treeView.Position} end End position.
+	 */
+	constructor( start, end ) {
+		/**
+		 * Start position.
+		 *
+		 * @public
+		 * @member {core.treeView.Position}  core.treeModel.Range#start
+		 */
+		this.start = Position.createFromPosition( start );
+
+		/**
+		 * End position.
+		 *
+		 * @public
+		 * @member {core.treeView.Position} core.treeModel.Range#end
+		 */
+		this.end = Position.createFromPosition( end );
+	}
+
+	/**
+	 * Two ranges equal if their start and end positions equal.
+	 *
+	 * @param {core.treeView.Range} otherRange Range to compare with.
+	 * @returns {Boolean} True if ranges equal.
+	 */
+	isEqual( otherRange ) {
+		return this == otherRange || ( this.start.isEqual( otherRange.start ) && this.end.isEqual( otherRange.end ) );
+	}
+}

+ 76 - 0
packages/ckeditor5-engine/tests/treeview/range.js

@@ -0,0 +1,76 @@
+/**
+ * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+
+/* bender-tags: treeview */
+
+'use strict';
+
+import Range from '/ckeditor5/core/treeview/range.js';
+import Position from '/ckeditor5/core/treeview/position.js';
+
+describe( 'Range', () => {
+	describe( 'constructor', () => {
+		it( 'creates range from provided positions', () => {
+			const start = new Position( {}, 1 );
+			const end = new Position( {}, 2 );
+			const range = new Range( start, end );
+
+			expect( range ).to.be.an.instanceof( Range );
+			expect( range ).to.have.property( 'start' ).that.not.equals( start );
+			expect( range ).to.have.property( 'end' ).that.not.equals( end );
+			expect( range.start.parent ).to.equal( start.parent );
+			expect( range.end.parent ).to.equal( end.parent );
+			expect( range.start.offset ).to.equal( start.offset );
+			expect( range.end.offset ).to.equal( end.offset );
+		} );
+	} );
+
+	describe( 'isEqual', () => {
+		it( 'should return true for the same range', () => {
+			const start = new Position( {}, 1 );
+			const end = new Position( {}, 2 );
+			const range = new Range( start, end );
+
+			expect( range.isEqual( range ) ).to.be.true;
+		} );
+
+		it( 'should return true for ranges with same start and end positions', () => {
+			const start = new Position( {}, 1 );
+			const end = new Position( {}, 2 );
+			const range1 = new Range( start, end );
+			const range2 = new Range( start, end );
+
+			expect( range1.isEqual( range2 ) ).to.be.true;
+		} );
+
+		it( 'should return false if start position is different', () => {
+			const start1 = new Position( {}, 1 );
+			const start2 = new Position( {}, 1 );
+			const end = new Position( {}, 2 );
+			const range1 = new Range( start1, end );
+			const range2 = new Range( start2, end );
+
+			expect( range1.isEqual( range2 ) ).to.be.false;
+		} );
+
+		it( 'should return false if end position is different', () => {
+			const start = new Position( {}, 1 );
+			const end1 = new Position( {}, 2 );
+			const end2 = new Position( {}, 2 );
+			const range1 = new Range( start, end1 );
+			const range2 = new Range( start, end2 );
+
+			expect( range1.isEqual( range2 ) ).to.be.false;
+		} );
+
+		it( 'should return false for ranges with same root and different offsets', () => {
+			const mockObject = {};
+			const range1 = new Range( new Position( mockObject, 0 ), new Position( mockObject, 10 )  );
+			const range2 = new Range( new Position( mockObject, 2 ), new Position( mockObject, 10 )  );
+
+			expect( range1.isEqual( range2 ) ).to.be.false;
+		} );
+	} );
+} );