Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/platform/accessibility/test/browser/accessibilityService.test.ts
13401 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 { Event } from '../../../../base/common/event.js';
8
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';
9
import { TestInstantiationService } from '../../../instantiation/test/common/instantiationServiceMock.js';
10
import { IConfigurationService, IConfigurationChangeEvent } from '../../../configuration/common/configuration.js';
11
import { TestConfigurationService } from '../../../configuration/test/common/testConfigurationService.js';
12
import { IContextKeyService } from '../../../contextkey/common/contextkey.js';
13
import { MockContextKeyService } from '../../../keybinding/test/common/mockKeybindingService.js';
14
import { ILayoutService } from '../../../layout/browser/layoutService.js';
15
import { AccessibilityService } from '../../browser/accessibilityService.js';
16
17
suite('AccessibilityService', () => {
18
const store = ensureNoDisposablesAreLeakedInTestSuite();
19
let configurationService: TestConfigurationService;
20
let container: HTMLElement;
21
22
function createService(config: Record<string, unknown> = {}): AccessibilityService {
23
const instantiationService = store.add(new TestInstantiationService());
24
25
configurationService = new TestConfigurationService({
26
'editor.accessibilitySupport': 'off',
27
'workbench.reduceMotion': 'off',
28
'workbench.reduceTransparency': 'off',
29
'accessibility.underlineLinks': false,
30
...config,
31
});
32
instantiationService.stub(IConfigurationService, configurationService);
33
34
instantiationService.stub(IContextKeyService, store.add(new MockContextKeyService()));
35
36
container = document.createElement('div');
37
instantiationService.stub(ILayoutService, {
38
mainContainer: container,
39
activeContainer: container,
40
getContainer() { return container; },
41
onDidLayoutContainer: Event.None,
42
});
43
44
return store.add(instantiationService.createInstance(AccessibilityService));
45
}
46
47
suite('isTransparencyReduced', () => {
48
49
test('returns false when config is off', () => {
50
const service = createService({ 'workbench.reduceTransparency': 'off' });
51
assert.strictEqual(service.isTransparencyReduced(), false);
52
});
53
54
test('returns true when config is on', () => {
55
const service = createService({ 'workbench.reduceTransparency': 'on' });
56
assert.strictEqual(service.isTransparencyReduced(), true);
57
});
58
59
test('adds CSS class when config is on', () => {
60
createService({ 'workbench.reduceTransparency': 'on' });
61
assert.strictEqual(container.classList.contains('monaco-reduce-transparency'), true);
62
});
63
64
test('does not add CSS class when config is off', () => {
65
createService({ 'workbench.reduceTransparency': 'off' });
66
assert.strictEqual(container.classList.contains('monaco-reduce-transparency'), false);
67
});
68
69
test('fires event and updates class on config change', () => {
70
const service = createService({ 'workbench.reduceTransparency': 'off' });
71
assert.strictEqual(service.isTransparencyReduced(), false);
72
73
let fired = false;
74
store.add(service.onDidChangeReducedTransparency(() => { fired = true; }));
75
76
// Simulate config change
77
configurationService.setUserConfiguration('workbench.reduceTransparency', 'on');
78
configurationService.onDidChangeConfigurationEmitter.fire({
79
affectsConfiguration(id: string) { return id === 'workbench.reduceTransparency'; },
80
} satisfies Partial<IConfigurationChangeEvent> as unknown as IConfigurationChangeEvent);
81
82
assert.strictEqual(fired, true);
83
assert.strictEqual(service.isTransparencyReduced(), true);
84
assert.strictEqual(container.classList.contains('monaco-reduce-transparency'), true);
85
});
86
});
87
88
suite('isMotionReduced', () => {
89
90
test('returns false when config is off', () => {
91
const service = createService({ 'workbench.reduceMotion': 'off' });
92
assert.strictEqual(service.isMotionReduced(), false);
93
});
94
95
test('returns true when config is on', () => {
96
const service = createService({ 'workbench.reduceMotion': 'on' });
97
assert.strictEqual(service.isMotionReduced(), true);
98
});
99
100
test('adds CSS classes when config is on', () => {
101
createService({ 'workbench.reduceMotion': 'on' });
102
assert.strictEqual(container.classList.contains('monaco-reduce-motion'), true);
103
assert.strictEqual(container.classList.contains('monaco-enable-motion'), false);
104
});
105
106
test('adds CSS classes when config is off', () => {
107
createService({ 'workbench.reduceMotion': 'off' });
108
assert.strictEqual(container.classList.contains('monaco-reduce-motion'), false);
109
assert.strictEqual(container.classList.contains('monaco-enable-motion'), true);
110
});
111
});
112
});
113
114