Skip to content

Commit

Permalink
fix(file-watching): use canLogFileChange() to determine whether file:…
Browse files Browse the repository at this point in the history
…reload, stream:changed & browser:reload should log to the console - fixes #479
  • Loading branch information
shakyShane committed Apr 25, 2015
1 parent 86191d9 commit 164154e
Show file tree
Hide file tree
Showing 3 changed files with 153 additions and 4 deletions.
20 changes: 17 additions & 3 deletions lib/logger.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ module.exports.callbacks = {
* @param data
*/
"file:reload": function (bs, data) {
if (bs.options.get("logFileChanges")) {
if (canLogFileChange(bs, data)) {

if (data.path[0] === "*") {
return logger.info("{cyan:Reloading files that match: {magenta:%s", data.path);
Expand All @@ -64,7 +64,7 @@ module.exports.callbacks = {
*
*/
"browser:reload": function (bs) {
if (bs.getOption("logFileChanges")) {
if (canLogFileChange(bs)) {
logger.info("{cyan:Reloading Browsers...");
}
},
Expand All @@ -80,7 +80,7 @@ module.exports.callbacks = {
* @param data
*/
"stream:changed": function (bs, data) {
if (bs.getOption("logFileChanges")) {
if (canLogFileChange(bs)) {
var changed = data.changed;

logger.info("{cyan:%s %s changed} ({magenta:%s})",
Expand Down Expand Up @@ -271,3 +271,17 @@ function getKeyName(key) {
}
return utils.ucfirst(key);
}

/**
* Determine if file changes should be logged
* @param bs
* @param data
* @returns {boolean}
*/
function canLogFileChange(bs, data) {
if (data && data.log === false) {
return false;
}

return bs.options.get("logFileChanges");
}
24 changes: 23 additions & 1 deletion test/specs/api/init.reload.stream.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

var browserSync = require("../../../");

var sinon = require("sinon");
var sinon = require("sinon");
var assert = require("chai").assert;
var File = require("vinyl");

describe("API: .stream()", function () {
Expand Down Expand Up @@ -109,6 +110,27 @@ describe("API: .stream()", function () {
stream.write(new File({path: "core.css"}));
stream.write(new File({path: "index.html"}));
stream.end();
clock.tick();
sinon.assert.notCalled(emitterStub);
});
it("emits the stream:changed event with an array of changed files", function () {

var stream = browserSync.stream();

stream.write(new File({path: "/users/shane/styles.js"}));
stream.write(new File({path: "core.css"}));
stream.write(new File({path: "index.html"}));

stream.end();
clock.tick();

assert.isFalse(emitterStub.getCall(0).args[1].log);
assert.isFalse(emitterStub.getCall(1).args[1].log);
assert.isFalse(emitterStub.getCall(2).args[1].log);

sinon.assert.callCount(emitterStub, 7);
assert.equal(emitterStub.getCall(6).args[0], "stream:changed");
assert.equal(emitterStub.getCall(6).args[1].changed.length, 3);
sinon.assert.called(emitterStub);
});
});
113 changes: 113 additions & 0 deletions test/specs/logger/logger.files.changed.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
"use strict";

var browserSync = require("../../../");
var logger = require("../../../lib/logger").logger;
var callbacks = require("../../../lib/logger").callbacks;
var sinon = require("sinon");

describe("Logs file change events following stream:changed", function () {
var spy;
before(function () {
spy = sinon.stub(logger, "info");
});
afterEach(function () {
spy.reset();
});
after(function () {
logger.info.restore();
});
it("should log when straem:changed", function (done) {
browserSync.reset();
browserSync({
server: "./app",
files: "*.html",
open: false
}, function (err, bs) {
spy.reset();
callbacks["stream:changed"](bs, {changed: ["core.css"]});
sinon.assert.called(spy);
bs.cleanup(done);
});
});
it("should NOT log when stream:changed but logFileChanges = false", function (done) {
browserSync.reset();
browserSync({
server: "./app",
files: "*.html",
logFileChanges: false,
open: false
}, function (err, bs) {
spy.reset();
callbacks["stream:changed"](bs, {changed: ["core.css"]});
sinon.assert.notCalled(spy);
bs.cleanup(done);
});
});
it("should log when file:reload", function (done) {
browserSync.reset();
browserSync({
server: "./app",
files: "*.html",
open: false
}, function (err, bs) {
spy.reset();
callbacks["file:reload"](bs, {log: true, path: "style.css", cwd: "/users/shane"});
sinon.assert.called(spy);
bs.cleanup(done);
});
});
it("should NOT log when file:reload but log:false", function (done) {
browserSync.reset();
browserSync({
server: "./app",
files: "*.html",
open: false
}, function (err, bs) {
spy.reset();
callbacks["file:reload"](bs, {log: false, path: "style.css", cwd: "/users/shane"});
sinon.assert.notCalled(spy);
bs.cleanup(done);
});
});
it("should NOT log when options logFileChanges = false", function (done) {
browserSync.reset();
browserSync({
server: "./app",
files: "*.html",
logFileChanges: false,
open: false
}, function (err, bs) {
spy.reset();
callbacks["file:reload"](bs, {log: true, path: "style.css", cwd: "/users/shane"});
sinon.assert.notCalled(spy);
bs.cleanup(done);
});
});
it("should log when browser:reload", function (done) {
browserSync.reset();
browserSync({
server: "./app",
files: "*.html",
open: false
}, function (err, bs) {
spy.reset();
callbacks["browser:reload"](bs);
sinon.assert.called(spy);
bs.cleanup(done);
});
});
it("should NOT log when browser:reload but logFileChanges = false", function (done) {
browserSync.reset();
browserSync({
server: "./app",
files: "*.html",
logFileChanges: false,
open: false
}, function (err, bs) {
spy.reset();
callbacks["browser:reload"](bs);
sinon.assert.notCalled(spy);
bs.cleanup(done);
});
});
});

0 comments on commit 164154e

Please sign in to comment.