Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/api/test/browser/mainThreadDocumentContentProviders.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
6
import assert from 'assert';
7
import { URI } from '../../../../base/common/uri.js';
8
import { MainThreadDocumentContentProviders } from '../../browser/mainThreadDocumentContentProviders.js';
9
import { createTextModel } from '../../../../editor/test/common/testTextModel.js';
10
import { mock } from '../../../../base/test/common/mock.js';
11
import { IModelService } from '../../../../editor/common/services/model.js';
12
import { IEditorWorkerService } from '../../../../editor/common/services/editorWorker.js';
13
import { TestRPCProtocol } from '../common/testRPCProtocol.js';
14
import { TextEdit } from '../../../../editor/common/languages.js';
15
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';
16
17
suite('MainThreadDocumentContentProviders', function () {
18
19
const store = ensureNoDisposablesAreLeakedInTestSuite();
20
21
test('events are processed properly', function () {
22
23
const uri = URI.parse('test:uri');
24
const model = createTextModel('1', undefined, undefined, uri);
25
26
const providers = new MainThreadDocumentContentProviders(new TestRPCProtocol(), null!, null!,
27
new class extends mock<IModelService>() {
28
override getModel(_uri: URI) {
29
assert.strictEqual(uri.toString(), _uri.toString());
30
return model;
31
}
32
},
33
new class extends mock<IEditorWorkerService>() {
34
override computeMoreMinimalEdits(_uri: URI, data: TextEdit[] | undefined) {
35
assert.strictEqual(model.getValue(), '1');
36
return Promise.resolve(data);
37
}
38
},
39
);
40
41
store.add(model);
42
store.add(providers);
43
44
return new Promise<void>((resolve, reject) => {
45
let expectedEvents = 1;
46
store.add(model.onDidChangeContent(e => {
47
expectedEvents -= 1;
48
try {
49
assert.ok(expectedEvents >= 0);
50
} catch (err) {
51
reject(err);
52
}
53
if (model.getValue() === '1\n2\n3') {
54
model.dispose();
55
resolve();
56
}
57
}));
58
providers.$onVirtualDocumentChange(uri, '1\n2');
59
providers.$onVirtualDocumentChange(uri, '1\n2\n3');
60
});
61
});
62
});
63
64