Esanders has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/197954

Change subject: Fix edge case in expandLinearSelection when selection covers 
node
......................................................................

Fix edge case in expandLinearSelection when selection covers node

Bug: T86762
Change-Id: Ifdd18b6db5c74f1d3ce00f1f1a829e45eb61ced6
---
M src/dm/ve.dm.SurfaceFragment.js
M tests/dm/ve.dm.SurfaceFragment.test.js
2 files changed, 27 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor 
refs/changes/54/197954/1

diff --git a/src/dm/ve.dm.SurfaceFragment.js b/src/dm/ve.dm.SurfaceFragment.js
index 9e862c4..33494f9 100644
--- a/src/dm/ve.dm.SurfaceFragment.js
+++ b/src/dm/ve.dm.SurfaceFragment.js
@@ -376,6 +376,11 @@
                case 'closest':
                        // Grow range to cover closest common ancestor node of 
given type
                        node = this.document.selectNodes( oldRange, 'siblings' 
)[0].node;
+                       // If the range covered the entire node check that node
+                       if ( node.getRange().equalsSelection( oldRange ) && 
node instanceof type ) {
+                               newRange = node.getOuterRange();
+                               break;
+                       }
                        parent = node.getParent();
                        while ( parent && !( parent instanceof type ) ) {
                                node = parent;
diff --git a/tests/dm/ve.dm.SurfaceFragment.test.js 
b/tests/dm/ve.dm.SurfaceFragment.test.js
index e233337..3adcd6d 100644
--- a/tests/dm/ve.dm.SurfaceFragment.test.js
+++ b/tests/dm/ve.dm.SurfaceFragment.test.js
@@ -96,12 +96,30 @@
 } );
 
 QUnit.test( 'expandLinearSelection (closest)', function ( assert ) {
-       var i, fragment,
+       var i, fragment, surface,
                doc = ve.dm.example.createExampleDocument(),
-               surface = new ve.dm.Surface( doc ),
                cases = [
                        {
-                               msg: 'closest with invalid type results in null 
fragment',
+                               msg: 've.dm.BranchNode selects surrounding 
paragraph',
+                               range: new ve.Range( 1 ),
+                               type: ve.dm.BranchNode,
+                               expected: new ve.dm.LinearSelection( doc, new 
ve.Range( 0, 5 ) )
+                       },
+                       {
+                               msg: 've.dm.BranchNode selects surrounding 
paragraph in empty paragraph',
+                               doc: 'alienWithEmptyData',
+                               range: new ve.Range( 1 ),
+                               type: ve.dm.BranchNode,
+                               expected: new ve.dm.LinearSelection( doc, new 
ve.Range( 0, 2 ) )
+                       },
+                       {
+                               msg: 've.dm.BranchNode selects surrounding 
paragraph when entire paragrpah selected',
+                               range: new ve.Range( 1, 4 ),
+                               type: ve.dm.BranchNode,
+                               expected: new ve.dm.LinearSelection( doc, new 
ve.Range( 0, 5 ) )
+                       },
+                       {
+                               msg: 'invalid type results in null fragment',
                                range: new ve.Range( 20, 21 ),
                                type: function () {},
                                expected: new ve.dm.NullSelection( doc )
@@ -110,6 +128,7 @@
 
        QUnit.expect( cases.length );
        for ( i = 0; i < cases.length; i++ ) {
+               surface = new ve.dm.Surface( 
ve.dm.example.createExampleDocument( cases[i].doc ) );
                fragment = surface.getLinearFragment( cases[i].range 
).expandLinearSelection( 'closest', cases[i].type );
                assert.equalHash( fragment.getSelection(), cases[i].expected, 
cases[i].msg );
        }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifdd18b6db5c74f1d3ce00f1f1a829e45eb61ced6
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to