Skip to content

Commit

Permalink
Move jshint configuration into .jshintrc files and lint test-suite.
Browse files Browse the repository at this point in the history
  • Loading branch information
jonnyreeves committed Apr 18, 2015
1 parent 99661cf commit 6cec385
Show file tree
Hide file tree
Showing 5 changed files with 183 additions and 162 deletions.
12 changes: 12 additions & 0 deletions .jshintrc
@@ -0,0 +1,12 @@
{
"curly": true,
"eqeqeq": true,
"undef": true,
"browser": true,
"strict": true,
"globals": {
"console": true,
"define": true,
"module": true
}
}
2 changes: 1 addition & 1 deletion gulpfile.js
Expand Up @@ -27,7 +27,7 @@ gulp.task('bower_version', function () {
gulp.task('version', [ 'src_version', 'bower_version' ]);

gulp.task('lint', [ 'version' ], function () {
return gulp.src(srcFile)
return gulp.src([ srcFile, 'test-src/*.js' ])
.pipe(jshint())
.pipe(jshint.reporter('default'))
.pipe(jshint.reporter('fail'));
Expand Down
3 changes: 0 additions & 3 deletions src/logger.js
Expand Up @@ -3,9 +3,6 @@
* Jonny Reeves, http://jonnyreeves.co.uk/
* js-logger may be freely distributed under the MIT license.
*/

/*jshint sub:true*/
/*global console:true,define:true, module:true*/
(function (global) {
"use strict";

Expand Down
8 changes: 8 additions & 0 deletions test-src/.jshintrc
@@ -0,0 +1,8 @@
{
"extends": "../.jshintrc",
"globals": {
"Logger": true,
"QUnit": true,
"sinon": true
}
}
320 changes: 162 additions & 158 deletions test-src/loggertests.js
@@ -1,158 +1,162 @@
module("Logger", {
setup: function () {
var calls = [];

this.calls = calls;
this.logger = window.Logger;

this.logger.setHandler(function (messages, context) {
calls.push({ messages: messages, context: context });
});
}
});

test("Global Logger - Log messages routed to logger function", function () {
var logger = this.logger;

// Enable all log messages.
logger.setLevel(logger.DEBUG);

// Route some messages through to the logFunc.
logger.debug("A debug message");
logger.info("An info message");
logger.warn("A warning message");
logger.error("An error message");

// Check they were received.
equal(this.calls[0].messages[0], "A debug message");
strictEqual(this.calls[0].context.level, logger.DEBUG);

equal(this.calls[1].messages[0], "An info message");
strictEqual(this.calls[1].context.level, logger.INFO);

equal(this.calls[2].messages[0], "A warning message");
strictEqual(this.calls[2].context.level, logger.WARN);

equal(this.calls[3].messages[0], "An error message");
strictEqual(this.calls[3].context.level, logger.ERROR);
});

test("Global Logger.enabledFor", function () {
var logger = this.logger;

logger.setLevel(logger.OFF);
equal(logger.enabledFor(logger.DEBUG), false);
equal(logger.enabledFor(logger.INFO), false);
equal(logger.enabledFor(logger.WARN), false);
equal(logger.enabledFor(logger.ERROR), false);

logger.setLevel(logger.DEBUG);
equal(logger.enabledFor(logger.DEBUG), true);
equal(logger.enabledFor(logger.INFO), true);
equal(logger.enabledFor(logger.WARN), true);
equal(logger.enabledFor(logger.ERROR), true);

logger.setLevel(logger.INFO);
equal(logger.enabledFor(logger.DEBUG), false);
equal(logger.enabledFor(logger.INFO), true);
equal(logger.enabledFor(logger.WARN), true);
equal(logger.enabledFor(logger.ERROR), true);

logger.setLevel(logger.WARN);
equal(logger.enabledFor(logger.DEBUG), false);
equal(logger.enabledFor(logger.INFO), false);
equal(logger.enabledFor(logger.WARN), true);
equal(logger.enabledFor(logger.ERROR), true);

logger.setLevel(logger.ERROR);
equal(logger.enabledFor(logger.DEBUG), false);
equal(logger.enabledFor(logger.INFO), false);
equal(logger.enabledFor(logger.WARN), false);
equal(logger.enabledFor(logger.ERROR), true);
});

test("Named logger messages not routed to global logger", function () {
var logger = this.logger;
var namedLogger = this.logger.get("getLogger");

logger.setLevel(Logger.DEBUG);
namedLogger.setLevel(Logger.DEBUG);

namedLogger.info("Message via get logger");

ok(this.calls.length === 1, "Log message was only routed via named logger.");
});

test("Named logger, same instance returned", function () {
strictEqual(this.logger.get("myLogger"), this.logger.get("myLogger"), "Exact same logger instance returned");
});

test("Named logger setLevel does not affect global logger", function () {
var named = this.logger.get("MyLogger");

// Set the get logger at a lower level than the global logger.
this.logger.setLevel(Logger.OFF);
named.setLevel(Logger.DEBUG);

named.debug("Debug message via nemd logger");
this.logger.debug("Debug message via Global Logger");

// Check the log message was routed correctly.
ok(this.calls.length === 1, "LoggerFunc was invoked once");
equal(this.calls[0].context.name, "MyLogger");
});

test("Logger.log convenience method", function () {
this.logger.setLevel(Logger.INFO);
this.logger.log("log message");

ok(this.calls.length === 1);
strictEqual(this.calls[0].context.level, Logger.INFO, "Logger.log message routed at INFO level");
});

test("Named logger.log convenience method", function () {
var named = this.logger.get("logHelper");
named.setLevel(Logger.INFO);
named.log("log message");

ok(this.calls.length === 1);
strictEqual(this.calls[0].context.level, Logger.INFO, "Logger.log message routed at INFO level");
});

test("Logger.setLevel - Modify log filter level of all named loggers", function () {
var logger = this.logger;
var named = logger.get("NamedA");

// No no log messages will be routed through this logger.
named.setLevel(logger.OFF);

// Switch the global log level to DEBUG, should affect all named loggers
logger.setLevel(logger.DEBUG);

named.debug("debug message");

ok(this.calls.length === 1, "Logger.setLevel() sets log filter level for all named loggers");
});

test("Logger.useDefaults logs to console", function () {
var logger = this.logger;

var sandbox = sinon.sandbox.create();
sandbox.stub(console, "log");
sandbox.stub(console, "info");
sandbox.stub(console, "warn");
sandbox.stub(console, "error");

logger.useDefaults();
logger.debug("debug message");
logger.info("info message");
logger.warn("warning message");
logger.error("error message");

ok(console.log.calledOnce, "logger.debug calls console.log");
ok(console.info.calledOnce, "logger.info calls console.info");
ok(console.warn.calledOnce, "logger.warn calls console.warn");
ok(console.error.calledOnce, "logger.error calls console.error");

sandbox.restore();
});
(function () {
"use strict";

QUnit.module("js-logger", {
beforeEach: function () {
var calls = [];

this.calls = calls;
this.logger = window.Logger;

this.logger.setHandler(function (messages, context) {
calls.push({ messages: messages, context: context });
});
}
});

QUnit.test("Global Logger - Log messages routed to logger function", function (assert) {
var logger = this.logger;

// Enable all log messages.
logger.setLevel(logger.DEBUG);

// Route some messages through to the logFunc.
logger.debug("A debug message");
logger.info("An info message");
logger.warn("A warning message");
logger.error("An error message");

// Check they were received.
assert.equal(this.calls[0].messages[0], "A debug message");
assert.strictEqual(this.calls[0].context.level, logger.DEBUG);

assert.equal(this.calls[1].messages[0], "An info message");
assert.strictEqual(this.calls[1].context.level, logger.INFO);

assert.equal(this.calls[2].messages[0], "A warning message");
assert.strictEqual(this.calls[2].context.level, logger.WARN);

assert.equal(this.calls[3].messages[0], "An error message");
assert.strictEqual(this.calls[3].context.level, logger.ERROR);
});

QUnit.test("Global Logger.enabledFor", function (assert) {
var logger = this.logger;

logger.setLevel(logger.OFF);
assert.equal(logger.enabledFor(logger.DEBUG), false);
assert.equal(logger.enabledFor(logger.INFO), false);
assert.equal(logger.enabledFor(logger.WARN), false);
assert.equal(logger.enabledFor(logger.ERROR), false);

logger.setLevel(logger.DEBUG);
assert.equal(logger.enabledFor(logger.DEBUG), true);
assert.equal(logger.enabledFor(logger.INFO), true);
assert.equal(logger.enabledFor(logger.WARN), true);
assert.equal(logger.enabledFor(logger.ERROR), true);

logger.setLevel(logger.INFO);
assert.equal(logger.enabledFor(logger.DEBUG), false);
assert.equal(logger.enabledFor(logger.INFO), true);
assert.equal(logger.enabledFor(logger.WARN), true);
assert.equal(logger.enabledFor(logger.ERROR), true);

logger.setLevel(logger.WARN);
assert.equal(logger.enabledFor(logger.DEBUG), false);
assert.equal(logger.enabledFor(logger.INFO), false);
assert.equal(logger.enabledFor(logger.WARN), true);
assert.equal(logger.enabledFor(logger.ERROR), true);

logger.setLevel(logger.ERROR);
assert.equal(logger.enabledFor(logger.DEBUG), false);
assert.equal(logger.enabledFor(logger.INFO), false);
assert.equal(logger.enabledFor(logger.WARN), false);
assert.equal(logger.enabledFor(logger.ERROR), true);
});

QUnit.test("Named logger messages not routed to global logger", function (assert) {
var logger = this.logger;
var namedLogger = this.logger.get("getLogger");

logger.setLevel(Logger.DEBUG);
namedLogger.setLevel(Logger.DEBUG);

namedLogger.info("Message via get logger");

assert.ok(this.calls.length === 1, "Log message was only routed via named logger.");
});

QUnit.test("Named logger, same instance returned", function (assert) {
assert.strictEqual(this.logger.get("myLogger"), this.logger.get("myLogger"), "Exact same logger instance returned");
});

QUnit.test("Named logger setLevel does not affect global logger", function (assert) {
var named = this.logger.get("MyLogger");

// Set the get logger at a lower level than the global logger.
this.logger.setLevel(Logger.OFF);
named.setLevel(Logger.DEBUG);

named.debug("Debug message via nemd logger");
this.logger.debug("Debug message via Global Logger");

// Check the log message was routed correctly.
assert.ok(this.calls.length === 1, "LoggerFunc was invoked once");
assert.equal(this.calls[0].context.name, "MyLogger");
});

QUnit.test("Logger.log convenience method", function (assert) {
this.logger.setLevel(Logger.INFO);
this.logger.log("log message");

assert.ok(this.calls.length === 1);
assert.strictEqual(this.calls[0].context.level, Logger.INFO, "Logger.log message routed at INFO level");
});

QUnit.test("Named logger.log convenience method", function (assert) {
var named = this.logger.get("logHelper");
named.setLevel(Logger.INFO);
named.log("log message");

assert.ok(this.calls.length === 1);
assert.strictEqual(this.calls[0].context.level, Logger.INFO, "Logger.log message routed at INFO level");
});

QUnit.test("Logger.setLevel - Modify log filter level of all named loggers", function (assert) {
var logger = this.logger;
var named = logger.get("NamedA");

// No no log messages will be routed through this logger.
named.setLevel(logger.OFF);

// Switch the global log level to DEBUG, should affect all named loggers
logger.setLevel(logger.DEBUG);

named.debug("debug message");

assert.ok(this.calls.length === 1, "Logger.setLevel() sets log filter level for all named loggers");
});

QUnit.test("Logger.useDefaults logs to console", function (assert) {
var logger = this.logger;

var sandbox = sinon.sandbox.create();
sandbox.stub(console, "log");
sandbox.stub(console, "info");
sandbox.stub(console, "warn");
sandbox.stub(console, "error");

logger.useDefaults();
logger.debug("debug message");
logger.info("info message");
logger.warn("warning message");
logger.error("error message");

assert.ok(console.log.calledOnce, "logger.debug calls console.log");
assert.ok(console.info.calledOnce, "logger.info calls console.info");
assert.ok(console.warn.calledOnce, "logger.warn calls console.warn");
assert.ok(console.error.calledOnce, "logger.error calls console.error");

sandbox.restore();
});
}());

0 comments on commit 6cec385

Please sign in to comment.