fd-gulp-convert-encoding
Version:
convert file to assigned charset
131 lines (94 loc) • 3.29 kB
JavaScript
;
var convertEncoding = require('../');
var should = require('should');
var File = require('gulp-util').File;
var Buffer = require('buffer').Buffer;
var fs = require('fs');
var Readable = require('stream').Readable;
var Path = require('path');
var jschardet = require('jschardet');
require('mocha');
describe('fd-gulp-convert-encoding', function() {
describe('convertEncoding()', function() {
it('should emit error if encoding param is empty', function(done) {
try {
convertEncoding();
done();
} catch(err) {
err.message.should.equal('encoding is empty');
done();
}
});
it('should emit error for stream files', function(done) {
var streamFile = {
isNull: function () { return false; },
isStream: function () { return true; }
};
var stream = convertEncoding('utf-8');
stream.on('error', function (err) {
err.message.should.equal('Streaming not supported');
done();
});
stream.write(streamFile);
});
it('should convert the gbk file to utf-8 file', function(done) {
var testDirectory = './source';
var assets = Path.join(testDirectory, 'gbk.js');
var stream = convertEncoding('utf-8');
var fileAdata = fs.readFileSync(assets);
var fileA = new File({
path: assets,
contents: fileAdata
});
stream.on('data', function(newFile){
should.exist(newFile);
should.exist(newFile.path);
should.exist(newFile.relative);
should.exist(newFile.contents);
Buffer.isBuffer(newFile.contents).should.equal(true);
var filebuffer = newFile.contents;
var fileencoding = jschardet.detect(filebuffer).encoding;
// gbk转成utf-8编码时,notepadd++中显示编码为ASCI as UTF-8,即windows-1252
fileencoding.should.equal('windows-1252');
});
stream.on('end', function() {
done();
});
stream.write(fileA);
stream.end();
});
it('should convert the utf-8 file to gb2312 file', function(done) {
var testDirectory = './source';
var assets = Path.join(testDirectory, 'utf.js');
var stream = convertEncoding('gbk');
var fileAdata = fs.readFileSync(assets);
var fileA = new File({
path: assets,
contents: fileAdata
});
stream.on('data', function(newFile){
should.exist(newFile);
should.exist(newFile.path);
should.exist(newFile.relative);
should.exist(newFile.contents);
Buffer.isBuffer(newFile.contents).should.equal(true);
var filebuffer = newFile.contents;
var fileencoding = jschardet.detect(filebuffer).encoding;
fileencoding.should.equal('GB2312');
});
stream.on('end', function() {
done();
});
stream.write(fileA);
stream.end();
});
});
});
function stringStream() {
var stream = new Readable();
stream._read = function() {
this.push('terin');
this.push(null);
};
return stream;
}