--- /dev/null
+"use strict";\r
+\r
+function consoleLogIsCalledBy(log, methodName) {\r
+ it(methodName + " calls console.log", function() {\r
+ log.setLevel(log.levels.TRACE);\r
+ log[methodName]("Log message for call to " + methodName);\r
+ expect(console.log.calls.length).toEqual(1);\r
+ });\r
+}\r
+\r
+function mockConsole() {\r
+ return {"log" : jasmine.createSpy("console.log")};\r
+}\r
+\r
+define(['../lib/loglevel'], function(log) {\r
+ var originalConsole = window.console;\r
+\r
+ describe("Fallback functionality:", function() {\r
+ describe("with no console present", function() {\r
+ beforeEach(function() {\r
+ window.console = undefined;\r
+ });\r
+\r
+ afterEach(function() {\r
+ window.console = originalConsole;\r
+ });\r
+\r
+ it("silent method calls are allowed", function() {\r
+ var result = log.setLevel(log.levels.SILENT);\r
+ log.trace("hello");\r
+\r
+ expect(result).toBeUndefined();\r
+ });\r
+\r
+ it("setting an active level gently returns an error string", function() {\r
+ var result = log.setLevel(log.levels.TRACE);\r
+ expect(result).toEqual("No console available for logging");\r
+ });\r
+\r
+ it("active method calls are allowed, once the active setLevel fails", function() {\r
+ log.setLevel(log.levels.TRACE);\r
+ log.trace("hello");\r
+ });\r
+\r
+ describe("if a console later appears", function () {\r
+ it("logging is re-enabled and works correctly when next used", function () {\r
+ log.setLevel(log.levels.WARN);\r
+\r
+ window.console = mockConsole();\r
+ log.error("error");\r
+\r
+ expect(window.console.log).toHaveBeenCalled();\r
+ });\r
+\r
+ it("logging is re-enabled but does nothing when used at a blocked level", function () {\r
+ log.setLevel(log.levels.WARN);\r
+\r
+ window.console = mockConsole();\r
+ log.trace("trace");\r
+\r
+ expect(window.console.log).not.toHaveBeenCalled();\r
+ });\r
+\r
+ it("changing level works correctly from that point", function () {\r
+ window.console = mockConsole();\r
+ var result = log.setLevel(log.levels.WARN);\r
+\r
+ expect(result).toBeUndefined();\r
+ });\r
+ });\r
+ });\r
+\r
+ describe("with a console that only supports console.log", function() {\r
+ beforeEach(function() {\r
+ window.console = mockConsole();\r
+ });\r
+\r
+ afterEach(function() {\r
+ window.console = originalConsole;\r
+ });\r
+\r
+ it("log can be set to silent", function() {\r
+ log.setLevel(log.levels.SILENT);\r
+ });\r
+\r
+ it("log can be set to an active level", function() {\r
+ log.setLevel(log.levels.ERROR);\r
+ });\r
+\r
+ consoleLogIsCalledBy(log, "trace");\r
+ consoleLogIsCalledBy(log, "debug");\r
+ consoleLogIsCalledBy(log, "info");\r
+ consoleLogIsCalledBy(log, "warn");\r
+ consoleLogIsCalledBy(log, "trace");\r
+ });\r
+ });\r
+});\r
+\r