aboutsummaryrefslogtreecommitdiff
path: root/node_modules/gulp-gzip/test/test.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-10-10 03:43:44 +0200
committerFlorian Dold <florian.dold@gmail.com>2016-10-10 03:43:44 +0200
commitabd94a7f5a50f43c797a11b53549ae48fff667c3 (patch)
treeab8ed457f65cdd72e13e0571d2975729428f1551 /node_modules/gulp-gzip/test/test.js
parenta0247c6a3fd6a09a41a7e35a3441324c4dcb58be (diff)
add node_modules to address #4364
Diffstat (limited to 'node_modules/gulp-gzip/test/test.js')
-rwxr-xr-xnode_modules/gulp-gzip/test/test.js492
1 files changed, 492 insertions, 0 deletions
diff --git a/node_modules/gulp-gzip/test/test.js b/node_modules/gulp-gzip/test/test.js
new file mode 100755
index 000000000..ee62dfb60
--- /dev/null
+++ b/node_modules/gulp-gzip/test/test.js
@@ -0,0 +1,492 @@
+var clean = require('gulp-clean');
+var fs = require('fs');
+var gulp = require('gulp');
+var log = require('gulp-util').log;
+var gzip = require('../');
+var nid = require('nid');
+var rename = require('gulp-rename');
+var should = require('should');
+var Stream = require('stream');
+var tap = require('gulp-tap');
+var zlib = require('zlib');
+
+// monkeys are fixing cwd for gulp-mocha
+// node lives in one process/scope/directory
+process.chdir('./test');
+
+describe('gulp-gzip', function() {
+
+ describe('config', function() {
+
+ it('should have default config', function(done) {
+ var instance = gzip();
+ instance.config.should.eql({
+ append: true,
+ gzipOptions: {},
+ skipGrowingFiles: false,
+ threshold: false
+ });
+ done();
+ });
+
+ it('should merge options with defaults', function(done) {
+ var instance = gzip({ append: false });
+ instance.config.should.eql({
+ append: false,
+ gzipOptions: {},
+ skipGrowingFiles: false,
+ threshold: false
+ });
+ done();
+ });
+ });
+
+ describe('file extension', function() {
+
+ it('should append .gz to the file extension, by default', function(done) {
+ gulp.src('files/small.txt')
+ .pipe(gzip())
+ .pipe(tap(function(file) {
+ file.path.should.endWith('.gz');
+ done();
+ }));
+ });
+
+ it('should not append .gz to the file extension receiving { append: false }', function(done) {
+ gulp.src('files/small.txt')
+ .pipe(gzip({ append: false }))
+ .pipe(tap(function(file) {
+ file.path.should.not.endWith('.gz');
+ done();
+ }));
+ });
+
+ it('should accept an arbitrary extension with the `extension` option', function(done) {
+ gulp.src('files/small.txt')
+ .pipe(gzip({ extension: 'zip' }))
+ .pipe(tap(function(file) {
+ file.path.should.endWith('.zip');
+ done();
+ }));
+ });
+
+ it('should accept an arbitrary pre-extension with the `preExtension` option', function(done) {
+ gulp.src('files/small.txt')
+ .pipe(gzip({ preExtension: 'gz' }))
+ .pipe(tap(function(file) {
+ file.path.should.endWith('.gz.txt');
+ done();
+ }));
+ });
+ });
+
+ describe('file type', function() {
+
+ it('should return file contents as a Buffer', function(done) {
+ gulp.src('files/small.txt')
+ .pipe(gzip())
+ .pipe(tap(function(file) {
+ file.contents.should.be.instanceof(Buffer);
+ done();
+ }));
+ });
+
+ it('should return file contents as a Stream', function(done) {
+ gulp.src('files/small.txt', { buffer: false })
+ .pipe(gzip())
+ .pipe(tap(function(file) {
+ file.contents.should.be.instanceof(Stream);
+ done();
+ }));
+ });
+ });
+
+ describe('file properties', function() {
+ it('should not lose any properties from the Vinyl file', function(done) {
+ gulp.src('files/small.txt')
+ .pipe(tap(function(file) {
+ file.test = 'test';
+ }))
+ .pipe(gzip())
+ .pipe(tap(function(file) {
+ file.should.have.property('test', 'test');
+ done();
+ }));
+ });
+
+ it('should set `contentEncoding`', function(done) {
+ gulp.src('files/small.txt')
+ .pipe(gzip())
+ .pipe(tap(function(file) {
+ file.should.have.property('contentEncoding');
+ file.contentEncoding.should.containEql('gzip');
+ done();
+ }));
+ });
+ });
+
+ describe('gzip options', function() {
+
+ it('should set gzipOptions object', function(done) {
+ var instance = gzip({ gzipOptions: { level: 9, memLevel: 1} });
+ instance.config.should.have.property('gzipOptions');
+ instance.config.gzipOptions.should.have.property('level', 9);
+ instance.config.gzipOptions.should.have.property('memLevel', 1);
+ done();
+ });
+
+ it('should handle compression level in buffer mode', function(done) {
+ var id_lowest_compression = nid();
+ var id_highest_compression = nid();
+
+ var out_lowest_compression = gulp.dest('tmp');
+ var out_highest_compression = gulp.dest('tmp');
+
+ var size_lowest_compression = 0;
+ var size_highest_compression = 0;
+
+ out_lowest_compression.on('end', function() {
+ fs.stat('./tmp/' + id_lowest_compression + '.txt.gz', function (err, stats) {
+ size_lowest_compression = stats.size;
+
+ if (size_highest_compression > 0) {
+ size_highest_compression.should.be.lessThan(size_lowest_compression);
+ done();
+ }
+ });
+ });
+
+ out_highest_compression.on('end', function() {
+ fs.stat('./tmp/' + id_highest_compression + '.txt.gz', function (err, stats) {
+ size_highest_compression = stats.size;
+
+ if (size_lowest_compression > 0) {
+ size_highest_compression.should.be.lessThan(size_lowest_compression);
+ done();
+ }
+ });
+ });
+
+ gulp.src('files/big.txt')
+ .pipe(rename({ basename: id_lowest_compression }))
+ .pipe(gzip({ gzipOptions: { level: 1 } }))
+ .pipe(out_lowest_compression);
+
+ gulp.src('files/big.txt')
+ .pipe(rename({ basename: id_highest_compression }))
+ .pipe(gzip({ gzipOptions: { level: 9 } }))
+ .pipe(out_highest_compression);
+ });
+
+ it('should handle compression level in stream mode', function(done) {
+ var id_lowest_compression = nid();
+ var id_highest_compression = nid();
+
+ var out_lowest_compression = gulp.dest('tmp');
+ var out_highest_compression = gulp.dest('tmp');
+
+ var size_lowest_compression = 0;
+ var size_highest_compression = 0;
+
+ out_lowest_compression.on('end', function() {
+ fs.stat('./tmp/' + id_lowest_compression + '.txt.gz', function (err, stats) {
+ size_lowest_compression = stats.size;
+
+ if (size_highest_compression > 0) {
+ size_highest_compression.should.be.lessThan(size_lowest_compression);
+ done();
+ }
+ });
+ });
+
+ out_highest_compression.on('end', function() {
+ fs.stat('./tmp/' + id_highest_compression + '.txt.gz', function (err, stats) {
+ size_highest_compression = stats.size;
+
+ if (size_lowest_compression > 0) {
+ size_highest_compression.should.be.lessThan(size_lowest_compression);
+ done();
+ }
+ });
+ });
+
+ gulp.src('files/big.txt', { buffer: false })
+ .pipe(rename({ basename: id_lowest_compression }))
+ .pipe(gzip({ gzipOptions: { level: 1 } }))
+ .pipe(out_lowest_compression);
+
+ gulp.src('files/big.txt', { buffer: false })
+ .pipe(rename({ basename: id_highest_compression }))
+ .pipe(gzip({ gzipOptions: { level: 9 } }))
+ .pipe(out_highest_compression);
+ });
+ });
+
+ describe('threshold option', function() {
+
+ it('should set threshold to false while receiving false', function(done) {
+ var instance = gzip({ threshold: false });
+ instance.config.threshold.should.be.false;
+ done();
+ });
+
+ it('should set threshold to 150 while receiving true', function(done) {
+ var instance = gzip({ threshold: true });
+ instance.config.threshold.should.eql(150);
+ done();
+ });
+
+ it('should set threshold to Number while receiving Number', function(done) {
+ var instance = gzip({ threshold: 1024 });
+ instance.config.should.have.property('threshold', 1024);
+ done();
+ });
+
+ it('should set threshold to 150 while receiving Number < 150', function(done) {
+ var instance = gzip({ threshold: 100 });
+ instance.config.should.have.property('threshold', 150);
+ done();
+ });
+
+ it('should set threshold to Number while receiving String (bytes result)', function(done) {
+ var instance = gzip({ threshold: '1kb' });
+ instance.config.should.have.property('threshold', 1024);
+ done();
+ });
+
+ it('should set threshold to 150 while receiving String (bytes result < 150)', function(done) {
+ var instance = gzip({ threshold: '1kb' });
+ instance.config.should.have.property('threshold', 1024);
+ done();
+ });
+
+ it('should handle threshold of 1kb by passing through small.txt (<1kb)', function(done) {
+ var id = nid();
+ var out = gulp.dest('tmp');
+
+ out.on('end', function() {
+ fs.readFile('./tmp/' + id + '.txt', { encoding: 'utf-8' }, function(err, file) {
+ fs.readFile('./files/small.txt', { encoding: 'utf-8' }, function(err, original) {
+ file.should.equal(original);
+ done();
+ });
+ });
+ });
+
+ gulp.src('files/small.txt')
+ .pipe(rename({ basename: id }))
+ .pipe(gzip({ threshold: '1kb' }))
+ .pipe(out);
+ });
+
+ it('should handle threshold of 1kb by compressing big.txt (>1kb)', function(done) {
+ var id = nid();
+ var out = gulp.dest('tmp');
+
+ out.on('end', function() {
+ fs.readFile('./tmp/' + id + '.txt.gz', function(err, file) {
+ zlib.unzip(file, function(err, buffer) {
+ file = buffer.toString('utf-8');
+
+ fs.readFile('./files/big.txt', { encoding: 'utf-8' }, function(err, original) {
+ file.should.equal(original);
+ done();
+ });
+ });
+ });
+ });
+
+ gulp.src('files/big.txt')
+ .pipe(rename({ basename: id }))
+ .pipe(gzip({ threshold: '1kb' }))
+ .pipe(out);
+ });
+
+ it('should handle threshold of 1kb by passing through small.txt (<1kb)', function(done) {
+ var id = nid();
+ var out = gulp.dest('tmp');
+
+ out.on('end', function() {
+ fs.readFile('./tmp/' + id + '.txt', { encoding: 'utf-8' }, function(err, file) {
+ fs.readFile('./files/small.txt', { encoding: 'utf-8' }, function(err, original) {
+ file.should.equal(original);
+ done();
+ });
+ });
+ });
+
+ gulp.src('files/small.txt', { buffer: false })
+ .pipe(rename({ basename: id }))
+ .pipe(gzip({ threshold: '1kb' }))
+ .pipe(out);
+ });
+
+ it('should handle threshold of 1kb by compressing big.txt (>1kb)', function(done) {
+ var id = nid();
+ var out = gulp.dest('tmp');
+
+ out.on('end', function() {
+ fs.readFile('./tmp/' + id + '.txt.gz', function(err, file) {
+ zlib.unzip(file, function(err, buffer) {
+ file = buffer.toString('utf-8');
+
+ fs.readFile('./files/big.txt', { encoding: 'utf-8' }, function(err, original) {
+ file.should.equal(original);
+ done();
+ });
+ });
+ });
+ });
+
+ gulp.src('files/big.txt', { buffer: false })
+ .pipe(rename({ basename: id }))
+ .pipe(gzip({ threshold: '1kb' }))
+ .pipe(out);
+ });
+ });
+
+ describe('delete mode', function() {
+
+ it('should not delete existing gzipped files when { deleteMode : false }', function(done) {
+ var id = nid();
+ var out = gulp.dest('tmp');
+
+ out.on('end', function() {
+ fs.readFile('./tmp/' + id + '.txt.gz', function(err, file) {
+ should.not.exist(err);
+ should.exist(file);
+ file.should.not.be.empty;
+
+ var out = gulp.dest('tmp');
+ out.on('end', function() {
+ fs.readFile('./tmp/' + id + '.txt.gz', function(err, file) {
+ should.not.exist(err);
+ should.exist(file);
+ file.should.not.be.empty;
+ done();
+ });
+ });
+
+ gulp.src('files/small.txt')
+ .pipe(rename({ basename: id }))
+ .pipe(gzip({ threshold: 1024 }))
+ .pipe(out);
+ });
+ });
+
+ gulp.src('files/big.txt')
+ .pipe(rename({ basename: id }))
+ .pipe(gzip({ threshold: 1024 }))
+ .pipe(out);
+ });
+
+ it('should delete existing gzipped files if the files changed from big.txt (over threshold) to small.txt (under threshold) when { deleteMode : true }', function(done) {
+ var id = nid();
+ var out = gulp.dest('tmp');
+
+ out.on('end', function() {
+ fs.readFile('./tmp/' + id + '.txt.gz', function(err, file) {
+ should.not.exist(err);
+ should.exist(file);
+ file.should.not.be.empty;
+
+ var out = gulp.dest('tmp');
+
+ out.on('end', function() {
+ fs.exists('./tmp/' + id + '.txt.gz', function(exists) {
+ exists.should.be.false;
+ done();
+ });
+ });
+
+ gulp.src('files/small.txt')
+ .pipe(rename({ basename: id }))
+ .pipe(gzip({ threshold: 1024, deleteMode: 'tmp' }))
+ .pipe(out);
+ });
+ });
+
+ gulp.src('files/big.txt')
+ .pipe(rename({ basename: id }))
+ .pipe(gzip({ threshold: 1024, deleteMode: 'tmp' }))
+ .pipe(out);
+ });
+ });
+
+ describe ('uncompress the compressed file', function() {
+
+ it('should match original in buffer mode', function(done) {
+ var id = nid();
+ var out = gulp.dest('tmp');
+
+ out.on('end', function() {
+ fs.readFile('./tmp/' + id + '.txt.gz', function(err, file) {
+ zlib.unzip(file, function(err, buffer) {
+ file = buffer.toString('utf-8', 0, buffer.length);
+
+ fs.readFile('./files/small.txt', { encoding: 'utf-8' }, function(err, original) {
+ file.should.equal(original);
+ done();
+ });
+ });
+ });
+ });
+
+ gulp.src('files/small.txt')
+ .pipe(rename({ basename: id }))
+ .pipe(gzip())
+ .pipe(out);
+ });
+
+ it('should match original in stream mode', function(done) {
+ var id = nid();
+ var out = gulp.dest('tmp');
+
+ out.on('end', function() {
+ fs.readFile('./tmp/' + id + '.txt.gz', function(err, file) {
+ zlib.unzip(file, function(err, buffer) {
+ file = buffer.toString('utf-8', 0, buffer.length);
+
+ fs.readFile('./files/small.txt', { encoding: 'utf-8' }, function(err, original) {
+ file.should.equal(original);
+ done();
+ });
+ });
+ });
+ });
+
+ gulp.src('files/small.txt', { buffer: false })
+ .pipe(rename({ basename: id }))
+ .pipe(gzip())
+ .pipe(out);
+ });
+ });
+
+ describe('skip files that get larger after compression', function() {
+ it('handles buffers', function(done) {
+ var originalBuffer;
+ gulp.src('files/too_small.txt')
+ .pipe(tap(function(file) {
+ originalBuffer = file.contents;
+ }))
+ .pipe(gzip({ skipGrowingFiles: true }))
+ .pipe(tap(function(file) {
+ file.contents.should.equal(originalBuffer);
+ done();
+ }));
+ });
+
+ it('handles streams', function(done) {
+ var originalStream;
+ gulp.src('files/too_small.txt', { buffer: false })
+ .pipe(tap(function(file) {
+ originalStream = file.contents;
+ }))
+ .pipe(gzip({ skipGrowingFiles: true }))
+ .pipe(tap(function(file) {
+ file.contents.should.equal(originalStream);
+ done();
+ }));
+ });
+ });
+});