提交 d86affcd 编写于 作者: K katainaka0503

Refactor encoding.ts

上级 342aa319
......@@ -7,6 +7,7 @@
import stream = require('vs/base/node/stream');
import iconv = require('iconv-lite');
import { TPromise } from 'vs/base/common/winjs.base';
export const UTF8 = 'utf8';
export const UTF8_with_bom = 'utf8bom';
......@@ -87,14 +88,17 @@ export function detectEncodingByBOMFromBuffer(buffer: NodeBuffer, bytesRead: num
/**
* Detects the Byte Order Mark in a given file.
* If no BOM is detected, `encoding` will be null.
* If no BOM is detected, null will be passed to callback.
*/
export function detectEncodingByBOM(file: string, callback: (error: Error, encoding: string) => void): void {
stream.readExactlyByFile(file, 3, (err: Error, buffer: NodeBuffer, bytesRead: number) => {
if (err) {
return callback(err, null);
}
return callback(null, detectEncodingByBOMFromBuffer(buffer, bytesRead));
export function detectEncodingByBOM(file: string): TPromise<string> {
return new TPromise((complete, error) => {
stream.readExactlyByFile(file, 3, (err: Error, buffer: NodeBuffer, bytesRead: number) => {
if (err) {
error(err);
} else {
complete(detectEncodingByBOMFromBuffer(buffer, bytesRead));
}
});
});
}
\ No newline at end of file
......@@ -10,58 +10,48 @@ import assert = require('assert');
import encoding = require('vs/base/node/encoding');
suite('Encoding', () => {
test('detectBOM UTF-8', function (done: () => void) {
test('detectBOM UTF-8', (done: (err?: any) => void) => {
const file = require.toUrl('./fixtures/some_utf8.css');
encoding.detectEncodingByBOM(file, (error: Error, encoding: string) => {
assert.equal(error, null);
encoding.detectEncodingByBOM(file).then( (encoding : string) => {
assert.equal(encoding, 'utf8');
done();
});
}, done);
});
test('detectBOM UTF-16 LE', function (done: () => void) {
test('detectBOM UTF-16 LE', (done: (err?: any) => void) => {
const file = require.toUrl('./fixtures/some_utf16le.css');
encoding.detectEncodingByBOM(file, (error: Error, encoding: string) => {
assert.equal(error, null);
encoding.detectEncodingByBOM(file).then((encoding: string) => {
assert.equal(encoding, 'utf16le');
done();
});
}, done);
});
test('detectBOM UTF-16 BE', function (done: () => void) {
test('detectBOM UTF-16 BE', (done: (err?: any) => void) => {
const file = require.toUrl('./fixtures/some_utf16be.css');
encoding.detectEncodingByBOM(file, (error: Error, encoding: string) => {
assert.equal(error, null);
encoding.detectEncodingByBOM(file).then((encoding: string) => {
assert.equal(encoding, 'utf16be');
done();
});
}, done);
});
test('detectBOM ANSI', function (done: () => void) {
test('detectBOM ANSI', function (done: (err?: any) => void) {
const file = require.toUrl('./fixtures/some_ansi.css');
encoding.detectEncodingByBOM(file, (error: Error, encoding: string) => {
assert.equal(error, null);
encoding.detectEncodingByBOM(file).then((encoding: string) => {
assert.equal(encoding, null);
done();
});
}, done);
});
test('detectBOM ANSI', function (done: () => void) {
test('detectBOM ANSI', function (done: (err?: any) => void) {
const file = require.toUrl('./fixtures/empty.txt');
encoding.detectEncodingByBOM(file, (error: Error, encoding: string) => {
assert.equal(error, null);
encoding.detectEncodingByBOM(file).then((encoding: string) => {
assert.equal(encoding, null);
done();
});
}, done);
});
});
......@@ -300,7 +300,7 @@ export class FileService implements IFileService {
if (options.overwriteEncoding) {
addBomPromise = TPromise.as(false); // if we are to overwrite the encoding, we do not preserve it if found
} else {
addBomPromise = nfcall(encoding.detectEncodingByBOM, absolutePath).then(enc => enc === encoding.UTF8); // otherwise preserve it if found
addBomPromise = encoding.detectEncodingByBOM(absolutePath).then(enc => enc === encoding.UTF8); // otherwise preserve it if found
}
}
......
......@@ -13,7 +13,6 @@ import assert = require('assert');
import { TPromise } from 'vs/base/common/winjs.base';
import { FileService, IEncodingOverride } from 'vs/workbench/services/files/node/fileService';
import { FileOperation, FileOperationEvent, FileChangesEvent, FileOperationResult, IFileOperationResult } from 'vs/platform/files/common/files';
import { nfcall } from 'vs/base/common/async';
import uri from 'vs/base/common/uri';
import uuid = require('vs/base/common/uuid');
import extfs = require('vs/base/node/extfs');
......@@ -542,7 +541,7 @@ suite('FileService', () => {
c.encoding = encoding;
return service.updateContent(c.resource, c.value, { encoding: encoding }).then(c => {
return nfcall(encodingLib.detectEncodingByBOM, c.resource.fsPath).then((enc) => {
return encodingLib.detectEncodingByBOM(c.resource.fsPath).then((enc) => {
assert.equal(enc, encodingLib.UTF16be);
return service.resolveContent(resource).then(c => {
......@@ -565,7 +564,7 @@ suite('FileService', () => {
c.value = 'Some updates';
return service.updateContent(c.resource, c.value, { encoding: encoding }).then(c => {
return nfcall(encodingLib.detectEncodingByBOM, c.resource.fsPath).then((enc) => {
return encodingLib.detectEncodingByBOM(c.resource.fsPath).then((enc) => {
assert.equal(enc, encodingLib.UTF16le);
return service.resolveContent(resource).then(c => {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册