Files
code-server/lib/vscode/src/vs/base/test/common/cancellation.test.ts
Joe Previte eae5d8c807 chore(vscode): update to 1.53.2
These conflicts will be resolved in the following commits. We do it this way so
that PR review is possible.
2021-02-25 11:27:27 -07:00

127 lines
3.2 KiB
TypeScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as assert from 'assert';
import { CancellationTokenSource, CancellationToken } from 'vs/base/common/cancellation';
suite('CancellationToken', function () {
test('None', () => {
assert.strictEqual(CancellationToken.None.isCancellationRequested, false);
assert.strictEqual(typeof CancellationToken.None.onCancellationRequested, 'function');
});
test('cancel before token', function (done) {
const source = new CancellationTokenSource();
assert.strictEqual(source.token.isCancellationRequested, false);
source.cancel();
assert.strictEqual(source.token.isCancellationRequested, true);
source.token.onCancellationRequested(function () {
assert.ok(true);
done();
});
});
test('cancel happens only once', function () {
let source = new CancellationTokenSource();
assert.strictEqual(source.token.isCancellationRequested, false);
let cancelCount = 0;
function onCancel() {
cancelCount += 1;
}
source.token.onCancellationRequested(onCancel);
source.cancel();
source.cancel();
assert.strictEqual(cancelCount, 1);
});
test('cancel calls all listeners', function () {
let count = 0;
let source = new CancellationTokenSource();
source.token.onCancellationRequested(function () {
count += 1;
});
source.token.onCancellationRequested(function () {
count += 1;
});
source.token.onCancellationRequested(function () {
count += 1;
});
source.cancel();
assert.strictEqual(count, 3);
});
test('token stays the same', function () {
let source = new CancellationTokenSource();
let token = source.token;
assert.ok(token === source.token); // doesn't change on get
source.cancel();
assert.ok(token === source.token); // doesn't change after cancel
source.cancel();
assert.ok(token === source.token); // doesn't change after 2nd cancel
source = new CancellationTokenSource();
source.cancel();
token = source.token;
assert.ok(token === source.token); // doesn't change on get
});
test('dispose calls no listeners', function () {
let count = 0;
let source = new CancellationTokenSource();
source.token.onCancellationRequested(function () {
count += 1;
});
source.dispose();
source.cancel();
assert.strictEqual(count, 0);
});
test('dispose calls no listeners (unless told to cancel)', function () {
let count = 0;
let source = new CancellationTokenSource();
source.token.onCancellationRequested(function () {
count += 1;
});
source.dispose(true);
// source.cancel();
assert.strictEqual(count, 1);
});
test('parent cancels child', function () {
let parent = new CancellationTokenSource();
let child = new CancellationTokenSource(parent.token);
let count = 0;
child.token.onCancellationRequested(() => count += 1);
parent.cancel();
assert.strictEqual(count, 1);
assert.strictEqual(child.token.isCancellationRequested, true);
assert.strictEqual(parent.token.isCancellationRequested, true);
});
});