diff options
Diffstat (limited to 'deps/npm/test/tap/bundled-dependencies.js')
-rw-r--r-- | deps/npm/test/tap/bundled-dependencies.js | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/deps/npm/test/tap/bundled-dependencies.js b/deps/npm/test/tap/bundled-dependencies.js new file mode 100644 index 0000000000..a49610e666 --- /dev/null +++ b/deps/npm/test/tap/bundled-dependencies.js @@ -0,0 +1,112 @@ +'use strict' +var test = require('tap').test +var common = require('../common-tap.js') +var path = require('path') +var rimraf = require('rimraf') +var mkdirp = require('mkdirp') +var fs = require('graceful-fs') +var tar = require('tar') +var zlib = require('zlib') +var basepath = path.resolve(__dirname, path.basename(__filename, '.js')) +var fixturepath = path.resolve(basepath, 'npm-test-bundled-deps') +var targetpath = path.resolve(basepath, 'target') +var Tacks = require('tacks') +var File = Tacks.File +var Dir = Tacks.Dir + +test('basic bundling', function (t) { + var fixture = new Tacks( + Dir({ + 'package.json': File({ + name: 'npm-test-files', + version: '1.2.5', + bundledDependencies: [ + 'addme' + ] + }), + node_modules: Dir({ + addme: Dir({ + 'index.js': File('') + }), + iggyme: Dir({ + 'index.js': File('') + }) + }) + }) + ) + withFixture(t, fixture, function (done) { + t.ok(fileExists('node_modules/addme'), 'bundled dep included') + t.notOk(fileExists('node_modules/iggyme'), 'unspecified dep not included') + done() + }) +}) + +test('scoped dep bundling', function (t) { + var fixture = new Tacks( + Dir({ + 'package.json': File({ + name: 'npm-test-files', + version: '1.2.5', + bundledDependencies: [ + '@foo/addme' + ] + }), + node_modules: Dir({ + '@foo': Dir({ + addme: Dir({ + 'index.js': File('') + }), + iggyme: Dir({ + 'index.js': File('') + }) + }) + }) + }) + ) + withFixture(t, fixture, function (done) { + t.ok(fileExists('node_modules/@foo/addme'), 'bundled dep included') + t.notOk( + fileExists('node_modules/@foo/iggyme'), + 'unspecified dep not included') + done() + }) +}) + +function fileExists (file) { + try { + return !!fs.statSync(path.resolve(targetpath, 'package', file)) + } catch (_) { + return false + } +} + +function withFixture (t, fixture, tester) { + fixture.create(fixturepath) + mkdirp.sync(targetpath) + common.npm(['pack', fixturepath], {cwd: basepath}, extractAndCheck) + function extractAndCheck (err, code) { + if (err) throw err + t.is(code, 0, 'pack went ok') + extractTarball(checkTests) + } + function checkTests (err) { + if (err) throw err + tester(removeAndDone) + } + function removeAndDone (err) { + if (err) throw err + fixture.remove(fixturepath) + rimraf.sync(basepath) + t.done() + } +} + +function extractTarball (cb) { + // Unpack to disk so case-insensitive filesystems are consistent + fs.createReadStream(path.join(basepath, 'npm-test-files-1.2.5.tgz')) + .pipe(zlib.Unzip()) + .on('error', cb) + .pipe(tar.Extract(targetpath)) + .on('error', cb) + .on('end', function () { cb() }) +} |