8
0

deleteobserver.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /**
  2. * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. import DeleteObserver from '/ckeditor5/typing/deleteobserver.js';
  6. import ViewDocument from '/ckeditor5/engine/view/document.js';
  7. import DomEventData from '/ckeditor5/engine/view/observer/domeventdata.js';
  8. import { getCode } from '/ckeditor5/utils/keyboard.js';
  9. describe( 'DeleteObserver', () => {
  10. let viewDocument, observer;
  11. beforeEach( () => {
  12. viewDocument = new ViewDocument();
  13. observer = viewDocument.addObserver( DeleteObserver );
  14. } );
  15. // See ckeditor/ckeditor5-enter#10.
  16. it( 'can be initialized', () => {
  17. expect( () => {
  18. viewDocument.createRoot( document.createElement( 'div' ) );
  19. } ).to.not.throw();
  20. } );
  21. describe( 'delete event', () => {
  22. it( 'is fired on keydown', () => {
  23. const spy = sinon.spy();
  24. viewDocument.on( 'delete', spy );
  25. viewDocument.fire( 'keydown', new DomEventData( viewDocument, getDomEvent(), {
  26. keyCode: getCode( 'delete' )
  27. } ) );
  28. expect( spy.calledOnce ).to.be.true;
  29. const data = spy.args[ 0 ][ 1 ];
  30. expect( data ).to.have.property( 'direction', 'forward' );
  31. expect( data ).to.have.property( 'unit', 'character' );
  32. } );
  33. it( 'is fired with a proper direction and unit', () => {
  34. const spy = sinon.spy();
  35. viewDocument.on( 'delete', spy );
  36. viewDocument.fire( 'keydown', new DomEventData( viewDocument, getDomEvent(), {
  37. keyCode: getCode( 'backspace' ),
  38. altKey: true
  39. } ) );
  40. expect( spy.calledOnce ).to.be.true;
  41. const data = spy.args[ 0 ][ 1 ];
  42. expect( data ).to.have.property( 'direction', 'backward' );
  43. expect( data ).to.have.property( 'unit', 'word' );
  44. } );
  45. it( 'is not fired on keydown when keyCode does not match backspace or delete', () => {
  46. const spy = sinon.spy();
  47. viewDocument.on( 'delete', spy );
  48. viewDocument.fire( 'keydown', new DomEventData( viewDocument, getDomEvent(), {
  49. keyCode: 1
  50. } ) );
  51. expect( spy.calledOnce ).to.be.false;
  52. } );
  53. } );
  54. function getDomEvent() {
  55. return {
  56. preventDefault: sinon.spy()
  57. };
  58. }
  59. } );