Skip to content

Commit 3de6bc7

Browse files
committed
add test for automated encoding change on language change
1 parent eeb9632 commit 3de6bc7

File tree

2 files changed

+45
-2
lines changed

2 files changed

+45
-2
lines changed

src/vs/platform/configuration/test/common/testConfigurationService.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,19 @@ export class TestConfigurationService implements IConfigurationService {
5858
return Promise.resolve(undefined);
5959
}
6060

61+
private overrideIdentifiers: Map<string, string[]> = new Map();
62+
public setOverrideIdentifiers(key: string, identifiers: string[]): void {
63+
this.overrideIdentifiers.set(key, identifiers);
64+
}
65+
6166
public inspect<T>(key: string, overrides?: IConfigurationOverrides): IConfigurationValue<T> {
6267
const config = this.getValue(undefined, overrides);
6368

6469
return {
6570
value: getConfigurationValue<T>(config, key),
6671
defaultValue: getConfigurationValue<T>(config, key),
67-
userValue: getConfigurationValue<T>(config, key)
72+
userValue: getConfigurationValue<T>(config, key),
73+
overrideIdentifiers: this.overrideIdentifiers.get(key)
6874
};
6975
}
7076

src/vs/workbench/services/textfile/test/browser/textFileEditorModel.test.ts

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { createFileEditorInput, workbenchInstantiationService, TestServiceAccess
1111
import { toResource } from 'vs/base/test/common/utils';
1212
import { TextFileEditorModelManager } from 'vs/workbench/services/textfile/common/textFileEditorModelManager';
1313
import { FileOperationResult, FileOperationError } from 'vs/platform/files/common/files';
14-
import { timeout } from 'vs/base/common/async';
14+
import { DeferredPromise, timeout } from 'vs/base/common/async';
1515
import { ModesRegistry } from 'vs/editor/common/languages/modesRegistry';
1616
import { assertIsDefined } from 'vs/base/common/types';
1717
import { createTextBufferFactory, createTextBufferFactoryFromStream } from 'vs/editor/common/model/textModel';
@@ -20,6 +20,8 @@ import { URI } from 'vs/base/common/uri';
2020
import { bufferToStream, VSBuffer } from 'vs/base/common/buffer';
2121
import { DisposableStore } from 'vs/base/common/lifecycle';
2222
import { SaveReason, SaveSourceRegistry } from 'vs/workbench/common/editor';
23+
import { isEqual } from 'vs/base/common/resources';
24+
import { UTF16be } from 'vs/workbench/services/textfile/common/encoding';
2325

2426
suite('Files - TextFileEditorModel', () => {
2527

@@ -330,6 +332,41 @@ suite('Files - TextFileEditorModel', () => {
330332
model.dispose();
331333
});
332334

335+
test('encoding updates with language based configuration', async function () {
336+
const languageId = 'text-file-model-test';
337+
ModesRegistry.registerLanguage({
338+
id: languageId,
339+
});
340+
341+
accessor.testConfigurationService.setOverrideIdentifiers('files.encoding', [languageId]);
342+
343+
const model: TextFileEditorModel = instantiationService.createInstance(TextFileEditorModel, toResource.call(this, '/path/index_async.txt'), 'utf8', undefined);
344+
accessor.workingCopyService.unregisterWorkingCopy(model); // causes issues with subsequent resolves otherwise
345+
346+
await model.resolve();
347+
348+
const deferredPromise = new DeferredPromise<TextFileEditorModel>();
349+
350+
// We use this listener as a way to figure out that the working
351+
// copy was resolved again as part of the language change
352+
const listener = accessor.workingCopyService.onDidRegister(e => {
353+
if (isEqual(e.resource, model.resource)) {
354+
deferredPromise.complete(model as TextFileEditorModel);
355+
}
356+
});
357+
358+
accessor.testConfigurationService.setUserConfiguration('files.encoding', UTF16be);
359+
360+
model.setLanguageId(languageId);
361+
362+
await deferredPromise.p;
363+
364+
assert.strictEqual(model.getEncoding(), UTF16be);
365+
366+
model.dispose();
367+
listener.dispose();
368+
});
369+
333370
test('create with language', async function () {
334371
const languageId = 'text-file-model-test';
335372
ModesRegistry.registerLanguage({

0 commit comments

Comments
 (0)