3 if (typeof window === "undefined") {
16 function getStorageKey(loggerName) {
19 key += ":" + loggerName;
26 // Jasmine matcher to check the log level of a log object
27 self.toBeAtLevel = function toBeAtLevel(level) {
28 var log = this.actual;
29 var expectedWorkingCalls = log.levels.SILENT - log.levels[level.toUpperCase()];
30 var realLogMethod = window.console.log;
31 var priorCalls = realLogMethod.calls.length;
33 for (var ii = 0; ii < logMethods.length; ii++) {
34 var methodName = logMethods[ii];
35 log[methodName](methodName);
38 expect(realLogMethod.calls.length - priorCalls).toEqual(expectedWorkingCalls);
42 self.isCookieStorageAvailable = function isCookieStorageAvailable() {
43 if (window && window.document && window.document.cookie) {
44 // We need to check not just that the cookie objects are available, but that they work, because
45 // if we run from file:// URLs they appear present but are non-functional
46 window.document.cookie = "test=hi;";
48 var result = window.document.cookie.indexOf('test=hi') !== -1;
49 window.document.cookie = "test=; expires=Thu, 01 Jan 1970 00:00:01 GMT;";
57 self.isLocalStorageAvailable = function isLocalStorageAvailable() {
59 return !!window.localStorage;
65 self.isAnyLevelStoragePossible = function isAnyLevelStoragePossible() {
66 return self.isCookieStorageAvailable() || self.isLocalStorageAvailable();
69 self.toBeTheLevelStoredByCookie = function toBeTheLevelStoredByCookie(name) {
70 var level = this.actual.toUpperCase();
71 var storageKey = encodeURIComponent(getStorageKey(name));
73 if (window.document.cookie.indexOf(storageKey + "=" + level) !== -1) {
80 self.toBeTheLevelStoredByLocalStorage = function toBeTheLevelStoredByLocalStorage(name) {
81 var level = this.actual.toUpperCase();
83 if (window.localStorage[getStorageKey(name)] === level) {
90 // Jasmine matcher to check whether a given string was saved by loglevel
91 self.toBeTheStoredLevel = function toBeTheStoredLevel(name) {
92 return self.toBeTheLevelStoredByLocalStorage.call(this, name) ||
93 self.toBeTheLevelStoredByCookie.call(this, name);
96 self.setCookieStoredLevel = function setCookieStoredLevel(level, name) {
97 window.document.cookie =
98 encodeURIComponent(getStorageKey(name)) + "=" +
99 level.toUpperCase() + ";";
102 self.setLocalStorageStoredLevel = function setLocalStorageStoredLevel(level, name) {
103 window.localStorage[getStorageKey(name)] = level.toUpperCase();
106 self.setStoredLevel = function setStoredLevel(level, name) {
107 if (self.isCookieStorageAvailable()) {
108 self.setCookieStoredLevel(level, name);
110 if (self.isLocalStorageAvailable()) {
111 self.setLocalStorageStoredLevel(level, name);
115 self.clearStoredLevels = function clearStoredLevels() {
116 if (self.isLocalStorageAvailable()) {
117 window.localStorage.clear();
119 if (self.isCookieStorageAvailable()) {
120 var storedKeys = window.document.cookie.match(/(?:^|;\s)(loglevel(\:\w+)?)(?=\=)/g);
122 for (var i = 0; i < storedKeys.length; i++) {
123 window.document.cookie = storedKeys[i] + "=; expires=Thu, 01 Jan 1970 00:00:01 GMT;";
129 self.describeIf = function describeIf(condition, name, test) {
131 jasmine.getEnv().describe(name, test);
135 self.itIf = function itIf(condition, name, test) {
137 jasmine.getEnv().it(name, test);
141 // Forcibly reloads loglevel, and asynchronously hands the resulting log back to the given callback
142 // via Jasmine async magic
143 self.withFreshLog = function withFreshLog(toRun) {
144 require.undef("lib/loglevel");
148 waitsFor(function() {
149 require(['lib/loglevel'], function(log) {
152 return typeof freshLog !== "undefined";
160 // Wraps Jasmine's it(name, test) call to reload the loglevel dependency for the given test
161 self.itWithFreshLog = function itWithFreshLog(name, test) {
162 jasmine.getEnv().it(name, function() {
163 self.withFreshLog(test);