Merge pull request #2767 from JavaCS3/fix/addDisposableDomListener-leak

fix: addDisposableDomListener dispose() leaking
This commit is contained in:
Daniel Imms
2020-03-23 06:42:22 -07:00
committed by GitHub
2 changed files with 41 additions and 1 deletions
+40
View File
@@ -0,0 +1,40 @@
/**
* Copyright (c) 2020 The xterm.js authors. All rights reserved.
* @license MIT
*/
import { assert } from 'chai';
import { addDisposableDomListener } from './Lifecycle';
import jsdom = require('jsdom');
describe('addDisposableDomListener', () => {
const dom = new jsdom.JSDOM();
const document = dom.window.document;
function createEvent(type: string): Event {
const event = document.createEvent('Event');
event.initEvent(type);
return event;
}
it('dispose', () => {
let calledTimes = 0;
const div = document.createElement('div');
const disposable = addDisposableDomListener(div, 'test', () => { calledTimes++; });
assert.equal(calledTimes, 0);
div.dispatchEvent(createEvent('test'));
assert.equal(calledTimes, 1);
disposable.dispose();
div.dispatchEvent(createEvent('test'));
assert.equal(calledTimes, 1);
disposable.dispose(); // double disposing
div.dispatchEvent(createEvent('test'));
assert.equal(calledTimes, 1);
});
});
+1 -1
View File
@@ -20,7 +20,7 @@ export function addDisposableDomListener(
let disposed = false;
return {
dispose: () => {
if (!disposed) {
if (disposed) {
return;
}
disposed = true;