Path: blob/main/src/vs/platform/accessibility/test/browser/accessibilityService.test.ts
13401 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import assert from 'assert';6import { Event } from '../../../../base/common/event.js';7import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';8import { TestInstantiationService } from '../../../instantiation/test/common/instantiationServiceMock.js';9import { IConfigurationService, IConfigurationChangeEvent } from '../../../configuration/common/configuration.js';10import { TestConfigurationService } from '../../../configuration/test/common/testConfigurationService.js';11import { IContextKeyService } from '../../../contextkey/common/contextkey.js';12import { MockContextKeyService } from '../../../keybinding/test/common/mockKeybindingService.js';13import { ILayoutService } from '../../../layout/browser/layoutService.js';14import { AccessibilityService } from '../../browser/accessibilityService.js';1516suite('AccessibilityService', () => {17const store = ensureNoDisposablesAreLeakedInTestSuite();18let configurationService: TestConfigurationService;19let container: HTMLElement;2021function createService(config: Record<string, unknown> = {}): AccessibilityService {22const instantiationService = store.add(new TestInstantiationService());2324configurationService = new TestConfigurationService({25'editor.accessibilitySupport': 'off',26'workbench.reduceMotion': 'off',27'workbench.reduceTransparency': 'off',28'accessibility.underlineLinks': false,29...config,30});31instantiationService.stub(IConfigurationService, configurationService);3233instantiationService.stub(IContextKeyService, store.add(new MockContextKeyService()));3435container = document.createElement('div');36instantiationService.stub(ILayoutService, {37mainContainer: container,38activeContainer: container,39getContainer() { return container; },40onDidLayoutContainer: Event.None,41});4243return store.add(instantiationService.createInstance(AccessibilityService));44}4546suite('isTransparencyReduced', () => {4748test('returns false when config is off', () => {49const service = createService({ 'workbench.reduceTransparency': 'off' });50assert.strictEqual(service.isTransparencyReduced(), false);51});5253test('returns true when config is on', () => {54const service = createService({ 'workbench.reduceTransparency': 'on' });55assert.strictEqual(service.isTransparencyReduced(), true);56});5758test('adds CSS class when config is on', () => {59createService({ 'workbench.reduceTransparency': 'on' });60assert.strictEqual(container.classList.contains('monaco-reduce-transparency'), true);61});6263test('does not add CSS class when config is off', () => {64createService({ 'workbench.reduceTransparency': 'off' });65assert.strictEqual(container.classList.contains('monaco-reduce-transparency'), false);66});6768test('fires event and updates class on config change', () => {69const service = createService({ 'workbench.reduceTransparency': 'off' });70assert.strictEqual(service.isTransparencyReduced(), false);7172let fired = false;73store.add(service.onDidChangeReducedTransparency(() => { fired = true; }));7475// Simulate config change76configurationService.setUserConfiguration('workbench.reduceTransparency', 'on');77configurationService.onDidChangeConfigurationEmitter.fire({78affectsConfiguration(id: string) { return id === 'workbench.reduceTransparency'; },79} satisfies Partial<IConfigurationChangeEvent> as unknown as IConfigurationChangeEvent);8081assert.strictEqual(fired, true);82assert.strictEqual(service.isTransparencyReduced(), true);83assert.strictEqual(container.classList.contains('monaco-reduce-transparency'), true);84});85});8687suite('isMotionReduced', () => {8889test('returns false when config is off', () => {90const service = createService({ 'workbench.reduceMotion': 'off' });91assert.strictEqual(service.isMotionReduced(), false);92});9394test('returns true when config is on', () => {95const service = createService({ 'workbench.reduceMotion': 'on' });96assert.strictEqual(service.isMotionReduced(), true);97});9899test('adds CSS classes when config is on', () => {100createService({ 'workbench.reduceMotion': 'on' });101assert.strictEqual(container.classList.contains('monaco-reduce-motion'), true);102assert.strictEqual(container.classList.contains('monaco-enable-motion'), false);103});104105test('adds CSS classes when config is off', () => {106createService({ 'workbench.reduceMotion': 'off' });107assert.strictEqual(container.classList.contains('monaco-reduce-motion'), false);108assert.strictEqual(container.classList.contains('monaco-enable-motion'), true);109});110});111});112113114