DLynch has uploaded a new change for review.

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

Change subject: LinearArrowKeyDownHandler: test more
......................................................................

LinearArrowKeyDownHandler: test more

Bug: T130389
Change-Id: If58ea415dae0435c93674f67473fc506985aee59
---
M tests/ce/ve.ce.Surface.test.js
1 file changed, 119 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor 
refs/changes/34/279134/1

diff --git a/tests/ce/ve.ce.Surface.test.js b/tests/ce/ve.ce.Surface.test.js
index 53cea7c..56bb203 100644
--- a/tests/ce/ve.ce.Surface.test.js
+++ b/tests/ce/ve.ce.Surface.test.js
@@ -8,7 +8,7 @@
 
 /* Tests */
 
-ve.test.utils.runSurfaceHandleSpecialKeyTest = function ( assert, htmlOrDoc, 
rangeOrSelection, keys, expectedData, expectedRangeOrSelection, msg ) {
+ve.test.utils.runSurfaceHandleSpecialKeyTest = function ( assert, htmlOrDoc, 
rangeOrSelection, keys, expectedData, expectedRangeOrSelection, msg, 
forceSelection, fullEvents ) {
        var i, e, selection, expectedSelection, key,
                view = typeof htmlOrDoc === 'string' ?
                        ve.test.utils.createSurfaceViewFromHtml( htmlOrDoc ) :
@@ -35,9 +35,28 @@
                        preventDefault: function () {},
                        stopPropagation: function () {}
                };
-               ve.ce.keyDownHandlerFactory.executeHandlersForKey(
-                       e.keyCode, selection.getName(), view, e
-               );
+               if ( fullEvents ) {
+                       // Some key handlers do things like schedule 
after-event handlers,
+                       // and so we want to fake the full sequence.
+                       // TODO: Could probably switch to using this for every 
test, but it
+                       // would need the faked testing surface to be improved.
+                       view.eventSequencer.onEvent( 'keydown', $.Event( 
'keydown', e ) );
+                       if ( forceSelection ) {
+                               view.showSelectionState( 
view.getSelectionState( forceSelection ) );
+                       }
+                       view.eventSequencer.runPendingCalls( 'keydown' );
+                       view.eventSequencer.onEvent( 'keypress', $.Event( 
'keypress', e ) );
+                       view.eventSequencer.runPendingCalls( 'keypress' );
+                       view.eventSequencer.onEvent( 'keyup', $.Event( 'keyup', 
e ) );
+                       view.eventSequencer.runPendingCalls( 'keyup' );
+               } else {
+                       if ( forceSelection ) {
+                               view.showSelectionState( 
view.getSelectionState( forceSelection ) );
+                       }
+                       ve.ce.keyDownHandlerFactory.executeHandlersForKey(
+                               e.keyCode, selection.getName(), view, e
+                       );
+               }
        }
        expectedData( data );
 
@@ -520,6 +539,84 @@
                        )
                ),
                cases = [
+                       // Within normal text. NOTE: these tests manually force 
the cursor to
+                       // move, because we rely on native browser actions for 
that.
+                       // As such, these are mostly testing to make sure that 
other
+                       // behavior doesn't trigger when it shouldn't.
+                       {
+                               htmlOrDoc: blockImageDoc,
+                               rangeOrSelection: new ve.Range( 2 ),
+                               keys: [ 'LEFT' ],
+                               forceSelection: new ve.Range( 1 ),
+                               expectedData: function () {},
+                               expectedRangeOrSelection: new ve.Range( 1 ),
+                               msg: 'Cursor left in text'
+                       },
+                       {
+                               htmlOrDoc: blockImageDoc,
+                               rangeOrSelection: new ve.Range( 2 ),
+                               keys: [ 'RIGHT' ],
+                               forceSelection: new ve.Range( 3 ),
+                               expectedData: function () {},
+                               expectedRangeOrSelection: new ve.Range( 3 ),
+                               msg: 'Cursor right in text'
+                       },
+                       {
+                               htmlOrDoc: blockImageDoc,
+                               rangeOrSelection: new ve.Range( 4 ),
+                               keys: [ 'UP' ],
+                               forceSelection: new ve.Range( 1 ),
+                               expectedData: function () {},
+                               expectedRangeOrSelection: new ve.Range( 1 ),
+                               msg: 'Cursor up in text'
+                       },
+                       {
+                               htmlOrDoc: blockImageDoc,
+                               rangeOrSelection: new ve.Range( 20 ),
+                               keys: [ 'DOWN' ],
+                               forceSelection: new ve.Range( 22 ),
+                               expectedData: function () {},
+                               expectedRangeOrSelection: new ve.Range( 22 ),
+                               msg: 'Cursor down in text'
+                       },
+                       // Cursor with shift held to adjust selection
+                       {
+                               htmlOrDoc: blockImageDoc,
+                               rangeOrSelection: new ve.Range( 2 ),
+                               keys: [ 'SHIFT+LEFT' ],
+                               forceSelection: new ve.Range( 1 ),
+                               expectedData: function () {},
+                               expectedRangeOrSelection: new ve.Range( 2, 1 ),
+                               msg: 'Cursor left in text with shift'
+                       },
+                       {
+                               htmlOrDoc: blockImageDoc,
+                               rangeOrSelection: new ve.Range( 2 ),
+                               keys: [ 'SHIFT+RIGHT' ],
+                               forceSelection: new ve.Range( 3 ),
+                               expectedData: function () {},
+                               expectedRangeOrSelection: new ve.Range( 2, 3 ),
+                               msg: 'Cursor right in text with shift'
+                       },
+                       {
+                               htmlOrDoc: blockImageDoc,
+                               rangeOrSelection: new ve.Range( 4 ),
+                               keys: [ 'SHIFT+UP' ],
+                               forceSelection: new ve.Range( 1 ),
+                               expectedData: function () {},
+                               expectedRangeOrSelection: new ve.Range( 4, 1 ),
+                               msg: 'Cursor up in text with shift'
+                       },
+                       {
+                               htmlOrDoc: blockImageDoc,
+                               rangeOrSelection: new ve.Range( 20 ),
+                               keys: [ 'SHIFT+DOWN' ],
+                               forceSelection: new ve.Range( 22 ),
+                               expectedData: function () {},
+                               expectedRangeOrSelection: new ve.Range( 20, 22 
),
+                               msg: 'Cursor down in text with shift'
+                       },
+                       // While focusing a block node
                        {
                                htmlOrDoc: blockImageDoc,
                                rangeOrSelection: new ve.Range( 5, 18 ),
@@ -531,10 +628,26 @@
                        {
                                htmlOrDoc: blockImageDoc,
                                rangeOrSelection: new ve.Range( 5, 18 ),
+                               keys: [ 'UP' ],
+                               expectedData: function () {},
+                               expectedRangeOrSelection: new ve.Range( 4 ),
+                               msg: 'Cursor up off a block node'
+                       },
+                       {
+                               htmlOrDoc: blockImageDoc,
+                               rangeOrSelection: new ve.Range( 5, 18 ),
                                keys: [ 'RIGHT' ],
                                expectedData: function () {},
                                expectedRangeOrSelection: new ve.Range( 19 ),
                                msg: 'Cursor right off a block node'
+                       },
+                       {
+                               htmlOrDoc: blockImageDoc,
+                               rangeOrSelection: new ve.Range( 5, 18 ),
+                               keys: [ 'DOWN' ],
+                               expectedData: function () {},
+                               expectedRangeOrSelection: new ve.Range( 19 ),
+                               msg: 'Cursor down off a block node'
                        }
                ];
 
@@ -543,7 +656,8 @@
        for ( i = 0; i < cases.length; i++ ) {
                ve.test.utils.runSurfaceHandleSpecialKeyTest(
                        assert, cases[ i ].htmlOrDoc, cases[ i 
].rangeOrSelection, cases[ i ].keys,
-                       cases[ i ].expectedData, cases[ i 
].expectedRangeOrSelection, cases[ i ].msg
+                       cases[ i ].expectedData, cases[ i 
].expectedRangeOrSelection, cases[ i ].msg,
+                       cases[ i ].forceSelection, true
                );
        }
 } );

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

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

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

Reply via email to