michael@0: "use strict"; michael@0: michael@0: Components.utils.import("resource://gre/modules/osfile.jsm"); michael@0: Components.utils.import("resource://gre/modules/Services.jsm"); michael@0: michael@0: /** michael@0: * Tests logging by passing OS.Shared.LOG both an object with its own michael@0: * toString method, and one with the default. michael@0: */ michael@0: function run_test() { michael@0: do_test_pending(); michael@0: let messageCount = 0; michael@0: michael@0: do_print("Test starting"); michael@0: michael@0: // Create a console listener. michael@0: let consoleListener = { michael@0: observe: function (aMessage) { michael@0: //Ignore unexpected messages. michael@0: if (!(aMessage instanceof Components.interfaces.nsIConsoleMessage)) { michael@0: return; michael@0: } michael@0: // This is required, as printing to the |Services.console| michael@0: // while in the observe function causes an exception. michael@0: do_execute_soon(function() { michael@0: do_print("Observing message " + aMessage.message); michael@0: if (aMessage.message.indexOf("TEST OS") < 0) { michael@0: return; michael@0: } michael@0: michael@0: ++messageCount; michael@0: if(messageCount == 1) { michael@0: do_check_eq(aMessage.message, "TEST OS {\"name\":\"test\"}\n"); michael@0: } michael@0: if(messageCount == 2) { michael@0: do_check_eq(aMessage.message, "TEST OS name is test\n"); michael@0: toggleConsoleListener(false); michael@0: do_test_finished(); michael@0: } michael@0: }); michael@0: } michael@0: }; michael@0: michael@0: // Set/Unset the console listener. michael@0: function toggleConsoleListener (pref) { michael@0: do_print("Setting console listener: " + pref); michael@0: Services.prefs.setBoolPref("toolkit.osfile.log", pref); michael@0: Services.prefs.setBoolPref("toolkit.osfile.log.redirect", pref); michael@0: Services.console[pref ? "registerListener" : "unregisterListener"]( michael@0: consoleListener); michael@0: } michael@0: michael@0: toggleConsoleListener(true); michael@0: michael@0: let objectDefault = {name: "test"}; michael@0: let CustomToString = function() { michael@0: this.name = "test"; michael@0: }; michael@0: CustomToString.prototype.toString = function() { michael@0: return "name is " + this.name; michael@0: }; michael@0: let objectCustom = new CustomToString(); michael@0: michael@0: do_print(OS.Shared.LOG.toSource()); michael@0: michael@0: do_print("Logging 1"); michael@0: OS.Shared.LOG(objectDefault); michael@0: michael@0: do_print("Logging 2"); michael@0: OS.Shared.LOG(objectCustom); michael@0: // Once both messages are observed OS.Shared.DEBUG, and OS.Shared.TEST michael@0: // are reset to false. michael@0: } michael@0: