enterobserver.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /**
  2. * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. /* globals document */
  6. import ViewDocument from '@ckeditor/ckeditor5-engine/src/view/document';
  7. import EnterObserver from '../src/enterobserver';
  8. import DomEventData from '@ckeditor/ckeditor5-engine/src/view/observer/domeventdata';
  9. import createViewRoot from '@ckeditor/ckeditor5-engine/tests/view/_utils/createroot';
  10. import { getCode } from '@ckeditor/ckeditor5-utils/src/keyboard';
  11. describe( 'EnterObserver', () => {
  12. let viewDocument;
  13. beforeEach( () => {
  14. viewDocument = new ViewDocument();
  15. viewDocument.addObserver( EnterObserver );
  16. } );
  17. // See #10.
  18. it( 'can be initialized', () => {
  19. expect( () => {
  20. createViewRoot( viewDocument );
  21. viewDocument.attachDomRoot( document.createElement( 'div' ) );
  22. } ).to.not.throw();
  23. } );
  24. describe( 'enter event', () => {
  25. it( 'is fired on keydown', () => {
  26. const spy = sinon.spy();
  27. viewDocument.on( 'enter', spy );
  28. viewDocument.fire( 'keydown', new DomEventData( viewDocument, getDomEvent(), {
  29. keyCode: getCode( 'enter' )
  30. } ) );
  31. expect( spy.calledOnce ).to.be.true;
  32. } );
  33. it( 'is not fired on keydown when keyCode does not match enter', () => {
  34. const spy = sinon.spy();
  35. viewDocument.on( 'enter', spy );
  36. viewDocument.fire( 'keydown', new DomEventData( viewDocument, getDomEvent(), {
  37. keyCode: 1
  38. } ) );
  39. expect( spy.calledOnce ).to.be.false;
  40. } );
  41. it( 'should stop keydown event when enter event is stopped', () => {
  42. const keydownSpy = sinon.spy();
  43. viewDocument.on( 'keydown', keydownSpy );
  44. viewDocument.on( 'enter', evt => evt.stop() );
  45. viewDocument.fire( 'keydown', new DomEventData( viewDocument, getDomEvent(), {
  46. keyCode: getCode( 'enter' )
  47. } ) );
  48. sinon.assert.notCalled( keydownSpy );
  49. } );
  50. it( 'should not stop keydown event when enter event is not stopped', () => {
  51. const keydownSpy = sinon.spy();
  52. viewDocument.on( 'keydown', keydownSpy );
  53. viewDocument.on( 'enter', evt => evt.stop() );
  54. viewDocument.fire( 'keydown', new DomEventData( viewDocument, getDomEvent(), {
  55. keyCode: getCode( 'x' )
  56. } ) );
  57. sinon.assert.calledOnce( keydownSpy );
  58. } );
  59. } );
  60. function getDomEvent() {
  61. return {
  62. preventDefault: sinon.spy()
  63. };
  64. }
  65. } );