bower-installer
Version:
Tool for installing bower dependencies that won't include entire repos
287 lines (263 loc) • 12 kB
JavaScript
var path = require('path');
var rimraf = require('rimraf');
var fs = require('fs');
var async = require('async');
var exec = require('child_process').exec;
var TIMEOUT = 40000;
function expectFilesToExist(files, run) {
async.each(files, function (file, callback) {
fs.existsSync(path.join(process.cwd(), file)) ? callback() : callback('Cannot find ' + file);
}, function (err) {
expect(err).toBeNull();
run();
});
}
function expectDirectoriesToNotExist(directories, run) {
async.each(directories, function (directory, callback) {
fs.existsSync(path.join(process.cwd(), directory)) ? callback('Found ' + directory) : callback();
}, function (err) {
expect(err).toBeNull();
run();
});
}
(function cleanDirs() {
[
'test/badBowerJson',
'test/basic',
'test/bootstrap',
'test/dropPackageName',
'test/full',
'test/glob',
'test/ignore',
'test/keyword',
'test/mappedFolders',
'test/mapping',
'test/multiDirGlob',
'test/multiDirGlobWithSameNestedFolder',
'test/multiMain',
'test/multiPath',
'test/noInstall',
'test/regExp'
].forEach(function (directory) {
[
'bower_components',
'build'
].forEach(function (subDir) {
rimraf(path.join(process.cwd(), directory, subDir), function () {});
});
});
})();
describe("Bower Installer", function () {
it('Should pass badBowerJson', function (run) {
exec('node ../../bower-installer.js', {cwd: path.join(process.cwd(), 'test/badBowerJson')}, function (err, stdout, stderr) {
expect(err).not.toBeNull();
expect(run).toThrow();
});
}, TIMEOUT);
it('Should pass basic', function (run) {
exec('node ../../bower-installer.js', {cwd: path.join(process.cwd(), 'test/basic')}, function (err, stdout, stderr) {
expect(err).toBeNull();
expectFilesToExist([
'test/basic/build/src/jquery/jquery.js',
'test/basic/build/src/jquery-ui/jquery-ui.js'
], run);
});
}, TIMEOUT);
it('Should remove bower_components directory', function (run) {
exec('node ../../bower-installer.js -r', {cwd: path.join(process.cwd(), 'test/basic')}, function (err, stdout, stderr) {
expect(err).toBeNull();
expectFilesToExist([
'test/basic/build/src/jquery/jquery.js',
'test/basic/build/src/jquery-ui/jquery-ui.js'
], run);
expect(fs.existsSync(path.join(process.cwd(), 'bower_components'))).toBeFalsy();
});
}, TIMEOUT);
it('Should pass bootstrap', function (run) {
exec('node ../../bower-installer.js', {cwd: path.join(process.cwd(), 'test/bootstrap')}, function (err, stdout, stderr) {
expect(err).toBeNull();
expectFilesToExist([
'test/bootstrap/build/src/bootstrap/bootstrap.js',
'test/bootstrap/build/src/bootstrap/glyphicons-halflings-regular.eot',
'test/bootstrap/build/src/bootstrap/glyphicons-halflings-regular.woff',
'test/bootstrap/build/src/bootstrap/glyphicons-halflings-regular.ttf',
'test/bootstrap/build/src/bootstrap/glyphicons-halflings-regular.svg',
'test/bootstrap/build/src/bootstrap/bootstrap.css',
'test/bootstrap/build/src/jquery/jquery.js'
], run);
});
}, TIMEOUT);
it('Should pass dropComponentName', function (run) {
exec('node ../../bower-installer.js', {cwd: path.join(process.cwd(), 'test/dropPackageName')}, function (err, stdout, stderr) {
expect(err).toBeNull();
expectFilesToExist([
'test/dropPackageName/build/src/jquery.js',
'test/dropPackageName/build/src/jquery-ui.js'
], run);
});
}, TIMEOUT);
it('Should pass full', function (run) {
exec('node ../../bower-installer.js', {cwd: path.join(process.cwd(), 'test/full')}, function (err, stdout, stderr) {
expect(err).toBeNull();
expectFilesToExist([
'test/full/build/src/backbone-nested/backbone-nested-models.js',
'test/full/build/src/backbone/backbone.js',
'test/full/build/src/buster-jquery-assertions/buster-jquery-assertions.js',
'test/full/build/src/buster.js/buster-test.css',
'test/full/build/src/datejs/date.js',
'test/full/build/src/jquery-mousewheel/jquery.mousewheel.js',
'test/full/build/src/jquery.jscrollpane/jquery.jscrollpane.js',
'test/full/build/src/jquery.jscrollpane/jquery.jscrollpane.css',
'test/full/build/src/jquery.transit/jquery.transit.js',
'test/full/build/src/json2/json2.js',
'test/full/build/src/requirejs-text/text.js',
'test/full/build/src/underscore.string/underscore.string.min.js',
'test/full/build/src/underscore/underscore.js',
'test/full/build/src/requirejs/require.js',
'test/full/build/src/buster.js/buster-test.js',
'test/full/build/src/jquery/jquery.js',
'test/full/build/src/d3/d3.js',
'test/full/build/src/jquery-ui/jquery-ui.js',
'test/full/build/src/speak.js/speakGenerator.js',
], run);
});
}, TIMEOUT);
it('Should pass glob', function (run) {
exec('node ../../bower-installer.js', {cwd: path.join(process.cwd(), 'test/glob')}, function (err, stdout, stderr) {
expect(err).toBeNull();
expectFilesToExist([
'test/glob/build/src/datejs/date-af-ZA.js',
'test/glob/build/src/datejs/date-ar-AE.js',
'test/glob/build/src/datejs/date-ar-BH.js',
'test/glob/build/src/datejs/date-ar-DZ.js',
'test/glob/build/src/datejs/date-ar-EG.js',
'test/glob/build/src/datejs/date-ar-IQ.js',
'test/glob/build/src/datejs/date-ar-JO.js',
'test/glob/build/src/datejs/date-ar-KW.js',
'test/glob/build/src/datejs/date-ar-LB.js',
'test/glob/build/src/datejs/date-uz-Cyrl-UZ.js',
'test/glob/build/src/datejs/date-uz-Latn-UZ.js',
'test/glob/build/src/datejs/date-vi-VN.js',
'test/glob/build/src/datejs/date-xh-ZA.js',
'test/glob/build/src/datejs/date-zh-CN.js',
'test/glob/build/src/datejs/date-zh-HK.js',
'test/glob/build/src/datejs/date-zh-MO.js',
'test/glob/build/src/datejs/date-zh-SG.js',
'test/glob/build/src/datejs/date-zh-TW.js',
'test/glob/build/src/datejs/date-zu-ZA.js',
'test/glob/build/src/datejs/date.js'
], run);
});
}, TIMEOUT);
it('Should pass ignore', function (run) {
exec('node ../../bower-installer.js', {cwd: path.join(process.cwd(), 'test/ignore')}, function (err, stdout, stderr) {
expect(err).toBeNull();
expectFilesToExist([
'test/ignore/build/src/ember-model/ember-model.js',
'test/ignore/build/src/jquery/jquery.js'
], run);
});
}, TIMEOUT);
it('Should pass keyword', function (run) {
exec('node ../../bower-installer.js', {cwd: path.join(process.cwd(), 'test/keyword')}, function (err, stdout, stderr) {
expect(err).toBeNull();
expectFilesToExist([
'test/keyword/build/bootstrap/3.0.3/css/bootstrap.css',
'test/keyword/build/bootstrap/3.0.3/fonts/glyphicons-halflings-regular.eot',
'test/keyword/build/bootstrap/3.0.3/fonts/glyphicons-halflings-regular.svg',
'test/keyword/build/bootstrap/3.0.3/fonts/glyphicons-halflings-regular.ttf',
'test/keyword/build/bootstrap/3.0.3/fonts/glyphicons-halflings-regular.woff',
'test/keyword/build/bootstrap/3.0.3/js/bootstrap.js'
], run);
});
}, TIMEOUT);
it('Should pass mappedFolders', function (run) {
exec('node ../../bower-installer.js', {cwd: path.join(process.cwd(), 'test/mappedFolders')}, function (err, stdout, stderr) {
expect(err).toBeNull();
expectFilesToExist([
'test/mappedFolders/build/src/jquery/jquery.js',
'test/mappedFolders/build/src/jquery-ui/jquery-ui.min.js',
'test/mappedFolders/build/src/jquery-ui/base/images/ui-bg_flat_0_aaaaaa_40x100.png',
'test/mappedFolders/build/src/jquery-ui/base/jquery-ui.min.css'
], run);
});
}, TIMEOUT);
it('Should pass mapping', function (run) {
exec('node ../../bower-installer.js', {cwd: path.join(process.cwd(), 'test/mapping')}, function (err, stdout, stderr) {
expect(err).toBeNull();
expectFilesToExist([
'test/mapping/build/src/ember-bootstrap/ember-bootstrap.js',
'test/mapping/build/src/ember-dialog/subdirectory1/subdirectory2/ember.dialog.min.js',
'test/mapping/build/src/jquery/jquery.js',
'test/mapping/build/src/jquery-ui/jquery-ui.js'
], run);
});
}, TIMEOUT);
it('Should pass multiDirGlob', function (run) {
exec('node ../../bower-installer.js', {cwd: path.join(process.cwd(), 'test/multiDirGlob')}, function (err, stdout, stderr) {
expect(err).toBeNull();
expectFilesToExist([
"test/multiDirGlob/build/src/bootstrap/css/bootstrap-theme.css",
"test/multiDirGlob/build/src/bootstrap/css/bootstrap-theme.css.map",
"test/multiDirGlob/build/src/bootstrap/css/bootstrap-theme.min.css",
"test/multiDirGlob/build/src/bootstrap/fonts/glyphicons-halflings-regular.eot",
"test/multiDirGlob/build/src/bootstrap/fonts/glyphicons-halflings-regular.svg",
"test/multiDirGlob/build/src/bootstrap/fonts/glyphicons-halflings-regular.ttf",
"test/multiDirGlob/build/src/bootstrap/fonts/glyphicons-halflings-regular.woff",
"test/multiDirGlob/build/src/bootstrap/js/bootstrap.min.js",
"test/multiDirGlob/build/src/bootstrap/js/bootstrap.js",
"test/multiDirGlob/build/src/bootstrap/css/bootstrap.css",
"test/multiDirGlob/build/src/bootstrap/css/bootstrap.min.css",
"test/multiDirGlob/build/src/jquery/jquery.js",
"test/multiDirGlob/build/src/bootstrap/css/bootstrap.css.map"
], run);
});
}, TIMEOUT);
it('Should pass multiDirGlobWithSameNestedFolder', function (run) {
exec('node ../../bower-installer.js', {cwd: path.join(process.cwd(), 'test/multiDirGlobWithSameNestedFolder')}, function (err, stdout, stderr) {
expect(err).toBeNull();
expectFilesToExist([
"test/multiDirGlobWithSameNestedFolder/build/src/ace/lib/oop.js"
], run);
});
}, TIMEOUT);
it('Should pass multiMain', function (run) {
exec('node ../../bower-installer.js', {cwd: path.join(process.cwd(), 'test/multiMain')}, function (err, stdout, stderr) {
expect(err).toBeNull();
expectFilesToExist([
'test/multiMain/build/src/datejs/date.js'
], run);
});
}, TIMEOUT);
it('Should pass multiPath', function (run) {
exec('node ../../bower-installer.js', {cwd: path.join(process.cwd(), 'test/multiPath')}, function (err, stdout, stderr) {
expect(err).toBeNull();
expectFilesToExist([
'test/multiPath/build/src/buster-jquery-assertions/buster-jquery-assertions.js',
'test/multiPath/build/css/buster.js/buster-test.css',
'test/multiPath/build/src/buster.js/buster-test.js'
], run);
});
}, TIMEOUT);
it('Should pass noInstall', function (run) {
exec('node ../../bower-installer.js', {cwd: path.join(process.cwd(), 'test/noInstall')}, function (err, stdout, stderr) {
expect(err).toBeNull();
expectDirectoriesToNotExist([
'test/noInstall/build'
], run);
});
}, TIMEOUT);
it('Should pass regExp', function (run) {
exec('node ../../bower-installer.js', {cwd: path.join(process.cwd(), 'test/regExp')}, function (err, stdout, stderr) {
expect(err).toBeNull();
expectFilesToExist([
'test/regExp/build/src/Asset/Lib/flair/Font/ubuntu-r-webfont.woff',
'test/regExp/build/src/Asset/Lib/flair/Font/ubuntu-r-webfont.woff2',
'test/regExp/build/src/Asset/Lib/flair/Font/ubuntu-r-webfont.eot',
'test/regExp/build/src/Asset/Lib/flair/Font/ubuntu-r-webfont.ttf',
'test/regExp/build/src/Style/Lib/flair/ubuntu.font.scss',
'test/regExp/build/src/Style/Lib/flair/base.scss'
], run);
});
}, TIMEOUT);
});