Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/editor/test/common/modes/languageConfiguration.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 { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';
8
import { StandardTokenType } from '../../../common/encodedTokenAttributes.js';
9
import { StandardAutoClosingPairConditional } from '../../../common/languages/languageConfiguration.js';
10
import { TestLanguageConfigurationService } from './testLanguageConfigurationService.js';
11
12
suite('StandardAutoClosingPairConditional', () => {
13
14
ensureNoDisposablesAreLeakedInTestSuite();
15
16
test('Missing notIn', () => {
17
const v = new StandardAutoClosingPairConditional({ open: '{', close: '}' });
18
assert.strictEqual(v.isOK(StandardTokenType.Other), true);
19
assert.strictEqual(v.isOK(StandardTokenType.Comment), true);
20
assert.strictEqual(v.isOK(StandardTokenType.String), true);
21
assert.strictEqual(v.isOK(StandardTokenType.RegEx), true);
22
});
23
24
test('Empty notIn', () => {
25
const v = new StandardAutoClosingPairConditional({ open: '{', close: '}', notIn: [] });
26
assert.strictEqual(v.isOK(StandardTokenType.Other), true);
27
assert.strictEqual(v.isOK(StandardTokenType.Comment), true);
28
assert.strictEqual(v.isOK(StandardTokenType.String), true);
29
assert.strictEqual(v.isOK(StandardTokenType.RegEx), true);
30
});
31
32
test('Invalid notIn', () => {
33
const v = new StandardAutoClosingPairConditional({ open: '{', close: '}', notIn: ['bla'] });
34
assert.strictEqual(v.isOK(StandardTokenType.Other), true);
35
assert.strictEqual(v.isOK(StandardTokenType.Comment), true);
36
assert.strictEqual(v.isOK(StandardTokenType.String), true);
37
assert.strictEqual(v.isOK(StandardTokenType.RegEx), true);
38
});
39
40
test('notIn in strings', () => {
41
const v = new StandardAutoClosingPairConditional({ open: '{', close: '}', notIn: ['string'] });
42
assert.strictEqual(v.isOK(StandardTokenType.Other), true);
43
assert.strictEqual(v.isOK(StandardTokenType.Comment), true);
44
assert.strictEqual(v.isOK(StandardTokenType.String), false);
45
assert.strictEqual(v.isOK(StandardTokenType.RegEx), true);
46
});
47
48
test('notIn in comments', () => {
49
const v = new StandardAutoClosingPairConditional({ open: '{', close: '}', notIn: ['comment'] });
50
assert.strictEqual(v.isOK(StandardTokenType.Other), true);
51
assert.strictEqual(v.isOK(StandardTokenType.Comment), false);
52
assert.strictEqual(v.isOK(StandardTokenType.String), true);
53
assert.strictEqual(v.isOK(StandardTokenType.RegEx), true);
54
});
55
56
test('notIn in regex', () => {
57
const v = new StandardAutoClosingPairConditional({ open: '{', close: '}', notIn: ['regex'] });
58
assert.strictEqual(v.isOK(StandardTokenType.Other), true);
59
assert.strictEqual(v.isOK(StandardTokenType.Comment), true);
60
assert.strictEqual(v.isOK(StandardTokenType.String), true);
61
assert.strictEqual(v.isOK(StandardTokenType.RegEx), false);
62
});
63
64
test('notIn in strings nor comments', () => {
65
const v = new StandardAutoClosingPairConditional({ open: '{', close: '}', notIn: ['string', 'comment'] });
66
assert.strictEqual(v.isOK(StandardTokenType.Other), true);
67
assert.strictEqual(v.isOK(StandardTokenType.Comment), false);
68
assert.strictEqual(v.isOK(StandardTokenType.String), false);
69
assert.strictEqual(v.isOK(StandardTokenType.RegEx), true);
70
});
71
72
test('notIn in strings nor regex', () => {
73
const v = new StandardAutoClosingPairConditional({ open: '{', close: '}', notIn: ['string', 'regex'] });
74
assert.strictEqual(v.isOK(StandardTokenType.Other), true);
75
assert.strictEqual(v.isOK(StandardTokenType.Comment), true);
76
assert.strictEqual(v.isOK(StandardTokenType.String), false);
77
assert.strictEqual(v.isOK(StandardTokenType.RegEx), false);
78
});
79
80
test('notIn in comments nor regex', () => {
81
const v = new StandardAutoClosingPairConditional({ open: '{', close: '}', notIn: ['comment', 'regex'] });
82
assert.strictEqual(v.isOK(StandardTokenType.Other), true);
83
assert.strictEqual(v.isOK(StandardTokenType.Comment), false);
84
assert.strictEqual(v.isOK(StandardTokenType.String), true);
85
assert.strictEqual(v.isOK(StandardTokenType.RegEx), false);
86
});
87
88
test('notIn in strings, comments nor regex', () => {
89
const v = new StandardAutoClosingPairConditional({ open: '{', close: '}', notIn: ['string', 'comment', 'regex'] });
90
assert.strictEqual(v.isOK(StandardTokenType.Other), true);
91
assert.strictEqual(v.isOK(StandardTokenType.Comment), false);
92
assert.strictEqual(v.isOK(StandardTokenType.String), false);
93
assert.strictEqual(v.isOK(StandardTokenType.RegEx), false);
94
});
95
96
test('language configurations priorities', () => {
97
const languageConfigurationService = new TestLanguageConfigurationService();
98
const id = 'testLang1';
99
const d1 = languageConfigurationService.register(id, { comments: { lineComment: '1' } }, 100);
100
const d2 = languageConfigurationService.register(id, { comments: { lineComment: '2' } }, 10);
101
assert.strictEqual(languageConfigurationService.getLanguageConfiguration(id).comments?.lineCommentToken, '1');
102
d1.dispose();
103
d2.dispose();
104
languageConfigurationService.dispose();
105
});
106
});
107
108