8
0

enabletoolbarkeyboardfocus.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /**
  2. * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. /* global document */
  6. import View from '../../src/view';
  7. import ToolbarView from '../../src/toolbar/toolbarview';
  8. import FocusTracker from '@ckeditor/ckeditor5-utils/src/focustracker';
  9. import KeystrokeHandler from '@ckeditor/ckeditor5-utils/src/keystrokehandler';
  10. import { keyCodes } from '@ckeditor/ckeditor5-utils/src/keyboard';
  11. import enableToolbarKeyboardFocus from '../../src/toolbar/enabletoolbarkeyboardfocus';
  12. describe( 'enableToolbarKeyboardFocus()', () => {
  13. let origin, originFocusTracker, originKeystrokeHandler, toolbar;
  14. beforeEach( () => {
  15. origin = viewCreator();
  16. originFocusTracker = new FocusTracker();
  17. originKeystrokeHandler = new KeystrokeHandler();
  18. toolbar = new ToolbarView();
  19. enableToolbarKeyboardFocus( {
  20. origin,
  21. originFocusTracker,
  22. originKeystrokeHandler,
  23. toolbar
  24. } );
  25. return toolbar.init();
  26. } );
  27. it( 'focuses the toolbar on Alt+F10', () => {
  28. const spy = sinon.spy( toolbar, 'focus' );
  29. const toolbarFocusTracker = toolbar.focusTracker;
  30. const keyEvtData = {
  31. keyCode: keyCodes.f10,
  32. altKey: true,
  33. preventDefault: sinon.spy(),
  34. stopPropagation: sinon.spy()
  35. };
  36. toolbarFocusTracker.isFocused = false;
  37. originFocusTracker.isFocused = false;
  38. originKeystrokeHandler.press( keyEvtData );
  39. sinon.assert.notCalled( spy );
  40. toolbarFocusTracker.isFocused = true;
  41. originFocusTracker.isFocused = true;
  42. originKeystrokeHandler.press( keyEvtData );
  43. sinon.assert.notCalled( spy );
  44. toolbarFocusTracker.isFocused = false;
  45. originFocusTracker.isFocused = true;
  46. originKeystrokeHandler.press( keyEvtData );
  47. sinon.assert.calledOnce( spy );
  48. sinon.assert.calledOnce( keyEvtData.preventDefault );
  49. sinon.assert.calledOnce( keyEvtData.stopPropagation );
  50. } );
  51. it( 're–foucuses origin on Esc', () => {
  52. const spy = origin.focus = sinon.spy();
  53. const toolbarFocusTracker = toolbar.focusTracker;
  54. const keyEvtData = { keyCode: keyCodes.esc,
  55. preventDefault: sinon.spy(),
  56. stopPropagation: sinon.spy()
  57. };
  58. toolbarFocusTracker.isFocused = false;
  59. toolbar.keystrokes.press( keyEvtData );
  60. sinon.assert.notCalled( spy );
  61. toolbarFocusTracker.isFocused = true;
  62. toolbar.keystrokes.press( keyEvtData );
  63. sinon.assert.calledOnce( spy );
  64. sinon.assert.calledOnce( keyEvtData.preventDefault );
  65. sinon.assert.calledOnce( keyEvtData.stopPropagation );
  66. } );
  67. } );
  68. function viewCreator( name ) {
  69. return locale => {
  70. const view = new View( locale );
  71. view.name = name;
  72. view.element = document.createElement( 'a' );
  73. return view;
  74. };
  75. }