From 7b16428803940f89a4e2dbe37c6b01cb955fec2d Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 3 Feb 2015 17:43:33 -0800 Subject: [PATCH] [Logging] Add spec for log levels Add spec for log levels, to allow these to be passed at run-time in order to suppress logging during normal use. WTD-793. --- platform/framework/src/LogLevel.js | 14 +++++ platform/framework/test/LogLevelSpec.js | 84 +++++++++++++++++++++++++ platform/framework/test/suite.json | 1 + 3 files changed, 99 insertions(+) create mode 100644 platform/framework/src/LogLevel.js create mode 100644 platform/framework/test/LogLevelSpec.js diff --git a/platform/framework/src/LogLevel.js b/platform/framework/src/LogLevel.js new file mode 100644 index 0000000000..bcc4342e4d --- /dev/null +++ b/platform/framework/src/LogLevel.js @@ -0,0 +1,14 @@ +/*global define*/ + +define( + [], + function () { + "use strict"; + + function LogLevel() { + + } + + return LogLevel; + } +); \ No newline at end of file diff --git a/platform/framework/test/LogLevelSpec.js b/platform/framework/test/LogLevelSpec.js new file mode 100644 index 0000000000..c5593056f8 --- /dev/null +++ b/platform/framework/test/LogLevelSpec.js @@ -0,0 +1,84 @@ +/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ + +define( + ['../src/LogLevel'], + function (LogLevel) { + "use strict"; + + var LOG_METHODS = [ + 'error', + 'warn', + 'info', + 'log', + 'debug' + ]; + + describe("The logging level handler", function () { + var mockLog, + mockApp, + mockProvide, + mockDelegate, + mockMethods; + + function logAll(v) { + LOG_METHODS.forEach(function (m) { + mockLog[m](v); + mockDelegate[m](v); + }); + } + + function expectCalls(calls, v) { + LOG_METHODS.forEach(function (m) { + if (calls.indexOf(m) > -1) { + expect(mockMethods[m]).toHaveBeenCalledWith(v); + } else { + expect(mockMethods[m]).not.toHaveBeenCalledWith(v); + } + }); + } + + beforeEach(function () { + mockMethods = jasmine.createSpyObj("levels", LOG_METHODS); + mockLog = jasmine.createSpyObj('$log', LOG_METHODS); + mockApp = jasmine.createSpyObj('app', ['config']); + mockProvide = jasmine.createSpyObj('$provide', ['decorator']); + mockDelegate = jasmine.createSpyObj('$delegate', LOG_METHODS); + + LOG_METHODS.forEach(function (m) { + mockLog[m].andCallFake(mockMethods[m]); + mockDelegate[m].andCallFake(mockMethods[m]); + }); + + mockApp.config.andCallFake(function (callback) { + callback(mockProvide); + }); + + mockProvide.decorator.andCallFake(function (key, callback) { + // Only $log should be configured in any case + expect(key).toEqual('$log'); + callback(mockDelegate); + }); + }); + + it("defaults to 'warn' level", function () { + new LogLevel("garbage").configure(mockApp, mockLog); + logAll("test"); + expectCalls(['error', 'warn'], 'test'); + }); + + LOG_METHODS.forEach(function (m, i) { + it("supports log level '" + m + "'", function () { + // Note: This is sensitive to ordering of LOG_METHODS, + // which needs to be highest-level-first above. + var expected = LOG_METHODS.slice(0, i + 1), + message = "test " + m; + + new LogLevel(m).configure(mockApp, mockLog); + logAll(message); + expectCalls(expected, message); + }); + }); + + }); + } +); \ No newline at end of file diff --git a/platform/framework/test/suite.json b/platform/framework/test/suite.json index 93504f01af..eda75ec012 100644 --- a/platform/framework/test/suite.json +++ b/platform/framework/test/suite.json @@ -1,5 +1,6 @@ [ "FrameworkInitializer", + "LogLevel", "bootstrap/ApplicationBootstrapper", "load/Bundle", "load/BundleLoader",