preventdefault.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /**
  2. * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. /* global Event */
  6. import preventDefault from '../../src/bindings/preventdefault';
  7. import View from '../../src/view';
  8. import Template from '../../src/template';
  9. describe( 'preventDefault', () => {
  10. it( 'prevents default of a native DOM event', () => {
  11. const view = new View();
  12. view.template = new Template( {
  13. tag: 'div',
  14. on: {
  15. foo: preventDefault( view )
  16. }
  17. } );
  18. const evt = new Event( 'foo', { bubbles: true } );
  19. const spy = sinon.spy( evt, 'preventDefault' );
  20. // Render to enable bubbling.
  21. view.element;
  22. view.element.dispatchEvent( evt );
  23. sinon.assert.calledOnce( spy );
  24. } );
  25. it( 'prevents only when target is view#element', () => {
  26. const view = new View();
  27. const child = new View();
  28. child.template = new Template( {
  29. tag: 'a'
  30. } );
  31. view.template = new Template( {
  32. tag: 'div',
  33. on: {
  34. foo: preventDefault( view )
  35. },
  36. children: [
  37. child
  38. ]
  39. } );
  40. const evt = new Event( 'foo', { bubbles: true } );
  41. const spy = sinon.spy( evt, 'preventDefault' );
  42. // Render to enable bubbling.
  43. view.element;
  44. child.element.dispatchEvent( evt );
  45. sinon.assert.notCalled( spy );
  46. } );
  47. } );