fix: addDisposableDomListener dispose() leaking

This commit is contained in:
javacs3
2020-03-22 12:56:50 +08:00
parent bc9aaebd04
commit 1b857f743e
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;