From 421cf5ba67632cada5d092decd5db3eea3a10bfd Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 11 Apr 2019 17:04:22 +0200 Subject: [PATCH] files - more encoding tests --- .../textfile/test/fixtures/some_big5.txt | 1 + .../textfile/test/fixtures/some_cp1252.txt | 3 + .../textfile/test/fixtures/some_cyrillic.txt | 1 + .../textfile/test/fixtures/some_gbk.txt | 1 + .../textfile/test/fixtures/some_shiftjs.txt | 1 + .../textfile/test/textFileService.io.test.ts | 82 +++++++++---------- 6 files changed, 44 insertions(+), 45 deletions(-) create mode 100644 src/vs/workbench/services/textfile/test/fixtures/some_big5.txt create mode 100644 src/vs/workbench/services/textfile/test/fixtures/some_cp1252.txt create mode 100644 src/vs/workbench/services/textfile/test/fixtures/some_cyrillic.txt create mode 100644 src/vs/workbench/services/textfile/test/fixtures/some_gbk.txt create mode 100644 src/vs/workbench/services/textfile/test/fixtures/some_shiftjs.txt diff --git a/src/vs/workbench/services/textfile/test/fixtures/some_big5.txt b/src/vs/workbench/services/textfile/test/fixtures/some_big5.txt new file mode 100644 index 00000000000..b9e2570fef9 --- /dev/null +++ b/src/vs/workbench/services/textfile/test/fixtures/some_big5.txt @@ -0,0 +1 @@ +abc \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/fixtures/some_cp1252.txt b/src/vs/workbench/services/textfile/test/fixtures/some_cp1252.txt new file mode 100644 index 00000000000..2ea52dc709f --- /dev/null +++ b/src/vs/workbench/services/textfile/test/fixtures/some_cp1252.txt @@ -0,0 +1,3 @@ +ObjectCount = LoadObjects("ffentlicher Ordner"); + +Private = "Persnliche Information" diff --git a/src/vs/workbench/services/textfile/test/fixtures/some_cyrillic.txt b/src/vs/workbench/services/textfile/test/fixtures/some_cyrillic.txt new file mode 100644 index 00000000000..f8ee3066712 --- /dev/null +++ b/src/vs/workbench/services/textfile/test/fixtures/some_cyrillic.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/fixtures/some_gbk.txt b/src/vs/workbench/services/textfile/test/fixtures/some_gbk.txt new file mode 100644 index 00000000000..eab73d1951b --- /dev/null +++ b/src/vs/workbench/services/textfile/test/fixtures/some_gbk.txt @@ -0,0 +1 @@ +йabc \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/fixtures/some_shiftjs.txt b/src/vs/workbench/services/textfile/test/fixtures/some_shiftjs.txt new file mode 100644 index 00000000000..efa955b3ecb --- /dev/null +++ b/src/vs/workbench/services/textfile/test/fixtures/some_shiftjs.txt @@ -0,0 +1 @@ +abc \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/textFileService.io.test.ts b/src/vs/workbench/services/textfile/test/textFileService.io.test.ts index da7fc8d1c4e..a3fcb00d950 100644 --- a/src/vs/workbench/services/textfile/test/textFileService.io.test.ts +++ b/src/vs/workbench/services/textfile/test/textFileService.io.test.ts @@ -9,7 +9,7 @@ import { workbenchInstantiationService, TestLifecycleService, TestTextFileServic import { IWindowsService } from 'vs/platform/windows/common/windows'; import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; import { IUntitledEditorService } from 'vs/workbench/services/untitled/common/untitledEditorService'; -import { IFileService, ITextSnapshot, snapshotToString, SUPPORTED_ENCODINGS } from 'vs/platform/files/common/files'; +import { IFileService, ITextSnapshot, snapshotToString } from 'vs/platform/files/common/files'; import { TextFileEditorModelManager } from 'vs/workbench/services/textfile/common/textFileEditorModelManager'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { IModelService } from 'vs/editor/common/services/modelService'; @@ -251,6 +251,42 @@ suite('Files - TextFileService i/o', () => { assert.equal(snapshotToString(resolved.value.create(DefaultEndOfLine.LF).createSnapshot(false)), expectedContent); } + test('write - use encoding (cp1252)', async () => { + await testEncodingKeepsData(URI.file(join(testDir, 'some_cp1252.txt')), 'cp1252', ['ObjectCount = LoadObjects("Öffentlicher Ordner");', '', 'Private = "Persönliche Information"', ''].join('\n')); + }); + + test('write - use encoding (shiftjis)', async () => { + await testEncodingKeepsData(URI.file(join(testDir, 'some_shiftjs.txt')), 'shiftjis', '中文abc'); + }); + + test('write - use encoding (gbk)', async () => { + await testEncodingKeepsData(URI.file(join(testDir, 'some_gbk.txt')), 'gbk', '中国abc'); + }); + + test('write - use encoding (cyrillic)', async () => { + await testEncodingKeepsData(URI.file(join(testDir, 'some_cyrillic.txt')), 'cp866', 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя'); + }); + + test('write - use encoding (big5)', async () => { + await testEncodingKeepsData(URI.file(join(testDir, 'some_big5.txt')), 'cp950', '中文abc'); + }); + + async function testEncodingKeepsData(resource: URI, encoding: string, expected: string) { + let resolved = await service.resolve(resource, { encoding }); + const content = snapshotToString(resolved.value.create(DefaultEndOfLine.LF).createSnapshot(false)); + assert.equal(content, expected); + + await service.write(resource, content, { encoding }); + + resolved = await service.resolve(resource, { encoding }); + assert.equal(snapshotToString(resolved.value.create(DefaultEndOfLine.LF).createSnapshot(false)), content); + + await service.write(resource, TextModel.createFromString(content).createSnapshot(), { encoding }); + + resolved = await service.resolve(resource, { encoding }); + assert.equal(snapshotToString(resolved.value.create(DefaultEndOfLine.LF).createSnapshot(false)), content); + } + test('write - no encoding - content as string', async () => { const resource = URI.file(join(testDir, 'small.txt')); @@ -358,50 +394,6 @@ suite('Files - TextFileService i/o', () => { assert.equal(detectedEncoding, UTF8); }); - test('write - CP1252 - content as string', async () => { - const resource = URI.file(join(testDir, 'small_umlaut.txt')); - - const content = (await readFile(resource.fsPath)).toString(); - - await service.write(resource, content, { encoding: 'cp1252' }); - - const resolved = await service.resolve(resource, { encoding: 'cp1252' }); - assert.equal(snapshotToString(resolved.value.create(DefaultEndOfLine.LF).createSnapshot(false)), content); - }); - - test('write - all encodings - large content as snapshot', async () => { - const resource = URI.file(join(testDir, 'lorem.txt')); - const content = (await readFile(resource.fsPath)).toString(); - - for (const encoding of Object.keys(SUPPORTED_ENCODINGS)) { - if (encoding === 'utf8bom') { - continue; // this is the only encoding that is not standard, so skip it - } - - await testEncoding2(resource, encoding, content); - } - }); - - test('write - all encodings - small content as snapshot', async () => { - const resource = URI.file(join(testDir, 'small.txt')); - const content = (await readFile(resource.fsPath)).toString(); - - for (const encoding of Object.keys(SUPPORTED_ENCODINGS)) { - if (encoding === 'utf8bom') { - continue; // this is the only encoding that is not standard, so skip it - } - - await testEncoding2(resource, encoding, content); - } - }); - - async function testEncoding2(resource: URI, encoding: string, content: string): Promise { - await service.write(resource, content, { encoding }); - - const resolved = await service.resolve(resource, { encoding }); - assert.equal(snapshotToString(resolved.value.create(DefaultEndOfLine.LF).createSnapshot(false)), content, 'Encoding used: ' + encoding); - } - test('write - ensure BOM in empty file - content as string', async () => { const resource = URI.file(join(testDir, 'small.txt'));