wallet-core/node_modules/gulp-sym/test/index.js
2016-10-10 03:43:44 +02:00

284 lines
5.7 KiB
JavaScript

var expect = require('chai').expect
, fs = require('fs')
, p = require('path')
, gutil = require('gulp-util')
, symlink = require('../')
, file, dir
, rm = require('rimraf')
, async = require('async')
describe('gulp-symlink', function() {
before(function() {
file = new gutil.File({
path: './test/fixtures/test',
base: './test/fixtures/',
})
dir = new gutil.File({
path: './test/fixtures/test_dir',
base: './test/fixtures/',
})
})
it('should throw with no destination symlink', function(cb) {
try {
var stream = symlink()
} catch(e) {
expect(e).not.to.be.null
expect(e.message).to.contain('Missing destination link')
cb()
}
})
it('should symlink file', function(cb) {
var dest = './test/fixtures/links/test'
, stream = symlink(dest)
stream.on('data', function(newFile){
expect(newFile).to.equal(file)
})
stream.once('end', function() {
fs.readFile(dest, function(err, f) {
expect(err).to.be.null
expect(f.toString()).to.equal(fs.readFileSync(file.path).toString())
fs.lstat(dest, function(err, stats) {
expect(stats.isSymbolicLink()).to.be.true
cb()
})
})
})
stream.write(file)
stream.end()
})
it('should emit error because symlink exists', function(cb) {
var dest = './test/fixtures/links/test'
, stream = symlink(dest)
stream.on('data', function(newFile){
expect(newFile).to.equal(file)
})
stream.once('end', function() {
cb()
})
stream.on('error', function(e) {
expect(e).not.to.be.null
expect(e.message).to.contain('Destination file exists')
})
stream.write(file)
stream.end()
})
it('should overwrite symlink', function(cb) {
var dest = './test/fixtures/links/test'
, stream = symlink(dest, {force: true})
stream.on('data', function(newDir){ })
stream.once('end', function() {
fs.readFile(dest, function(err, f) {
expect(err).to.be.null
expect(f.toString()).to.equal(fs.readFileSync(file.path).toString())
fs.lstat(dest, function(err, stats) {
expect(stats.isSymbolicLink()).to.be.true
rm(dest, function() {
cb()
})
})
})
})
stream.write(file)
stream.end()
})
it('should symlink through File instance', function(cb) {
var dest = './test/fixtures/links/test'
, stream = symlink(new gutil.File({cwd: process.cwd(), path: dest}))
stream.on('data', function(newFile){ })
stream.once('end', function() {
fs.readFile(dest, function(err, f) {
expect(err).to.be.null
expect(f.toString()).to.equal(fs.readFileSync(file.path).toString())
fs.lstat(dest, function(err, stats) {
expect(stats.isSymbolicLink()).to.be.true
rm(dest, function() {
cb()
})
})
})
})
stream.write(file)
stream.end()
})
it('should symlink a directory', function(cb) {
var dest = './test/fixtures/links/test'
, stream = symlink(dest)
stream.on('data', function(newDir){ })
stream.once('end', function() {
fs.exists(dest, function(exists) {
expect(exists).to.be.true
fs.lstat(dest, function(err, stats) {
expect(stats.isSymbolicLink()).to.be.true
fs.stat(dest, function(err, stats) {
expect(stats.isDirectory()).to.be.true
rm(dest, function() {
cb()
})
})
})
})
})
stream.write(dir)
stream.end()
})
it('should symlink within a non-existent directory', function(cb) {
var dest = './test/fixtures/links/test/directory/symlink'
//testing function call
var stream = symlink(function(file) {
return p.resolve(file.path, '../../fixtures/links/test/directory/symlink')
})
stream.on('data', function(newFile){
expect(newFile).to.equal(file)
})
stream.once('end', function() {
fs.readFile(dest, function(err, f) {
expect(err).to.be.null
expect(f.toString()).to.equal(fs.readFileSync(file.path).toString())
fs.lstat(dest, function(err, stats) {
expect(stats.isSymbolicLink()).to.be.true
rm('./test/fixtures/links/test', function() {
cb()
})
})
})
})
stream.write(file)
stream.end()
})
it('should symlink 2 sources to 2 different destinations [array]', function(cb) {
var dests = ['./test/fixtures/links/test', './test/fixtures/links/test_dir']
var stream = symlink(dests)
stream.on('data', function(data) {
})
stream.on('end', function() {
for(var j in dests)
expect(fs.existsSync(dests[j])).to.be.true
async.map(dests, rm, cb)
})
stream.write(file)
stream.write(dir)
stream.end()
})
it('should symlink 2 sources to 2 different destinations [function]', function(cb) {
var dests = ['./test/fixtures/links/test', './test/fixtures/links/test_dir']
var i = 0
var stream = symlink(function(source) {
i++ //make sure this is called 2 times
return p.resolve(source.path, '../../fixtures/links', p.basename(source.path))
})
stream.on('data', function(data) {
})
stream.on('end', function() {
for(var j in dests)
expect(fs.existsSync(dests[j])).to.be.true
expect(i).to.equal(2)
async.map(dests, rm, cb)
})
stream.write(file)
stream.write(dir)
stream.end()
})
//Do we really want 100% coverage?
it('should emit an error on symlink creation', function(cb) {
fs.mkdirSync('./test/fixtures/badlinks', 600)
var dest = './test/fixtures/badlinks/test'
, stream = symlink(dest)
stream.on('data', function(newDir){ })
stream.once('end', function() {
rm.sync('./test/fixtures/badlinks')
//windows fs.mkdirSync has wrong rights, I'm cheating there...
if(require('os').platform() == 'win32')
cb()
})
stream.on('error', function(e) {
expect(e).not.to.be.null
expect(e.message).to.contain('EACCES')
cb()
})
stream.write(dir)
stream.end()
})
})