EventManager.spec.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. import EventManager from 'handsontable/eventManager';
  2. describe('EventManager', () => {
  3. it('should add/remove/clear event for multiple instances', () => {
  4. var instance = {
  5. subinstance: {}
  6. };
  7. var instance2 = {};
  8. var eM0 = new EventManager(instance);
  9. var eM1 = new EventManager(instance.subinstance);
  10. var eM2 = new EventManager(instance2);
  11. expect(instance.eventListeners.length).toEqual(0);
  12. var test = function() {};
  13. var 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. var instance = {};
  39. var em = new EventManager(instance);
  40. var classicHost = document.createElement('div');
  41. var hotTable = document.createElement('hot-table');
  42. var shadowHotTable = hotTable.createShadowRoot();
  43. shadowHotTable.innerHTML = '<span>shadow <inner-custom><p></p></inner-custom></span>';
  44. var test1 = jasmine.createSpy('test1');
  45. var 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. var instance = {};
  59. var em = new EventManager(instance);
  60. var test = jasmine.createSpy('test');
  61. var 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. var instance = {};
  75. var em = new EventManager(instance);
  76. var test = jasmine.createSpy('test');
  77. var 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. var instance = {};
  93. var em = new EventManager(instance);
  94. var test = jasmine.createSpy('test');
  95. var 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 remove event by calling function returned from addEvent', () => {
  108. var instance = {};
  109. var em = new EventManager(instance);
  110. var test = jasmine.createSpy('test');
  111. var clickRemoveEvent = em.addEventListener(window, 'click', test);
  112. em.fireEvent(window, 'click');
  113. expect(test.calls.count()).toEqual(1);
  114. expect(instance.eventListeners.length).toEqual(1);
  115. clickRemoveEvent();
  116. expect(test.calls.count()).toEqual(1);
  117. expect(instance.eventListeners.length).toEqual(0);
  118. });
  119. });