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

Change subject: Use offset paths in selection state tests
......................................................................


Use offset paths in selection state tests

This will facilitate expected positions that are not in text nodes

Change-Id: Ib2b38e65b78b6dfed1194d6646c320cf12a74ea1
---
M tests/ce/ve.ce.Surface.test.js
M tests/dm/ve.dm.example.js
2 files changed, 103 insertions(+), 93 deletions(-)

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



diff --git a/tests/ce/ve.ce.Surface.test.js b/tests/ce/ve.ce.Surface.test.js
index c446d2e..12f0d0d 100644
--- a/tests/ce/ve.ce.Surface.test.js
+++ b/tests/ce/ve.ce.Surface.test.js
@@ -1911,7 +1911,7 @@
 } );
 
 QUnit.test( 'getSelectionState', function ( assert ) {
-       var i, j, l, view, selection, expectedNode, internalListNode, node, msg,
+       var i, j, l, view, selection, internalListNode, node, rootElement,
                expect = 0,
                cases = [
                        {
@@ -1926,104 +1926,36 @@
                                '<p>' +
                                        '2<b>n</b>d' +
                                '</p>',
+                               // The offset path of the result of 
getNodeAndOffset for
+                               // each offset
                                expected: [
-                                       { anchorNode: 'Foo', anchorOffset: 0 },
-                                       { anchorNode: 'Foo', anchorOffset: 0 },
-                                       { anchorNode: 'Foo', anchorOffset: 1 },
-                                       { anchorNode: 'Foo', anchorOffset: 2 },
-                                       { anchorNode: 'Foo', anchorOffset: 3 },
-                                       null, // Focusable
-                                       { anchorNode: 'Whee', anchorOffset: 0 },
-                                       { anchorNode: 'Whee', anchorOffset: 1 },
-                                       { anchorNode: 'Whee', anchorOffset: 2 },
-                                       { anchorNode: 'Whee', anchorOffset: 3 },
-                                       { anchorNode: 'Whee', anchorOffset: 4 },
-                                       { anchorNode: 'Whee', anchorOffset: 4, 
focusNode: '2', focusOffset: 0 },
-                                       { anchorNode: '2', anchorOffset: 0 },
-                                       { anchorNode: '2', anchorOffset: 1 },
-                                       { anchorNode: 'n', anchorOffset: 1 },
-                                       { anchorNode: 'd', anchorOffset: 1 }
+                                       [ 0, 0, 0 ],
+                                       [ 0, 0, 0 ],
+                                       [ 0, 0, 1 ],
+                                       [ 0, 0, 2 ],
+                                       [ 0, 0, 3 ],
+                                       null,
+                                       [ 0, 4, 0 ],
+                                       [ 0, 4, 1 ],
+                                       [ 0, 4, 2 ],
+                                       [ 0, 4, 3 ],
+                                       [ 0, 4, 4 ],
+                                       [ 0, 4, 4 ],
+                                       [ 1, 0, 0 ],
+                                       [ 1, 0, 1 ],
+                                       [ 1, 1, 0, 1 ],
+                                       [ 1, 2, 1 ]
                                ]
                        },
                        {
                                msg: 'Simple example doc',
                                html: ve.dm.example.html,
-                               expected: [
-                                       { anchorNode: 'a', anchorOffset: 0 },
-                                       { anchorNode: 'a', anchorOffset: 0 },
-                                       { anchorNode: 'a', anchorOffset: 1 },
-                                       { anchorNode: 'b', anchorOffset: 1 },
-                                       { anchorNode: 'c', anchorOffset: 1 },
-                                       { anchorNode: 'c', anchorOffset: 1, 
focusNode: 'd', focusOffset: 0 },
-                                       { anchorNode: 'c', anchorOffset: 1, 
focusNode: 'd', focusOffset: 0 },
-                                       { anchorNode: 'c', anchorOffset: 1, 
focusNode: 'd', focusOffset: 0 },
-                                       { anchorNode: 'c', anchorOffset: 1, 
focusNode: 'd', focusOffset: 0 },
-                                       { anchorNode: 'c', anchorOffset: 1, 
focusNode: 'd', focusOffset: 0 },
-                                       // 10
-                                       { anchorNode: 'd', anchorOffset: 0 },
-                                       { anchorNode: 'd', anchorOffset: 1 },
-                                       { anchorNode: 'd', anchorOffset: 1, 
focusNode: 'e', focusOffset: 0 },
-                                       { anchorNode: 'd', anchorOffset: 1, 
focusNode: 'e', focusOffset: 0 },
-                                       { anchorNode: 'd', anchorOffset: 1, 
focusNode: 'e', focusOffset: 0 },
-                                       { anchorNode: 'e', anchorOffset: 0 },
-                                       { anchorNode: 'e', anchorOffset: 1 },
-                                       { anchorNode: 'e', anchorOffset: 1, 
focusNode: 'f', focusOffset: 0 },
-                                       { anchorNode: 'e', anchorOffset: 1, 
focusNode: 'f', focusOffset: 0 },
-                                       { anchorNode: 'e', anchorOffset: 1, 
focusNode: 'f', focusOffset: 0 },
-                                       // 20
-                                       { anchorNode: 'f', anchorOffset: 0 },
-                                       { anchorNode: 'f', anchorOffset: 1 },
-                                       { anchorNode: 'f', anchorOffset: 1, 
focusNode: 'g', focusOffset: 0 },
-                                       { anchorNode: 'f', anchorOffset: 1, 
focusNode: 'g', focusOffset: 0 },
-                                       { anchorNode: 'f', anchorOffset: 1, 
focusNode: 'g', focusOffset: 0 },
-                                       { anchorNode: 'f', anchorOffset: 1, 
focusNode: 'g', focusOffset: 0 },
-                                       { anchorNode: 'f', anchorOffset: 1, 
focusNode: 'g', focusOffset: 0 },
-                                       { anchorNode: 'f', anchorOffset: 1, 
focusNode: 'g', focusOffset: 0 },
-                                       { anchorNode: 'f', anchorOffset: 1, 
focusNode: 'g', focusOffset: 0 },
-                                       { anchorNode: 'g', anchorOffset: 0 },
-                                       // 30
-                                       { anchorNode: 'g', anchorOffset: 1 },
-                                       { anchorNode: 'g', anchorOffset: 1, 
focusNode: 'h', focusOffset: 0 },
-                                       { anchorNode: 'g', anchorOffset: 1, 
focusNode: 'h', focusOffset: 0 },
-                                       { anchorNode: 'g', anchorOffset: 1, 
focusNode: 'h', focusOffset: 0 },
-                                       { anchorNode: 'g', anchorOffset: 1, 
focusNode: 'h', focusOffset: 0 },
-                                       { anchorNode: 'g', anchorOffset: 1, 
focusNode: 'h', focusOffset: 0 },
-                                       { anchorNode: 'g', anchorOffset: 1, 
focusNode: 'h', focusOffset: 0 },
-                                       { anchorNode: 'g', anchorOffset: 1, 
focusNode: 'h', focusOffset: 0 },
-                                       { anchorNode: 'h', anchorOffset: 0 },
-                                       { anchorNode: 'h', anchorOffset: 1 },
-                                       // 40
-                                       null, // Focusable
-                                       { anchorNode: 'i', anchorOffset: 0 },
-                                       { anchorNode: 'i', anchorOffset: 1 },
-                                       { anchorNode: 'i', anchorOffset: 1, 
focusNode: 'j', focusOffset: 0 },
-                                       { anchorNode: 'i', anchorOffset: 1, 
focusNode: 'j', focusOffset: 0 },
-                                       { anchorNode: 'i', anchorOffset: 1, 
focusNode: 'j', focusOffset: 0 },
-                                       { anchorNode: 'j', anchorOffset: 0 },
-                                       { anchorNode: 'j', anchorOffset: 1 },
-                                       { anchorNode: 'j', anchorOffset: 1, 
focusNode: 'k', focusOffset: 0 },
-                                       { anchorNode: 'j', anchorOffset: 1, 
focusNode: 'k', focusOffset: 0 },
-                                       // 50
-                                       { anchorNode: 'j', anchorOffset: 1, 
focusNode: 'k', focusOffset: 0 },
-                                       { anchorNode: 'k', anchorOffset: 0 },
-                                       { anchorNode: 'k', anchorOffset: 1 },
-                                       { anchorNode: 'k', anchorOffset: 1, 
focusNode: 'l', focusOffset: 0 },
-                                       { anchorNode: 'k', anchorOffset: 1, 
focusNode: 'l', focusOffset: 0 },
-                                       { anchorNode: 'k', anchorOffset: 1, 
focusNode: 'l', focusOffset: 0 },
-                                       { anchorNode: 'l', anchorOffset: 0 },
-                                       { anchorNode: 'l', anchorOffset: 1 },
-                                       { anchorNode: 'l', anchorOffset: 1, 
focusNode: 'm', focusOffset: 0 },
-                                       { anchorNode: 'm', anchorOffset: 0 },
-                                       // 60
-                                       { anchorNode: 'm', anchorOffset: 1 }
-                               ]
+                               expected: ve.dm.example.offsetPaths
                        }
                ];
 
        for ( i = 0; i < cases.length; i++ ) {
-               for ( j = 0; j < cases[ i ].expected.length; j++ ) {
-                       expect += cases[ i ].expected[ j ] ? 2 : 1;
-               }
+               expect += cases[ i ].expected.length;
        }
 
        QUnit.expect( expect );
@@ -2031,16 +1963,18 @@
        for ( i = 0; i < cases.length; i++ ) {
                view = ve.test.utils.createSurfaceViewFromHtml( cases[ i ].html 
);
                internalListNode = 
view.getModel().getDocument().getInternalList().getListNode();
+               rootElement = view.getDocument().getDocumentNode().$element[ 0 
];
                for ( j = 0, l = internalListNode.getOuterRange().start; j < l; 
j++ ) {
-                       msg = ' at ' + j + ' in ' + cases[ i ].msg;
                        node = 
view.getDocument().getDocumentNode().getNodeFromOffset( j );
                        if ( node.isFocusable() ) {
                                assert.strictEqual( null, cases[ i ].expected[ 
j ], 'Focusable node at ' + j );
                        } else {
                                selection = view.getSelectionState( new 
ve.Range( j ) );
-                               expectedNode = $( '<div>' ).html( cases[ i 
].expected[ j ].anchorNode )[ 0 ].childNodes[ 0 ];
-                               assert.equalDomElement( selection.anchorNode, 
expectedNode, 'Node ' + msg );
-                               assert.strictEqual( selection.anchorOffset, 
cases[ i ].expected[ j ].anchorOffset, 'Offset ' + msg );
+                               assert.deepEqual(
+                                       ve.getOffsetPath( rootElement, 
selection.anchorNode, selection.anchorOffset ),
+                                       cases[ i ].expected[ j ],
+                                       'Path at ' + j + ' in ' + cases[ i ].msg
+                               );
                        }
                }
                view.destroy();
diff --git a/tests/dm/ve.dm.example.js b/tests/dm/ve.dm.example.js
index 04d7126..17fff07 100644
--- a/tests/dm/ve.dm.example.js
+++ b/tests/dm/ve.dm.example.js
@@ -290,6 +290,7 @@
 ve.dm.example.html =
        '<h1>a<b>b</b><i>c</i></h1>' +
        '<table>' +
+               // implicit <tbody>
                '<tr>' +
                        '<td>' +
                                '<p>d</p>' +
@@ -323,6 +324,81 @@
        '<p>l</p>' +
        '<p>m</p>';
 
+/**
+ * The offset path of the result of getNodeAndOffset for each offset
+ *
+ * @see ve.getOffsetPath
+ */
+ve.dm.example.offsetPaths = [
+       [ 0, 0, 0 ],
+       [ 0, 0, 0 ],
+       [ 0, 0, 1 ],
+       [ 0, 1, 0, 1 ],
+       [ 0, 2, 0, 1 ],
+       [ 0, 2, 0, 1 ],
+       [ 0, 2, 0, 1 ],
+       [ 0, 2, 0, 1 ],
+       [ 0, 2, 0, 1 ],
+       [ 0, 2, 0, 1 ],
+       // 10
+       [ 1, 0, 0, 0, 0, 0, 0 ],
+       [ 1, 0, 0, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 1, 0, 0, 0, 0 ],
+       [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ],
+       // 20
+       [ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 ],
+       [ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 2, 0, 0, 0, 0 ],
+       // 30
+       [ 1, 0, 0, 0, 2, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 2, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 2, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 2, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 2, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 2, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 2, 0, 0, 0, 1 ],
+       [ 1, 0, 0, 0, 2, 0, 0, 0, 1 ],
+       [ 2, 0, 0 ],
+       [ 2, 0, 1 ],
+       // 40
+       null,
+       [ 2, 2, 0 ],
+       [ 2, 2, 1 ],
+       [ 2, 2, 1 ],
+       [ 2, 2, 1 ],
+       [ 2, 2, 1 ],
+       [ 3, 0, 0, 0, 0 ],
+       [ 3, 0, 0, 0, 1 ],
+       [ 3, 0, 0, 0, 1 ],
+       [ 3, 0, 0, 0, 1 ],
+       // 50
+       [ 3, 0, 0, 0, 1 ],
+       [ 3, 1, 0, 0, 0 ],
+       [ 3, 1, 0, 0, 1 ],
+       [ 3, 1, 0, 0, 1 ],
+       [ 3, 1, 0, 0, 1 ],
+       [ 3, 1, 0, 0, 1 ],
+       [ 4, 0, 0 ],
+       [ 4, 0, 1 ],
+       [ 4, 0, 1 ],
+       [ 5, 0, 0 ],
+       // 60
+       [ 5, 0, 1 ]
+];
+
 /*
  * Linear data.
  *

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ib2b38e65b78b6dfed1194d6646c320cf12a74ea1
Gerrit-PatchSet: 2
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Divec <da...@troi.org>
Gerrit-Reviewer: Esanders <esand...@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