bifocal/node_modules/gulp-livereload/test/index.js

169 lines
4.4 KiB
JavaScript

'use strict';
var assert = require('assert');
var stream = require('readable-stream');
var path = require('path');
var sinon = require('sinon');
var tinyLr = require('tiny-lr');
var Vinyl = require('vinyl');
var glr = require('../index.js');
var fancyLog = {log: require('fancy-log')};
var cwd = process.cwd();
var file = new Vinyl({ base: cwd, cwd: cwd, path: cwd + '/style.css' });
var keys = ['basePath', 'key', 'cert', 'start', 'quiet', 'reloadPage'];
var srv, log;
function readable(callback) {
var r = new stream.Readable({
objectMode: true
});
callback.apply(r)
return r;
}
describe('gulp-livereload', function() {
beforeEach(function() {
srv = sinon.stub(tinyLr, 'Server');
log = sinon.stub(fancyLog, "log");
});
afterEach(function() {
keys.forEach(function(key) {
delete glr.options[key];
});
glr.server = null;
srv.restore();
log.restore();
});
it('does not work', function(done) {
var spy = sinon.spy();
srv.returns({ changed: spy , listen: function() {}});
readable(function() {
this.push(file);
this.push(null);
})
.pipe(glr({ basePath: cwd }))
.on('end', function() {
assert(spy.notCalled);
done();
});
});
it('works', function(done) {
var spy = sinon.spy();
srv.returns({ changed: spy , listen: function() {}});
var lr = glr();
glr.listen();
readable(function() {
this.push(file);
this.push(null);
})
.pipe(lr)
.on('end', function() {
assert(spy.calledWith(files(file.path)));
done();
});
});
it('listen callback', function() {
var spy = sinon.spy()
srv.returns({ listen: function(port, host, cb) {
cb();
}})
glr.listen(spy)
assert(spy.called)
})
it('middleware', function() {
assert(typeof glr.middleware === 'function');
});
it('non-standard port', function() {
var spy = sinon.spy();
srv.returns({ listen: spy });
glr.server = null;
glr.listen(2453);
assert(spy.firstCall.calledWith(2453));
glr.server = null;
glr.listen({ port: 9754 });
assert(spy.secondCall.calledWith(9754));
});
it('https', function() {
var https = require('https');
var spy = sinon.spy(https, 'createServer');
var read = require('fs').readFileSync;
var opts = {
key: read(path.join(__dirname, 'dev.key')),
cert: read(path.join(__dirname, 'dev.crt'))
};
srv.restore();
glr.listen(opts);
assert(spy.called);
glr.server.close();
});
it('vinyl', function() {
var spy = sinon.spy();
srv.returns({ changed: spy, listen: function() {} });
glr.listen();
glr.changed(file);
assert(spy.calledWith(files(file.path)));
});
it('reload', function() {
var spy = sinon.spy();
srv.returns({ changed: spy, listen: function() {} });
glr.listen();
glr.reload();
assert(spy.firstCall.calledWith(files(glr.options.reloadPage)));
glr.reload('not-index.html');
assert(spy.secondCall.calledWith(files('not-index.html')));
});
it('option: basePath', function(done) {
var spy = sinon.spy();
srv.returns({ changed: spy , listen: function() {}});
glr.listen();
readable(function() {
this.push(file);
this.push(null);
})
.pipe(glr({ basePath: process.cwd() }))
.on('end', function() {
assert(spy.calledWith(files('/style.css')));
done();
});
});
it('option: start', function(done) {
var spy = sinon.spy();
srv.returns({ changed: spy , listen: function() {}});
readable(function() {
this.push(file);
this.push(null);
})
.pipe(glr({ start: true }))
.on('end', function() {
assert(spy.calledWith(files(file.path)));
done();
});
});
it('option: quiet', function() {
var spy = sinon.spy();
var logSpy = sinon.spy();
log.returns(logSpy);
srv.returns({ changed: spy, listen: function() {} });
glr.listen({ quiet: true });
glr.changed(file);
assert(spy.calledWith(files(file.path)));
assert(logSpy.notCalled);
});
it('option: reloadPage', function() {
var spy = sinon.spy();
srv.returns({ changed: spy, listen: function() {} });
glr.listen({ reloadPage: 'not-index.html' });
glr.reload();
assert(spy.calledWith(files('not-index.html')));
});
});
function files(filePath) {
return { body: { files: [ filePath ] } };
}