EventManager.spec.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. import EventManager from 'handsontable/eventManager';
  2. describe('EventManager', () => {
  3. it('should add/remove/clear event for multiple instances', () => {
  4. const instance = {
  5. subinstance: {}
  6. };
  7. const instance2 = {};
  8. const eM0 = new EventManager(instance);
  9. const eM1 = new EventManager(instance.subinstance);
  10. const eM2 = new EventManager(instance2);
  11. expect(instance.eventListeners.length).toEqual(0);
  12. const test = function() {};
  13. const test2 = function() {};
  14. eM0.addEventListener(window, 'click', test, true);
  15. eM1.addEventListener(window, 'mousedown', test);
  16. eM2.addEventListener(window, 'mouseup', test, false);
  17. eM2.addEventListener(window, 'click', test2);
  18. expect(instance.eventListeners.length).toEqual(1);
  19. expect(instance.subinstance.eventListeners.length).toEqual(1);
  20. expect(instance2.eventListeners.length).toEqual(2);
  21. eM0.removeEventListener(window, 'click', test, true);
  22. expect(instance.eventListeners.length).toEqual(0);
  23. eM1.removeEventListener(window);
  24. expect(instance.subinstance.eventListeners.length).toEqual(1);
  25. eM1.clear();
  26. expect(instance.subinstance.eventListeners.length).toEqual(0);
  27. eM2.clear();
  28. expect(instance2.eventListeners.length).toEqual(0);
  29. });
  30. it('should detect event when fired from hot-table (web component)', () => {
  31. // skip if browser not support Shadow DOM natively
  32. if (!document.createElement('div').createShadowRoot) {
  33. // Fix for "no exceptations" warnings
  34. expect(true).toBe(true);
  35. return;
  36. }
  37. EventManager.isHotTableEnv = true;
  38. const instance = {};
  39. const em = new EventManager(instance);
  40. const classicHost = document.createElement('div');
  41. const hotTable = document.createElement('hot-table');
  42. const shadowHotTable = hotTable.createShadowRoot();
  43. shadowHotTable.innerHTML = '<span>shadow <inner-custom><p></p></inner-custom></span>';
  44. const test1 = jasmine.createSpy('test1');
  45. const test2 = jasmine.createSpy('test2');
  46. em.addEventListener(classicHost, 'click', test1);
  47. em.addEventListener(shadowHotTable.querySelector('p'), 'click', test2);
  48. em.fireEvent(classicHost, 'click');
  49. em.fireEvent(shadowHotTable.querySelector('p'), 'click');
  50. em.clear();
  51. expect(test1.calls.mostRecent().args[0].isTargetWebComponent).toEqual(true);
  52. expect(test1.calls.count()).toEqual(1);
  53. expect(test2.calls.count()).toEqual(1);
  54. expect(test2.calls.mostRecent().args[0].target).toEqual(shadowHotTable.querySelector('p'));
  55. EventManager.isHotTableEnv = false;
  56. });
  57. it('should clear all events', () => {
  58. const instance = {};
  59. const em = new EventManager(instance);
  60. const test = jasmine.createSpy('test');
  61. const test1 = jasmine.createSpy('test1');
  62. em.addEventListener(window, 'click', test);
  63. em.addEventListener(window, 'click', test1);
  64. em.addEventListener(window, 'click', test1);
  65. em.fireEvent(window, 'click');
  66. expect(test.calls.count()).toEqual(1);
  67. expect(test1.calls.count()).toEqual(2);
  68. em.clear(window);
  69. em.fireEvent(window, 'click');
  70. expect(test.calls.count()).toEqual(1);
  71. expect(test1.calls.count()).toEqual(2);
  72. });
  73. it('should destroy instance', () => {
  74. const instance = {};
  75. const em = new EventManager(instance);
  76. const test = jasmine.createSpy('test');
  77. const test1 = jasmine.createSpy('test1');
  78. em.addEventListener(window, 'click', test);
  79. em.addEventListener(window, 'click', test1);
  80. em.addEventListener(window, 'click', test1);
  81. em.fireEvent(window, 'click');
  82. expect(test.calls.count()).toEqual(1);
  83. expect(test1.calls.count()).toEqual(2);
  84. em.destroy(window);
  85. em.fireEvent(window, 'click');
  86. expect(test.calls.count()).toEqual(1);
  87. expect(test1.calls.count()).toEqual(2);
  88. expect(em.context).toBe(null);
  89. expect(instance.eventListeners.length).toBe(0);
  90. });
  91. it('should fire event', () => {
  92. const instance = {};
  93. const em = new EventManager(instance);
  94. const test = jasmine.createSpy('test');
  95. const test1 = jasmine.createSpy('test1');
  96. em.addEventListener(window, 'click', test);
  97. em.addEventListener(window, 'click', test1);
  98. em.addEventListener(window, 'click', test1);
  99. em.fireEvent(window, 'click');
  100. expect(test.calls.count()).toEqual(1);
  101. expect(test1.calls.count()).toEqual(2);
  102. em.fireEvent(window, 'click');
  103. expect(test.calls.count()).toEqual(2);
  104. expect(test1.calls.count()).toEqual(4);
  105. em.clear(window, 'click');
  106. });
  107. it('should fire touchend event', () => {
  108. const instance = {};
  109. const em = new EventManager(instance);
  110. const test = jasmine.createSpy('test');
  111. const test1 = jasmine.createSpy('test1');
  112. em.addEventListener(window, 'touchend', test);
  113. em.addEventListener(window, 'touchend', test1);
  114. em.addEventListener(window, 'touchend', test1);
  115. em.fireEvent(window, 'touchend');
  116. expect(test.calls.count()).toEqual(1);
  117. expect(test1.calls.count()).toEqual(2);
  118. em.fireEvent(window, 'touchend');
  119. expect(test.calls.count()).toEqual(2);
  120. expect(test1.calls.count()).toEqual(4);
  121. em.clear(window, 'touchend');
  122. });
  123. it('should remove event by calling function returned from addEvent', () => {
  124. const instance = {};
  125. const em = new EventManager(instance);
  126. const test = jasmine.createSpy('test');
  127. const clickRemoveEvent = em.addEventListener(window, 'click', test);
  128. em.fireEvent(window, 'click');
  129. expect(test.calls.count()).toEqual(1);
  130. expect(instance.eventListeners.length).toEqual(1);
  131. clickRemoveEvent();
  132. expect(test.calls.count()).toEqual(1);
  133. expect(instance.eventListeners.length).toEqual(0);
  134. });
  135. });