tar-pack
Version:
Package and un-package modules of some sort (in tar/gz bundles).
110 lines (107 loc) • 4.63 kB
JavaScript
var tar = require('../')
var path = require('path')
var rfile = require('rfile')
var rimraf = require('rimraf').sync
var mkdir = require('mkdirp').sync
var read = require('fs').createReadStream
var write = require('fs').createWriteStream
var assert = require('assert')
beforeEach(function () {
rimraf(__dirname + '/output')
})
afterEach(function () {
rimraf(__dirname + '/output')
})
describe('tarball.pipe(unpack(directory, callback))', function () {
it('unpacks the tarball into the directory', function (done) {
read(__dirname + '/fixtures/packed.tar').pipe(tar.unpack(__dirname + '/output/unpacked', function (err) {
if (err) return done(err)
assert.equal(rfile('./output/unpacked/bar.txt'), rfile('./fixtures/to-pack/bar.txt'))
assert.equal(rfile('./output/unpacked/foo.txt'), rfile('./fixtures/to-pack/foo.txt'))
done()
}))
})
it('unpacks the tarball into the directory without deleting existing files', function (done) {
read(__dirname + '/fixtures/packed-file.txt').pipe(tar.unpack(__dirname + '/output/unpacked', function (err) {
if (err) return done(err)
read(__dirname + '/fixtures/packed.tar').pipe(tar.unpack(__dirname + '/output/unpacked', {keepFiles: true}, function (err) {
if (err) return done(err)
assert.equal(rfile('./output/unpacked/index.js'), rfile('./fixtures/packed-file.txt'))
done()
}))
}))
})
})
describe('tarball.pipe(unpack(directory, { strip: 0 }, callback))', function () {
it('unpacks the tarball into the directory with subdir package', function (done) {
read(__dirname + '/fixtures/packed.tar').pipe(tar.unpack(__dirname + '/output/unpacked', { strip: 0 } , function (err) {
if (err) return done(err)
assert.equal(rfile('./output/unpacked/package/bar.txt'), rfile('./fixtures/to-pack/bar.txt'))
assert.equal(rfile('./output/unpacked/package/foo.txt'), rfile('./fixtures/to-pack/foo.txt'))
done()
}))
})
})
describe('gziptarball.pipe(unpack(directory, callback))', function () {
it('unpacks the tarball into the directory', function (done) {
read(__dirname + '/fixtures/packed.tar.gz').pipe(tar.unpack(__dirname + '/output/unpacked', function (err) {
if (err) return done(err)
assert.equal(rfile('./output/unpacked/bar.txt'), rfile('./fixtures/to-pack/bar.txt'))
assert.equal(rfile('./output/unpacked/foo.txt'), rfile('./fixtures/to-pack/foo.txt'))
done()
}))
})
})
describe('file.pipe(unpack(directory, callback))', function () {
it('copies the file into the directory', function (done) {
read(__dirname + '/fixtures/packed-file.txt').pipe(tar.unpack(__dirname + '/output/unpacked', function (err) {
if (err) return done(err)
assert.equal(rfile('./output/unpacked/index.js'), rfile('./fixtures/packed-file.txt'))
done()
}))
})
})
describe('pack(directory).pipe(tarball)', function () {
it('packs the directory into the output', function (done) {
var called = false
mkdir(__dirname + '/output/')
tar.pack(__dirname + '/fixtures/to-pack').pipe(write(__dirname + '/output/packed.tar.gz'))
.on('error', function (err) {
if (called) return
called = true
done(err)
})
.on('close', function () {
if (called) return
called = true
read(__dirname + '/output/packed.tar.gz').pipe(tar.unpack(__dirname + '/output/unpacked', function (err) {
if (err) return done(err)
assert.equal(rfile('./output/unpacked/bar.txt'), rfile('./fixtures/to-pack/bar.txt'))
assert.equal(rfile('./output/unpacked/foo.txt'), rfile('./fixtures/to-pack/foo.txt'))
done()
}))
})
})
})
describe('pack(directory, { fromBase: true }).pipe(tarball)', function () {
it('packs the directory with input dir as base dir', function (done) {
var called = false
mkdir(__dirname + '/output/')
tar.pack(__dirname + '/fixtures/to-pack', { fromBase: true }).pipe(write(__dirname + '/output/packed.tar.gz'))
.on('error', function (err) {
if (called) return
called = true
done(err)
})
.on('close', function () {
if (called) return
called = true
read(__dirname + '/output/packed.tar.gz').pipe(tar.unpack(__dirname + '/output/unpacked', { strip: 0 }, function (err) {
if (err) return done(err)
assert.equal(rfile('./output/unpacked/bar.txt'), rfile('./fixtures/to-pack/bar.txt'))
assert.equal(rfile('./output/unpacked/foo.txt'), rfile('./fixtures/to-pack/foo.txt'))
done()
}))
})
})
})