mirror of
https://github.com/bower/bower.git
synced 2026-01-15 01:08:07 -05:00
228 lines
6.4 KiB
JavaScript
228 lines
6.4 KiB
JavaScript
/*jshint plusplus:false*/
|
|
|
|
var assert = require('assert');
|
|
var Manager = require('../lib/core/manager');
|
|
var rimraf = require('rimraf');
|
|
var config = require('../lib/core/config');
|
|
var semver = require('semver');
|
|
var fs = require('fs');
|
|
var path = require('path');
|
|
|
|
describe('manager', function () {
|
|
var savedConfigJson = config.json;
|
|
|
|
function clean(done) {
|
|
// Restore possibly dirtied config.json
|
|
config.json = savedConfigJson;
|
|
|
|
var del = 0;
|
|
|
|
rimraf(config.directory, function () {
|
|
// Ignore the error if the local directory was not actually deleted
|
|
if (++del >= 2) done();
|
|
});
|
|
|
|
rimraf(config.cache, function () {
|
|
// Ignore the error if the cache directory was not actually deleted
|
|
if (++del >= 2) done();
|
|
});
|
|
}
|
|
|
|
beforeEach(clean);
|
|
after(clean);
|
|
|
|
it('Should resolve JSON dependencies', function (next) {
|
|
var manager = new Manager([]);
|
|
manager.cwd = __dirname + '/assets/project';
|
|
|
|
manager.on('resolve', function () {
|
|
assert.ok(semver.gte(manager.dependencies.jquery[0].version, '1.8.1'));
|
|
assert.ok(semver.gte(manager.dependencies['package-bootstrap'][0].version, '2.0.0'));
|
|
assert.ok(semver.gte(manager.dependencies['jquery-ui'][0].version, '1.8.0'));
|
|
next();
|
|
});
|
|
|
|
manager.on('error', function (err) {
|
|
throw err;
|
|
});
|
|
|
|
manager.resolve();
|
|
});
|
|
|
|
it('Should resolve nested JSON dependencies', function (next) {
|
|
var manager = new Manager([]);
|
|
manager.cwd = __dirname + '/assets/project-nested';
|
|
|
|
manager.on('resolve', function () {
|
|
assert.deepEqual(manager.dependencies.jquery[0].version, '1.7.2');
|
|
assert.deepEqual(manager.dependencies['jquery-pjax'][0].version, '1.0.0');
|
|
next();
|
|
});
|
|
|
|
manager.on('error', function (err) {
|
|
throw err;
|
|
});
|
|
|
|
manager.resolve();
|
|
});
|
|
|
|
it('Should resolve nested JSON dependencies even when using another name for component.json project-wise', function (next) {
|
|
// Using another name for .json file leads to unfetchable deps
|
|
// https://github.com/twitter/bower/issues/205
|
|
config.json = 'foocomponent.json';
|
|
var manager = new Manager([]);
|
|
manager.cwd = __dirname + '/assets/project-nonstandard-json';
|
|
|
|
manager.on('resolve', function () {
|
|
assert.deepEqual(manager.dependencies['jquery-pjax'][0].version, '1.0.0');
|
|
assert.notEqual(manager.dependencies.jquery[0].version, null);
|
|
next();
|
|
});
|
|
|
|
manager.on('error', function (err) {
|
|
throw err;
|
|
});
|
|
|
|
manager.resolve();
|
|
});
|
|
|
|
it('Should override packages at the project level', function (next) {
|
|
var manager = new Manager([]);
|
|
manager.cwd = __dirname + '/assets/project-static';
|
|
|
|
manager.on('resolve', function () {
|
|
assert.deepEqual(manager.dependencies.jquery[0].version, '1.8.1');
|
|
assert.ok(fs.existsSync(path.join(manager.dependencies.jquery[0].localPath, 'foo.js')));
|
|
next();
|
|
});
|
|
|
|
manager.on('error', function (err) {
|
|
throw err;
|
|
});
|
|
|
|
manager.resolve();
|
|
});
|
|
|
|
it('Should not error out in resolved conflicts', function (next) {
|
|
var manager = new Manager([]);
|
|
manager.cwd = __dirname + '/assets/project-nested';
|
|
|
|
manager.on('error', function (err) {
|
|
throw err;
|
|
});
|
|
manager.on('resolve', function () {
|
|
assert.deepEqual(manager.dependencies.jquery[0].version, '1.7.2');
|
|
next();
|
|
});
|
|
|
|
manager.resolve();
|
|
});
|
|
|
|
it('Should detect unresolvable packages in nested JSON dependencies', function (next) {
|
|
var manager = new Manager([]);
|
|
manager.cwd = __dirname + '/assets/project-nested-conflict';
|
|
|
|
var detected = false;
|
|
manager.on('error', function () {
|
|
if (/no resolvable.* jquery$/i) detected = true;
|
|
});
|
|
manager.on('resolve', function () {
|
|
if (!detected) throw new Error('A conflict in jquery should have been detected.');
|
|
next();
|
|
});
|
|
|
|
manager.resolve();
|
|
});
|
|
|
|
it('Should resolve to latest version on unresolvable packages in nested JSON dependencies', function (next) {
|
|
var manager = new Manager([], { forceLatest: true });
|
|
manager.cwd = __dirname + '/assets/project-nested-conflict';
|
|
|
|
manager.on('error', function (err) {
|
|
throw err;
|
|
});
|
|
manager.on('resolve', function () {
|
|
assert.ok(semver.gte(manager.dependencies.jquery[0].version, '1.7.0'));
|
|
next();
|
|
});
|
|
|
|
manager.resolve();
|
|
});
|
|
|
|
it('Should fetch remote sources if the force option is passed', function (next) {
|
|
this.timeout(40000); // Increase the timeout because this one takes longer
|
|
|
|
function resolve() {
|
|
var manager = new Manager([], { force: true });
|
|
manager.cwd = __dirname + '/assets/project';
|
|
|
|
manager.on('error', function (err) {
|
|
throw err;
|
|
});
|
|
|
|
manager.resolve();
|
|
|
|
return manager;
|
|
}
|
|
|
|
// We install the same package two times
|
|
var pkg = resolve();
|
|
var nrCached = 0;
|
|
pkg.on('resolve', function () {
|
|
// We got the cache filled in at this time
|
|
// This project has only a shared dependency (jquery) so it will be erased the first time
|
|
// but cached the second time
|
|
pkg = resolve();
|
|
|
|
pkg.on('data', function (data) {
|
|
if (/cached/.test(data)) nrCached++;
|
|
});
|
|
|
|
pkg.on('resolve', function () {
|
|
if (nrCached > 1) throw new Error('Cached versions are being used.');
|
|
next();
|
|
});
|
|
});
|
|
});
|
|
|
|
it('Should resolve devDependencies by default', function (next) {
|
|
var manager = new Manager([]);
|
|
manager.cwd = __dirname + '/assets/project-dev-deps';
|
|
|
|
manager.on('resolve', function () {
|
|
assert.ok(manager.dependencies.jquery);
|
|
assert.ok(manager.dependencies['package-dev-dep']);
|
|
assert.ok(manager.dependencies.bootstrap);
|
|
assert.ok(manager.dependencies.turtles);
|
|
// no devDependencies of dependencies
|
|
assert.ok(!manager.dependencies.qunit);
|
|
next();
|
|
});
|
|
|
|
manager.on('error', function (err) {
|
|
throw err;
|
|
});
|
|
|
|
manager.resolve();
|
|
});
|
|
|
|
it('Should not resolve devDependencies when specified', function (next) {
|
|
var manager = new Manager([], { production: true });
|
|
manager.cwd = __dirname + '/assets/project-dev-deps';
|
|
|
|
manager.on('resolve', function () {
|
|
assert.ok(manager.dependencies.jquery);
|
|
assert.ok(!manager.dependencies.bootstrap);
|
|
assert.ok(!manager.dependencies.turtles);
|
|
next();
|
|
});
|
|
|
|
manager.on('error', function (err) {
|
|
throw err;
|
|
});
|
|
|
|
manager.resolve();
|
|
});
|
|
|
|
});
|