jenkins-bot has submitted this change and it was merged.

Change subject: ve.dm.SurfaceFragment: Add more unit tests
......................................................................


ve.dm.SurfaceFragment: Add more unit tests

Bonus: Sync documentation of truncateLinearSelection with ve.Range#truncate

Change-Id: I0f2fe21df5604402a673d12518ae07c0672b8901
---
M src/dm/ve.dm.SurfaceFragment.js
M src/ve.Range.js
M tests/dm/ve.dm.SurfaceFragment.test.js
3 files changed, 75 insertions(+), 8 deletions(-)

Approvals:
  Jforrester: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/src/dm/ve.dm.SurfaceFragment.js b/src/dm/ve.dm.SurfaceFragment.js
index 4d32000..7fbedbe 100644
--- a/src/dm/ve.dm.SurfaceFragment.js
+++ b/src/dm/ve.dm.SurfaceFragment.js
@@ -260,7 +260,7 @@
  * Get a new fragment with a truncated length.
  *
  * @method
- * @param {number} limit Maximum length of range (negative for left-side 
truncation)
+ * @param {number} limit Maximum length of new range (negative for left-side 
truncation)
  * @return {ve.dm.SurfaceFragment} Truncated fragment
  */
 ve.dm.SurfaceFragment.prototype.truncateLinearSelection = function ( limit ) {
diff --git a/src/ve.Range.js b/src/ve.Range.js
index e574252..7c540f7 100644
--- a/src/ve.Range.js
+++ b/src/ve.Range.js
@@ -178,19 +178,19 @@
 };
 
 /**
- * Create a new range with a limited length.
+ * Create a new range with a truncated length.
  *
- * @param {number} length Length of the new range (negative for truncate from 
right)
+ * @param {number} limit Maximum length of new range (negative for left-side 
truncation)
  * @return {ve.Range} A new range
  */
-ve.Range.prototype.truncate = function ( length ) {
-       if ( length >= 0 ) {
+ve.Range.prototype.truncate = function ( limit ) {
+       if ( limit >= 0 ) {
                return new ve.Range(
-                       this.start, Math.min( this.start + length, this.end )
+                       this.start, Math.min( this.start + limit, this.end )
                );
        } else {
                return new ve.Range(
-                       Math.max( this.end + length, this.start ), this.end
+                       Math.max( this.end + limit, this.start ), this.end
                );
        }
 };
diff --git a/tests/dm/ve.dm.SurfaceFragment.test.js 
b/tests/dm/ve.dm.SurfaceFragment.test.js
index d9bf3aa..c44e2af 100644
--- a/tests/dm/ve.dm.SurfaceFragment.test.js
+++ b/tests/dm/ve.dm.SurfaceFragment.test.js
@@ -67,11 +67,49 @@
 
 } );
 
+QUnit.test( 'getSelectedModels', 4, function ( assert ) {
+       var doc = ve.dm.example.createExampleDocument(),
+               surface = new ve.dm.Surface( doc );
+
+       assert.deepEqual(
+               surface.getLinearFragment( new ve.Range( 1, 3 ) 
).getSelectedModels(),
+               [],
+               'Empty'
+       );
+       assert.deepEqual(
+               surface.getLinearFragment( new ve.Range( 2, 3 ) 
).getSelectedModels(),
+               [ doc.data.store.value( 0 ) ],
+               'Bold annotation'
+       );
+       assert.deepEqual(
+               surface.getLinearFragment( new ve.Range( 1, 3 ) 
).getSelectedModels( true ),
+               [
+                       doc.getDocumentNode().children[ 0 ].children[ 0 ],
+                       doc.data.store.value( 0 )
+               ],
+               'Bold annotation and text node'
+       );
+       assert.deepEqual(
+               surface.getLinearFragment( new ve.Range( 39, 41 ) 
).getSelectedModels(),
+               [ doc.getDocumentNode().children[ 2 ].children[ 1 ] ],
+               'Inline image node'
+       );
+} );
+
+QUnit.test( 'hasAnnotations', 2, function ( assert ) {
+       var doc = ve.dm.example.createExampleDocument(),
+               surface = new ve.dm.Surface( doc );
+
+       assert.strictEqual( surface.getLinearFragment( new ve.Range( 1, 2 ) 
).hasAnnotations(), false, 'Plain text has none' );
+       assert.strictEqual( surface.getLinearFragment( new ve.Range( 2, 3 ) 
).hasAnnotations(), true, 'Bold text has some' );
+} );
+
 QUnit.test( 'adjustLinearSelection', 4, function ( assert ) {
        var doc = ve.dm.example.createExampleDocument(),
                surface = new ve.dm.Surface( doc ),
                fragment = surface.getLinearFragment( new ve.Range( 20, 21 ) ),
                adjustedFragment = fragment.adjustLinearSelection( -19, 35 );
+
        assert.ok( fragment !== adjustedFragment, 'adjustLinearSelection 
produces a new fragment' );
        assert.equalRange( fragment.getSelection().getRange(), new ve.Range( 
20, 21 ), 'old fragment is not changed' );
        assert.equalRange( adjustedFragment.getSelection().getRange(), new 
ve.Range( 1, 56 ), 'new range is used' );
@@ -80,11 +118,24 @@
        assert.deepEqual( adjustedFragment, fragment, 'fragment is clone if no 
parameters supplied' );
 } );
 
+QUnit.test( 'truncateLinearSelection', 4, function ( assert ) {
+       var range = new ve.Range( 100, 200 ),
+               doc = ve.dm.example.createExampleDocument(),
+               surface = new ve.dm.Surface( doc ),
+               fragment = surface.getLinearFragment( range );
+
+       assert.equalRange( fragment.truncateLinearSelection( 50 
).getSelection().getRange(), new ve.Range( 100, 150 ), 'truncate 50' );
+       assert.equalRange( fragment.truncateLinearSelection( 150 
).getSelection().getRange(), range, 'truncate 150 does nothing' );
+       assert.equalRange( fragment.truncateLinearSelection( -50 
).getSelection().getRange(), new ve.Range( 150, 200 ), 'truncate -50' );
+       assert.equalRange( fragment.truncateLinearSelection( -150 
).getSelection().getRange(), range, 'truncate -150 does nothing' );
+} );
+
 QUnit.test( 'collapseToStart/End', 6, function ( assert ) {
        var doc = ve.dm.example.createExampleDocument(),
                surface = new ve.dm.Surface( doc ),
                fragment = surface.getLinearFragment( new ve.Range( 20, 21 ) ),
                collapsedFragment = fragment.collapseToStart();
+
        assert.ok( fragment !== collapsedFragment, 'collapseToStart produces a 
new fragment' );
        assert.equalRange( fragment.getSelection().getRange(), new ve.Range( 
20, 21 ), 'old fragment is not changed' );
        assert.equalRange( collapsedFragment.getSelection().getRange(), new 
ve.Range( 20 ), 'new range is used' );
@@ -366,10 +417,11 @@
        }
 } );
 
-QUnit.test( 'insertContent', 8, function ( assert ) {
+QUnit.test( 'insertContent', 9, function ( assert ) {
        var doc = ve.dm.example.createExampleDocument(),
                surface = new ve.dm.Surface( doc ),
                fragment = surface.getLinearFragment( new ve.Range( 1, 4 ) );
+
        fragment.insertContent( [ '1', '2', '3' ] );
        assert.deepEqual(
                doc.getData( new ve.Range( 1, 4 ) ),
@@ -398,6 +450,21 @@
                'range restored after undo'
        );
 
+       fragment = surface.getLinearFragment( new ve.Range( 0 ) );
+       fragment.insertContent( 'foo\nbar' );
+       assert.deepEqual(
+               doc.getData( new ve.Range( 0, 10 ) ),
+               [
+                       { type: 'paragraph' },
+                       'f', 'o', 'o',
+                       { type: '/paragraph' },
+                       { type: 'paragraph' },
+                       'b', 'a', 'r',
+                       { type: '/paragraph' }
+               ],
+               'newlines converted to paragraphs'
+       );
+
        fragment = surface.getLinearFragment( new ve.Range( 1 ) );
        fragment.insertContent( [ { type: 'table' }, { type: '/table' } ] );
        assert.deepEqual(

-- 
To view, visit https://gerrit.wikimedia.org/r/238225
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I0f2fe21df5604402a673d12518ae07c0672b8901
Gerrit-PatchSet: 3
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <esand...@wikimedia.org>
Gerrit-Reviewer: Jforrester <jforres...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to