files - more encoding tests

This commit is contained in:
Benjamin Pasero 2019-04-11 17:04:22 +02:00
parent fc35f68af4
commit 421cf5ba67
6 changed files with 44 additions and 45 deletions

View File

@ -0,0 +1 @@
いゅabc

View File

@ -0,0 +1,3 @@
ObjectCount = LoadObjects("Öffentlicher Ordner");
Private = "Persönliche Information"

View File

@ -0,0 +1 @@
€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<EFBFBD><EFBFBD><EFBFBD>徕沅彐玷殛腱眍<EFBFBD>

View File

@ -0,0 +1 @@
中国abc

View File

@ -0,0 +1 @@
中文abc

View File

@ -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<void> {
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'));