diff options
Diffstat (limited to 'node_modules/gulp-sym/test/index.js')
-rw-r--r-- | node_modules/gulp-sym/test/index.js | 283 |
1 files changed, 283 insertions, 0 deletions
diff --git a/node_modules/gulp-sym/test/index.js b/node_modules/gulp-sym/test/index.js new file mode 100644 index 000000000..2e4508e53 --- /dev/null +++ b/node_modules/gulp-sym/test/index.js @@ -0,0 +1,283 @@ +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() + + }) + +}) |