@@ -11,7 +11,7 @@ import { createFileEditorInput, workbenchInstantiationService, TestServiceAccess
11
11
import { toResource } from 'vs/base/test/common/utils' ;
12
12
import { TextFileEditorModelManager } from 'vs/workbench/services/textfile/common/textFileEditorModelManager' ;
13
13
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' ;
15
15
import { ModesRegistry } from 'vs/editor/common/languages/modesRegistry' ;
16
16
import { assertIsDefined } from 'vs/base/common/types' ;
17
17
import { createTextBufferFactory , createTextBufferFactoryFromStream } from 'vs/editor/common/model/textModel' ;
@@ -20,6 +20,8 @@ import { URI } from 'vs/base/common/uri';
20
20
import { bufferToStream , VSBuffer } from 'vs/base/common/buffer' ;
21
21
import { DisposableStore } from 'vs/base/common/lifecycle' ;
22
22
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' ;
23
25
24
26
suite ( 'Files - TextFileEditorModel' , ( ) => {
25
27
@@ -330,6 +332,41 @@ suite('Files - TextFileEditorModel', () => {
330
332
model . dispose ( ) ;
331
333
} ) ;
332
334
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
+
333
370
test ( 'create with language' , async function ( ) {
334
371
const languageId = 'text-file-model-test' ;
335
372
ModesRegistry . registerLanguage ( {
0 commit comments