gulp-clean
Version:
A gulp plugin for removing files and folders.
207 lines (169 loc) • 5.05 kB
JavaScript
/*global describe, before, it*/
;
var fs = require('fs');
var path = require('path');
var utils = require('./utils');
var clean = require('./index');
var expect = require('chai').expect;
function noop() {}
describe('gulp-clean plugin', function () {
var cwd = process.cwd();
before(function () {
var exists = fs.existsSync('tmp');
if (!exists) { fs.mkdirSync('tmp'); }
});
function createTree(callback) {
fs.mkdir('tmp/tree/', function () {
fs.mkdir('tmp/tree/leaf', function () {
fs.mkdir('tmp/tree/leaf/node', function () {
fs.writeFile('tmp/tree/leaf/node/leaf.js', 'console.log("leaf")', function () {
fs.mkdir('tmp/tree/leftleaf', function () {
fs.writeFile('tmp/tree/leftleaf/leaf1.js', 'console.log("leaf")', function () {
callback();
});
});
});
});
});
});
}
it('removes a file', function (done) {
var stream = clean();
var content = 'testing';
fs.writeFile('tmp/test.js', content, function () {
stream.on('data', noop);
stream.on('end', function () {
fs.exists('tmp/test.js', function (exists) {
expect(exists).to.be.false;
done();
});
});
stream.write(new utils.File({
cwd: cwd,
base: cwd + '/tmp/',
path: cwd + '/tmp/test.js',
contents: new Buffer(content)
}));
stream.end();
});
});
it('removes a directory', function (done) {
fs.mkdir('tmp/test', function () {
var stream = clean();
stream.on('end', function () {
fs.exists('tmp/test', function (exists) {
expect(exists).to.be.false;
done();
});
});
stream.write(new utils.File({
cwd: cwd,
base: cwd + '/tmp/',
path: cwd + '/tmp/test/'
}));
stream.on('data', noop);
stream.end();
});
});
it('removes all from the tree', function (done) {
createTree(function () {
var stream = clean();
stream.on('end', function () {
fs.exists('tmp/tree/leaf/node/leaf.js', function (exists) {
expect(exists).to.be.false;
fs.exists('tmp/tree', function (exists) {
expect(exists).to.be.false;
done();
});
});
});
stream.on('data', noop);
stream.write(new utils.File({
cwd: cwd,
base: cwd + '/tmp',
path: cwd + '/tmp/tree/'
}));
stream.end();
});
});
it('cannot remove the current working directory', function (done) {
var stream = clean();
stream.on('error', function () {
fs.exists('.', function (exists) {
expect(exists).to.be.true;
});
});
stream.on('end', function () {
fs.exists('.', function (exists) {
expect(exists).to.be.true;
done();
});
});
stream.on('data', noop);
stream.write(new utils.File({
cwd: cwd,
path: cwd
}));
stream.end();
});
it('cannot delete anything outside the current working directory', function (done) {
var stream = clean();
if (!fs.existsSync('../secrets')) { fs.mkdirSync('../secrets'); }
stream.on('error', function () {
fs.exists('../secrets', function (exists) {
expect(exists).to.be.true;
});
});
stream.on('end', function () {
fs.exists('../secrets', function (exists) {
expect(exists).to.be.true;
done();
});
});
stream.on('data', noop);
stream.write(new utils.File({
cwd: path.resolve(cwd),
path: path.resolve(cwd + '/../secrets/')
}));
stream.end();
});
it('cannot delete a folder outside the current working directory', function (done) {
var stream = clean();
if (!fs.existsSync('../gulp-cleanTemp')) { fs.mkdirSync('../gulp-cleanTemp'); }
stream.on('error', function () {
fs.exists('../gulp-cleanTemp', function (exists) {
expect(exists).to.be.true;
});
});
stream.on('data', noop);
stream.on('end', function () {
fs.exists('../gulp-cleanTemp', function (exists) {
expect(exists).to.be.true;
fs.unlink('../gulp-cleanTemp', function () {
done();
});
});
});
stream.write(new utils.File({
cwd: path.resolve(cwd),
path: path.resolve(cwd + '/../gulp-cleanTemp/')
}));
stream.end();
});
it('can delete contents outside the current working directory with option force true', function (done) {
var stream = clean({force: true});
if (!fs.existsSync('../gulp-cleanTemp')) { fs.mkdirSync('../gulp-cleanTemp'); }
stream.on('data', noop);
stream.on('end', function () {
fs.exists('../gulp-cleanTemp', function (exists) {
expect(exists).to.be.false;
done();
});
});
stream.write(new utils.File({
cwd: path.resolve(cwd),
path: path.resolve(cwd + '/../gulp-cleanTemp/')
}));
stream.end();
});
});