Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/base/test/common/cancellation.test.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
import assert from 'assert';
6
import { CancellationToken, CancellationTokenSource } from '../../common/cancellation.js';
7
import { ensureNoDisposablesAreLeakedInTestSuite } from './utils.js';
8
9
suite('CancellationToken', function () {
10
11
const store = ensureNoDisposablesAreLeakedInTestSuite();
12
13
test('None', () => {
14
assert.strictEqual(CancellationToken.None.isCancellationRequested, false);
15
assert.strictEqual(typeof CancellationToken.None.onCancellationRequested, 'function');
16
});
17
18
test('cancel before token', function () {
19
20
const source = new CancellationTokenSource();
21
assert.strictEqual(source.token.isCancellationRequested, false);
22
source.cancel();
23
24
assert.strictEqual(source.token.isCancellationRequested, true);
25
26
return new Promise<void>(resolve => {
27
source.token.onCancellationRequested(() => resolve());
28
});
29
});
30
31
test('cancel happens only once', function () {
32
33
const source = new CancellationTokenSource();
34
assert.strictEqual(source.token.isCancellationRequested, false);
35
36
let cancelCount = 0;
37
function onCancel() {
38
cancelCount += 1;
39
}
40
41
store.add(source.token.onCancellationRequested(onCancel));
42
43
source.cancel();
44
source.cancel();
45
46
assert.strictEqual(cancelCount, 1);
47
});
48
49
test('cancel calls all listeners', function () {
50
51
let count = 0;
52
53
const source = new CancellationTokenSource();
54
store.add(source.token.onCancellationRequested(() => count++));
55
store.add(source.token.onCancellationRequested(() => count++));
56
store.add(source.token.onCancellationRequested(() => count++));
57
58
source.cancel();
59
assert.strictEqual(count, 3);
60
});
61
62
test('token stays the same', function () {
63
64
let source = new CancellationTokenSource();
65
let token = source.token;
66
assert.ok(token === source.token); // doesn't change on get
67
68
source.cancel();
69
assert.ok(token === source.token); // doesn't change after cancel
70
71
source.cancel();
72
assert.ok(token === source.token); // doesn't change after 2nd cancel
73
74
source = new CancellationTokenSource();
75
source.cancel();
76
token = source.token;
77
assert.ok(token === source.token); // doesn't change on get
78
});
79
80
test('dispose calls no listeners', function () {
81
82
let count = 0;
83
84
const source = new CancellationTokenSource();
85
store.add(source.token.onCancellationRequested(() => count++));
86
87
source.dispose();
88
source.cancel();
89
assert.strictEqual(count, 0);
90
});
91
92
test('dispose calls no listeners (unless told to cancel)', function () {
93
94
let count = 0;
95
96
const source = new CancellationTokenSource();
97
store.add(source.token.onCancellationRequested(() => count++));
98
99
source.dispose(true);
100
// source.cancel();
101
assert.strictEqual(count, 1);
102
});
103
104
test('dispose does not cancel', function () {
105
const source = new CancellationTokenSource();
106
source.dispose();
107
assert.strictEqual(source.token.isCancellationRequested, false);
108
});
109
110
test('parent cancels child', function () {
111
112
const parent = new CancellationTokenSource();
113
const child = new CancellationTokenSource(parent.token);
114
115
let count = 0;
116
store.add(child.token.onCancellationRequested(() => count++));
117
118
parent.cancel();
119
120
assert.strictEqual(count, 1);
121
assert.strictEqual(child.token.isCancellationRequested, true);
122
assert.strictEqual(parent.token.isCancellationRequested, true);
123
124
child.dispose();
125
parent.dispose();
126
});
127
});
128
129