@@ -297,7 +297,7 @@ suite('Files - TextFileService i/o', () => {
297297 await service . write ( resource , content ) ;
298298
299299 const resolved = await service . read ( resource ) ;
300- assert . equal ( snapshotToString ( resolved . value . create ( isWindows ? DefaultEndOfLine . CRLF : DefaultEndOfLine . LF ) . createSnapshot ( false ) ) , content ) ;
300+ assert . equal ( resolved . value . getFirstLineText ( 999999 ) , content ) ;
301301 } ) ;
302302
303303 test ( 'write - no encoding - content as snapshot' , async ( ) => {
@@ -308,7 +308,7 @@ suite('Files - TextFileService i/o', () => {
308308 await service . write ( resource , TextModel . createFromString ( content ) . createSnapshot ( ) ) ;
309309
310310 const resolved = await service . read ( resource ) ;
311- assert . equal ( snapshotToString ( resolved . value . create ( isWindows ? DefaultEndOfLine . CRLF : DefaultEndOfLine . LF ) . createSnapshot ( false ) ) , content ) ;
311+ assert . equal ( resolved . value . getFirstLineText ( 999999 ) , content ) ;
312312 } ) ;
313313
314314 test ( 'write - encoding preserved (UTF 16 LE) - content as string' , async ( ) => {
@@ -426,6 +426,14 @@ suite('Files - TextFileService i/o', () => {
426426 await testReadFile ( resource ) ;
427427 } ) ;
428428
429+ async function testReadFile ( resource : URI ) : Promise < void > {
430+ const result = await service . read ( resource ) ;
431+
432+ assert . equal ( result . name , basename ( resource . fsPath ) ) ;
433+ assert . equal ( result . size , statSync ( resource . fsPath ) . size ) ;
434+ assert . equal ( snapshotToString ( result . value . create ( DefaultEndOfLine . LF ) . createSnapshot ( false ) ) , snapshotToString ( TextModel . createFromString ( readFileSync ( resource . fsPath ) . toString ( ) ) . createSnapshot ( false ) ) ) ;
435+ }
436+
429437 test ( 'read - encoding picked up (CP1252)' , async ( ) => {
430438 const resource = URI . file ( join ( testDir , 'some_small_cp1252.txt' ) ) ;
431439 const encoding = 'windows1252' ;
@@ -464,12 +472,48 @@ suite('Files - TextFileService i/o', () => {
464472 assert . equal ( result . value . getFirstLineText ( 999999 ) , 'This is some UTF 16 with BOM file.' ) ;
465473 } ) ;
466474
467- async function testReadFile ( resource : URI ) : Promise < void > {
468- const result = await service . read ( resource ) ;
475+ test ( 'read - large Big5' , async ( ) => {
476+ await testLargeEncoding ( 'big5' , '中文abc' ) ;
477+ } ) ;
469478
470- assert . equal ( result . name , basename ( resource . fsPath ) ) ;
471- assert . equal ( result . size , statSync ( resource . fsPath ) . size ) ;
472- assert . equal ( snapshotToString ( result . value . create ( DefaultEndOfLine . LF ) . createSnapshot ( false ) ) , snapshotToString ( TextModel . createFromString ( readFileSync ( resource . fsPath ) . toString ( ) ) . createSnapshot ( false ) ) ) ;
479+ test ( 'read - large CP1252' , async ( ) => {
480+ await testLargeEncoding ( 'cp1252' , 'öäüß' ) ;
481+ } ) ;
482+
483+ test ( 'read - large Cyrillic' , async ( ) => {
484+ await testLargeEncoding ( 'cp866' , 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя' ) ;
485+ } ) ;
486+
487+ test ( 'read - large GBK' , async ( ) => {
488+ await testLargeEncoding ( 'gbk' , '中国abc' ) ;
489+ } ) ;
490+
491+ test ( 'read - large ShiftJS' , async ( ) => {
492+ await testLargeEncoding ( 'shiftjis' , '中文abc' ) ;
493+ } ) ;
494+
495+ test ( 'read - large UTF8 BOM' , async ( ) => {
496+ await testLargeEncoding ( 'utf8bom' , 'öäüß' ) ;
497+ } ) ;
498+
499+ test ( 'read - large UTF16 LE' , async ( ) => {
500+ await testLargeEncoding ( 'utf16le' , 'öäüß' ) ;
501+ } ) ;
502+
503+ test ( 'read - large UTF16 BE' , async ( ) => {
504+ await testLargeEncoding ( 'utf16be' , 'öäüß' ) ;
505+ } ) ;
506+
507+ async function testLargeEncoding ( encoding : string , needle : string ) : Promise < void > {
508+ const resource = URI . file ( join ( testDir , `lorem_${ encoding } .txt` ) ) ;
509+
510+ const result = await service . read ( resource , { encoding } ) ;
511+ assert . equal ( result . encoding , encoding ) ;
512+
513+ const contents = snapshotToString ( result . value . create ( DefaultEndOfLine . LF ) . createSnapshot ( false ) ) ;
514+
515+ assert . equal ( contents . indexOf ( needle ) , 0 ) ;
516+ assert . ok ( contents . indexOf ( needle , 10 ) > 0 ) ;
473517 }
474518
475519 test ( 'read - FILE_IS_BINARY' , async ( ) => {
0 commit comments