Skip to content

Commit dd2a304

Browse files
WIP. check test for click subscription in events_engine (T1307313)"
This reverts commit d0d18c3.
1 parent db43b84 commit dd2a304

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

packages/devextreme/testing/tests/DevExpress.ui.events/event_nodes_disposing.tests.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import eventsEngine from 'common/core/events/core/events_engine';
2+
import domAdapter from '__internal/core/m_dom_adapter';
23
import { removeEvent } from 'common/core/events/remove';
34
import {
45
subscribeNodesDisposing,
@@ -16,7 +17,8 @@ QUnit.testStart(function() {
1617
QUnit.module('event nodes disposing');
1718

1819
QUnit.test('should not leave extra handlers in elementDataMap when using subscribeNodesDisposing and unsubscribeNodesDisposing for click on document', function(assert) {
19-
const clickEventName = 'click';
20+
const clickEventName = 'dxclick';
21+
const document = domAdapter.getDocument();
2022
const testElement = document.getElementById('test-element');
2123

2224
// Get initial state of handleObjects for click event on document

packages/devextreme/testing/tests/DevExpress.ui.events/eventsEngine.tests.js

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import $ from 'jquery';
2+
import domAdapter from '__internal/core/m_dom_adapter';
23
import eventsEngine from 'common/core/events/core/events_engine';
34
import keyboardMock from '../../helpers/keyboardMock.js';
45
import registerEvent from 'common/core/events/core/event_registrator';
@@ -568,7 +569,7 @@ QUnit.test('removeEventListener should not be called if native handler is not ex
568569
delListener.restore();
569570
});
570571

571-
QUnit.module('Memory');
572+
QUnit.module('Memory bugs');
572573

573574
QUnit.test('removing subscriptions should remove data from elementDataMap', function(assert) {
574575
const div = document.createElement('div');
@@ -591,6 +592,33 @@ QUnit.test('removing subscriptions should not remove data from elementDataMap if
591592
assert.equal(eventsEngine.elementDataMap.has(div), hasData);
592593
});
593594

595+
QUnit.test('should not leak memory when subscribing on document and clicking elements (T1307313)', function(assert) {
596+
const clickEventName = 'dxclick';
597+
const document = domAdapter.getDocument();
598+
const fixture = document.getElementById('qunit-fixture');
599+
600+
fixture.innerHTML = '<button id="test-element">Test</button>';
601+
602+
const testElement = document.getElementById('test-element');
603+
604+
eventsEngine.on(document, clickEventName, () => {});
605+
606+
for(let i = 0; i < 100; i++) {
607+
testElement.click();
608+
}
609+
610+
const eventData = eventsEngine.elementDataMap.get(document);
611+
612+
const count = Object.keys(eventData).reduce((res, key) => res + eventData[key].handleObjects?.length, 0);
613+
614+
assert.ok(
615+
eventData?.length <= 5,
616+
`Memory should not leak. Element data: ${count}, ${Object.keys(eventData)}, ${eventsEngine.elementDataMap.size}`
617+
);
618+
619+
eventsEngine.off(document);
620+
});
621+
594622
QUnit.module('Strategy');
595623

596624
QUnit.test('it should be possible to set only one method for strategy', function(assert) {

0 commit comments

Comments
 (0)