mirror of
https://github.com/bower/bower.git
synced 2026-01-15 01:08:07 -05:00
185 lines
4.9 KiB
JavaScript
185 lines
4.9 KiB
JavaScript
/*jshint plusplus:false*/
|
|
|
|
var glob = require('glob');
|
|
var assert = require('assert');
|
|
var rimraf = require('rimraf');
|
|
var path = require('path');
|
|
var fs = require('fs');
|
|
var mkdirp = require('mkdirp');
|
|
var config = require('../lib/core/config');
|
|
var cacheClean = require('../lib/commands/cache-clean');
|
|
|
|
describe('cache-clean', function () {
|
|
function clean(done) {
|
|
var del = 0;
|
|
|
|
rimraf(config.cache, function (err) {
|
|
if (err) return done(new Error('Unable to remove cache directory'));
|
|
if (++del >= 3) createDirs(done);
|
|
});
|
|
|
|
rimraf(config.links, function (err) {
|
|
if (err) return done(new Error('Unable to remove links directory'));
|
|
if (++del >= 3) createDirs(done);
|
|
});
|
|
|
|
rimraf(__dirname + '/temp', function (err) {
|
|
if (err) return done(new Error('Unable to remove temp directory'));
|
|
if (++del >= 3) createDirs(done);
|
|
});
|
|
}
|
|
|
|
beforeEach(function (done) {
|
|
clean(function (err) {
|
|
if (err) return done(err);
|
|
fs.mkdirSync(__dirname + '/temp');
|
|
done();
|
|
});
|
|
});
|
|
after(clean);
|
|
|
|
function createDirs(done) {
|
|
mkdirp(config.cache, function (err) {
|
|
if (err) return done(new Error('Unable to create cache directory'));
|
|
|
|
mkdirp(config.links, function (err) {
|
|
if (err) return done(new Error('Unable to create links directory'));
|
|
done();
|
|
});
|
|
});
|
|
}
|
|
|
|
function simulatePackage(name) {
|
|
// Create some stuff in the cache to simulate
|
|
var dir = path.join(config.cache, name);
|
|
var someDir = path.join(dir, 'some-dir');
|
|
|
|
fs.mkdirSync(dir);
|
|
fs.mkdirSync(someDir);
|
|
fs.writeFileSync(path.join(dir, 'some-file'), 'bower is awesome');
|
|
fs.writeFileSync(path.join(someDir, 'some-other-file'), 'bower is fantastic');
|
|
}
|
|
|
|
function simulateLink(name, linkedPath) {
|
|
var dir = path.join(config.links, name);
|
|
fs.mkdirSync(linkedPath);
|
|
fs.symlinkSync(linkedPath, dir);
|
|
}
|
|
|
|
it('Should emit end event', function (next) {
|
|
simulatePackage('some-package');
|
|
|
|
var cleaner = cacheClean();
|
|
|
|
cleaner
|
|
.on('error', function (err) {
|
|
throw err;
|
|
})
|
|
.on('end', function () {
|
|
next();
|
|
});
|
|
});
|
|
|
|
it('Should clean the entire cache', function (next) {
|
|
simulatePackage('some-package');
|
|
simulatePackage('other-package');
|
|
simulateLink('linked-package', __dirname + '/temp/linked-package');
|
|
fs.rmdirSync(__dirname + '/temp/linked-package'); // simulate invalid symlinks
|
|
simulateLink('linked-package2', __dirname + '/temp/linked-package2');
|
|
|
|
var cleaner = cacheClean();
|
|
|
|
cleaner.on('error', function (err) {
|
|
throw err;
|
|
});
|
|
|
|
cleaner.on('end', function () {
|
|
glob(config.cache + '/*', function (err, dirs) {
|
|
if (err) throw err;
|
|
assert(dirs.length === 0);
|
|
|
|
glob(config.links + '/*', function (err, dirs) {
|
|
if (err) throw err;
|
|
|
|
dirs = dirs.map(function (dir) {
|
|
return path.basename(dir);
|
|
});
|
|
|
|
assert(dirs.length === 1);
|
|
assert.deepEqual(dirs, ['linked-package2']);
|
|
|
|
next();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
it('Should clean only the selected packages', function (next) {
|
|
simulatePackage('foo-package');
|
|
simulatePackage('bar-package');
|
|
simulatePackage('baz-package');
|
|
|
|
var cleaner = cacheClean(['foo-package', 'bar-package']);
|
|
|
|
cleaner.on('error', function (err) {
|
|
throw err;
|
|
});
|
|
|
|
cleaner.on('end', function () {
|
|
glob(config.cache + '/*', function (err, dirs) {
|
|
if (err) throw err;
|
|
dirs = dirs.map(function (dir) {
|
|
return path.basename(dir);
|
|
});
|
|
|
|
assert.deepEqual(dirs, ['baz-package']);
|
|
next();
|
|
});
|
|
});
|
|
});
|
|
|
|
it('Should clean only the selected links', function (next) {
|
|
simulateLink('linked-package', __dirname + '/temp/linked-package');
|
|
fs.rmdirSync(__dirname + '/temp/linked-package'); // simulate invalid symlinks
|
|
simulateLink('linked-package2', __dirname + '/temp/linked-package2');
|
|
fs.rmdirSync(__dirname + '/temp/linked-package2'); // simulate invalid symlinks
|
|
|
|
var cleaner = cacheClean(['linked-package']);
|
|
|
|
cleaner.on('error', function (err) {
|
|
throw err;
|
|
});
|
|
|
|
cleaner.on('end', function () {
|
|
glob(config.links + '/*', function (err, dirs) {
|
|
if (err) throw err;
|
|
dirs = dirs.map(function (dir) {
|
|
return path.basename(dir);
|
|
});
|
|
|
|
assert.deepEqual(dirs, ['linked-package2']);
|
|
next();
|
|
});
|
|
});
|
|
});
|
|
|
|
it('Should handle passing duplicate package names', function (next) {
|
|
simulatePackage('foo-package');
|
|
simulatePackage('bar-package');
|
|
|
|
var cleaner = cacheClean(['foo-package', 'foo-package', 'bar-package']);
|
|
|
|
cleaner.on('error', function (err) {
|
|
throw err;
|
|
});
|
|
|
|
cleaner.on('end', function () {
|
|
glob(config.cache + '/*', function (err, dirs) {
|
|
if (err) throw err;
|
|
assert(dirs.length === 0);
|
|
next();
|
|
});
|
|
});
|
|
});
|
|
|
|
}); |