1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/testing/mochitest/tests/SimpleTest/LogController.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,96 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +var LogController = {}; //create the logger object 1.9 + 1.10 +LogController.counter = 0; //current log message number 1.11 +LogController.listeners = []; 1.12 +LogController.logLevel = { 1.13 + FATAL: 50, 1.14 + ERROR: 40, 1.15 + WARNING: 30, 1.16 + INFO: 20, 1.17 + DEBUG: 10 1.18 +}; 1.19 + 1.20 +/* set minimum logging level */ 1.21 +LogController.logLevelAtLeast = function(minLevel) { 1.22 + if (typeof(minLevel) == 'string') { 1.23 + minLevel = LogController.logLevel[minLevel]; 1.24 + } 1.25 + return function (msg) { 1.26 + var msgLevel = msg.level; 1.27 + if (typeof(msgLevel) == 'string') { 1.28 + msgLevel = LogController.logLevel[msgLevel]; 1.29 + } 1.30 + return msgLevel >= minLevel; 1.31 + }; 1.32 +}; 1.33 + 1.34 +/* creates the log message with the given level and info */ 1.35 +LogController.createLogMessage = function(level, info) { 1.36 + var msg = {}; 1.37 + msg.num = LogController.counter; 1.38 + msg.level = level; 1.39 + msg.info = info; 1.40 + msg.timestamp = new Date(); 1.41 + return msg; 1.42 +}; 1.43 + 1.44 +/* helper method to return a sub-array */ 1.45 +LogController.extend = function (args, skip) { 1.46 + var ret = []; 1.47 + for (var i = skip; i<args.length; i++) { 1.48 + ret.push(args[i]); 1.49 + } 1.50 + return ret; 1.51 +}; 1.52 + 1.53 +/* logs message with given level. Currently used locally by log() and error() */ 1.54 +LogController.logWithLevel = function(level, message/*, ...*/) { 1.55 + var msg = LogController.createLogMessage( 1.56 + level, 1.57 + LogController.extend(arguments, 1) 1.58 + ); 1.59 + LogController.dispatchListeners(msg); 1.60 + LogController.counter += 1; 1.61 +}; 1.62 + 1.63 +/* log with level INFO */ 1.64 +LogController.log = function(message/*, ...*/) { 1.65 + LogController.logWithLevel('INFO', message); 1.66 +}; 1.67 + 1.68 +/* log with level ERROR */ 1.69 +LogController.error = function(message/*, ...*/) { 1.70 + LogController.logWithLevel('ERROR', message); 1.71 +}; 1.72 + 1.73 +/* send log message to listeners */ 1.74 +LogController.dispatchListeners = function(msg) { 1.75 + for (var k in LogController.listeners) { 1.76 + var pair = LogController.listeners[k]; 1.77 + if (pair.ident != k || (pair[0] && !pair[0](msg))) { 1.78 + continue; 1.79 + } 1.80 + pair[1](msg); 1.81 + } 1.82 +}; 1.83 + 1.84 +/* add a listener to this log given an identifier, a filter (can be null) and the listener object */ 1.85 +LogController.addListener = function(ident, filter, listener) { 1.86 + if (typeof(filter) == 'string') { 1.87 + filter = LogController.logLevelAtLeast(filter); 1.88 + } else if (filter !== null && typeof(filter) !== 'function') { 1.89 + throw new Error("Filter must be a string, a function, or null"); 1.90 + } 1.91 + var entry = [filter, listener]; 1.92 + entry.ident = ident; 1.93 + LogController.listeners[ident] = entry; 1.94 +}; 1.95 + 1.96 +/* remove a listener from this log */ 1.97 +LogController.removeListener = function(ident) { 1.98 + delete LogController.listeners[ident]; 1.99 +};