mirror of
https://github.com/bower/bower.git
synced 2026-01-14 16:57:57 -05:00
147 lines
3.8 KiB
JavaScript
147 lines
3.8 KiB
JavaScript
var Q = require('q');
|
|
var path = require('path');
|
|
var mkdirp = require('mkdirp');
|
|
var rimraf = require('rimraf');
|
|
var uuid = require('node-uuid');
|
|
var object = require('mout/object');
|
|
var fs = require('fs');
|
|
var glob = require('glob');
|
|
var os = require('os');
|
|
var cmd = require('../lib/util/cmd');
|
|
var config = require('../lib/config');
|
|
|
|
// Those are needed for Travis or not configured git environment
|
|
var env = {
|
|
'GIT_AUTHOR_DATE': 'Sun Apr 7 22:13:13 2013 +0000',
|
|
'GIT_AUTHOR_NAME': 'André Cruz',
|
|
'GIT_AUTHOR_EMAIL': 'amdfcruz@gmail.com',
|
|
'GIT_COMMITTER_DATE': 'Sun Apr 7 22:13:13 2013 +0000',
|
|
'GIT_COMMITTER_NAME': 'André Cruz',
|
|
'GIT_COMMITTER_EMAIL': 'amdfcruz@gmail.com'
|
|
};
|
|
|
|
// Preserve the original environment
|
|
object.mixIn(env, process.env);
|
|
|
|
var tmpLocation = path.join(
|
|
os.tmpdir ? os.tmpdir() : os.tmpDir(),
|
|
'bower-tests',
|
|
uuid.v4().slice(0, 8)
|
|
);
|
|
|
|
exports.require = function (name) {
|
|
return require(path.join(__dirname, '../', name));
|
|
};
|
|
|
|
// We need to reset cache because tests are reusing temp directories
|
|
beforeEach(function () {
|
|
config.reset();
|
|
});
|
|
|
|
after(function () {
|
|
rimraf.sync(tmpLocation);
|
|
});
|
|
|
|
exports.TempDir = (function() {
|
|
function TempDir (defaults) {
|
|
this.path = path.join(tmpLocation, uuid.v4());
|
|
this.defaults = defaults;
|
|
}
|
|
|
|
TempDir.prototype.create = function (files) {
|
|
var that = this;
|
|
|
|
files = object.merge(files || {}, this.defaults);
|
|
|
|
if (files) {
|
|
object.forOwn(files, function (contents, filepath) {
|
|
if (typeof contents === 'object') {
|
|
contents = JSON.stringify(contents, null, ' ') + '\n';
|
|
}
|
|
|
|
var fullPath = path.join(that.path, filepath);
|
|
mkdirp.sync(path.dirname(fullPath));
|
|
fs.writeFileSync(fullPath, contents);
|
|
});
|
|
}
|
|
|
|
return this;
|
|
};
|
|
|
|
TempDir.prototype.prepare = function (files) {
|
|
rimraf.sync(this.path);
|
|
mkdirp.sync(this.path);
|
|
this.create(files);
|
|
|
|
return this;
|
|
};
|
|
|
|
// TODO: Rewrite to synchronous form
|
|
TempDir.prototype.prepareGit = function (revisions) {
|
|
var that = this;
|
|
|
|
revisions = object.merge(revisions || {}, this.defaults);
|
|
|
|
rimraf.sync(that.path);
|
|
|
|
mkdirp.sync(that.path);
|
|
|
|
var promise = new Q();
|
|
|
|
object.forOwn(revisions, function (files, tag) {
|
|
promise = promise.then(function () {
|
|
return that.git('init');
|
|
}).then(function () {
|
|
that.glob('./!(.git)').map(function (removePath) {
|
|
var fullPath = path.join(that.path, removePath);
|
|
|
|
rimraf.sync(fullPath);
|
|
});
|
|
|
|
that.create(files);
|
|
}).then(function () {
|
|
return that.git('add', '-A');
|
|
}).then(function () {
|
|
return that.git('commit', '-m"commit"');
|
|
}).then(function () {
|
|
return that.git('tag', tag);
|
|
});
|
|
});
|
|
|
|
return promise;
|
|
};
|
|
|
|
TempDir.prototype.glob = function (pattern) {
|
|
return glob.sync(pattern, {
|
|
cwd: this.path,
|
|
dot: true
|
|
});
|
|
};
|
|
|
|
TempDir.prototype.read = function (name) {
|
|
return fs.readFileSync(path.join(this.path, name), 'utf8');
|
|
};
|
|
|
|
TempDir.prototype.git = function () {
|
|
var args = Array.prototype.slice.call(arguments);
|
|
|
|
return cmd('git', args, { cwd: this.path, env: env });
|
|
};
|
|
|
|
TempDir.prototype.exists = function (name) {
|
|
return fs.existsSync(path.join(this.path, name));
|
|
};
|
|
|
|
return TempDir;
|
|
})();
|
|
|
|
exports.expectEvent = function (emitter, eventName) {
|
|
var deferred = Q.defer();
|
|
|
|
emitter.once(eventName, function () {
|
|
deferred.resolve(arguments);
|
|
});
|
|
|
|
return deferred.promise;
|
|
};
|