From 046db4dbf06ef8c24a50abe6c4d737c2245bc8fd Mon Sep 17 00:00:00 2001 From: Alexandre Poirot Date: Thu, 28 Feb 2013 01:06:47 +0100 Subject: [PATCH] Bug 845549 - Expose an helper to ease testing console output in tests r=@erikvold --- lib/sdk/test/loader.js | 45 ++++++++++++++++++++++++- test/tabs/test-fennec-tabs.js | 63 +++++++++++++++++++---------------- test/test-content-worker.js | 35 ++++--------------- test/test-deprecate.js | 48 ++++++++++---------------- test/test-event-core.js | 19 +++++------ test/test-events.js | 8 ++--- test/test-observer-service.js | 16 ++++----- test/test-panel.js | 24 ++++++------- test/test-system-events.js | 22 +++++------- test/test-test-loader.js | 60 +++++++++++++++++++++++++++++++++ test/test-unload.js | 17 ++++------ 11 files changed, 203 insertions(+), 154 deletions(-) create mode 100644 test/test-test-loader.js diff --git a/lib/sdk/test/loader.js b/lib/sdk/test/loader.js index 282cf5ed8..9c498a7c2 100644 --- a/lib/sdk/test/loader.js +++ b/lib/sdk/test/loader.js @@ -6,8 +6,9 @@ const { Loader, resolveURI, Require, unload, override, descriptor } = require('../loader/cuddlefish'); +const { PlainTextConsole } = require("sdk/console/plain-text"); -exports.Loader = function(module, globals, packaging) { +function CustomLoader(module, globals, packaging) { let options = packaging || require("@loader/options"); options = override(options, { globals: override(require('../system/globals'), globals || {}) @@ -26,3 +27,45 @@ exports.Loader = function(module, globals, packaging) { } })); }; +exports.Loader = CustomLoader; + +// Creates a custom loader instance whose console module is hooked in order +// to avoid printing messages to the console, and instead, expose them in the +// returned `messages` array attribute +exports.LoaderWithHookedConsole = function (module, callback) { + let messages = []; + function hook(msg) { + messages.push({type: this, msg: msg}); + if (callback) + callback(this, msg); + } + return { + loader: CustomLoader(module, { + console: { + log: hook.bind("log"), + info: hook.bind("info"), + warn: hook.bind("warn"), + error: hook.bind("error"), + debug: hook.bind("debug"), + exception: hook.bind("exception") + } + }), + messages: messages + }; +} + +// Same than LoaderWithHookedConsole with lower level, instead we get what is +// actually printed to the command line console +exports.LoaderWithHookedConsole2 = function (module, callback) { + let messages = []; + return { + loader: CustomLoader(module, { + console: new PlainTextConsole(function (msg) { + messages.push(msg); + if (callback) + callback(msg); + }) + }), + messages: messages + }; +} diff --git a/test/tabs/test-fennec-tabs.js b/test/tabs/test-fennec-tabs.js index 577dd3c36..e186713e5 100644 --- a/test/tabs/test-fennec-tabs.js +++ b/test/tabs/test-fennec-tabs.js @@ -4,30 +4,20 @@ 'use strict'; const { Cc, Ci } = require('chrome'); -const { Loader } = require('sdk/test/loader'); +const { Loader, LoaderWithHookedConsole } = require('sdk/test/loader'); const timer = require('sdk/timers'); const tabs = require('sdk/tabs'); const windows = require('sdk/windows'); const tabsLen = tabs.length; const URL = 'data:text/html;charset=utf-8,#title#'; -const ERR_MSG = 'Error: This method is not yet supported by Fennec'; - -function LoaderWithHookedConsole() { - let errors = []; - let loader = Loader(module, { - console: Object.create(console, { - error: { value: function(error) { - errors.push(error); - }} - }) - }); - return { - loader: loader, - errors: errors - } -} +// Fennec error message dispatched on all currently unimplement tab features, +// that match LoaderWithHookedConsole messages object pattern +const ERR_FENNEC_MSG = { + type: "error", + msg: "This method is not yet supported by Fennec" +}; // TEST: tab unloader exports.testAutomaticDestroy = function(test) { @@ -109,7 +99,7 @@ exports.testAutomaticDestroy = function(test) { // TEST: tab properties exports.testTabProperties = function(test) { test.waitUntilDone(); - let { loader, errors } = LoaderWithHookedConsole(); + let { loader, messages } = LoaderWithHookedConsole(); let tabs = loader.require('sdk/tabs'); let url = "data:text/html;charset=utf-8,foofoo"; @@ -121,7 +111,10 @@ exports.testTabProperties = function(test) { test.assertEqual(tab.url, url, "URL of the new tab matches"); test.assert(tab.favicon, "favicon of the new tab is not empty"); // TODO: remove need for this test by implementing the favicon feature - test.assertEqual(errors.length, 1, "favicon logs an error for now"); + // Poors man deepEqual with JSON.stringify... + test.assertEqual(JSON.stringify(messages), + JSON.stringify([ERR_FENNEC_MSG]), + "favicon logs an error for now"); test.assertEqual(tab.style, null, "style of the new tab matches"); test.assertEqual(tab.index, tabsLen, "index of the new tab matches"); test.assertNotEqual(tab.getThumbnail(), null, "thumbnail of the new tab matches"); @@ -230,7 +223,7 @@ exports.testTabReload = function(test) { exports.testTabMove = function(test) { test.waitUntilDone(); - let { loader, errors } = LoaderWithHookedConsole(); + let { loader, messages } = LoaderWithHookedConsole(); let tabs = loader.require('sdk/tabs'); let url = "data:text/html;charset=utf-8,testTabMove"; @@ -247,8 +240,9 @@ exports.testTabMove = function(test) { test.assert(tab.index > tab1.index, "2nd tab has valid index"); tab.index = 0; test.assertEqual(tab.index, i, "tab index after move matches"); - test.assertEqual(errors.length, 1, "setting tab.index logs error"); - + test.assertEqual(JSON.stringify(messages), + JSON.stringify([ERR_FENNEC_MSG]), + "setting tab.index logs error"); // end test tab1.close(function() tab.close(function() { loader.unload(); @@ -264,7 +258,7 @@ exports.testTabMove = function(test) { exports.testTabsOpen_alt = function(test) { test.waitUntilDone(); - let { loader, errors } = LoaderWithHookedConsole(); + let { loader, messages } = LoaderWithHookedConsole(); let tabs = loader.require('sdk/tabs'); let url = "data:text/html;charset=utf-8,default"; @@ -274,7 +268,7 @@ exports.testTabsOpen_alt = function(test) { test.assertEqual(tab.url, url, "URL of the new tab matches"); test.assertEqual(tabs.activeTab, tab, "URL of active tab in the current window matches"); test.assertEqual(tab.isPinned, false, "The new tab is not pinned"); - test.assertEqual(errors.length, 1, "isPinned logs error"); + test.assertEqual(messages.length, 1, "isPinned logs error"); // end test tab.close(function() { @@ -289,7 +283,7 @@ exports.testTabsOpen_alt = function(test) { exports.testOpenPinned_alt = function(test) { test.waitUntilDone(); - let { loader, errors } = LoaderWithHookedConsole(); + let { loader, messages } = LoaderWithHookedConsole(); let tabs = loader.require('sdk/tabs'); let url = "about:blank"; @@ -298,7 +292,11 @@ exports.testOpenPinned_alt = function(test) { isPinned: true, onOpen: function(tab) { test.assertEqual(tab.isPinned, false, "The new tab is pinned"); - test.assertEqual(errors.length, 2, "isPinned logs error"); + // We get two error message: one for tabs.open's isPinned argument + // and another one for tab.isPinned + test.assertEqual(JSON.stringify(messages), + JSON.stringify([ERR_FENNEC_MSG, ERR_FENNEC_MSG]), + "isPinned logs error"); // end test tab.close(function() { @@ -313,7 +311,7 @@ exports.testOpenPinned_alt = function(test) { exports.testPinUnpin_alt = function(test) { test.waitUntilDone(); - let { loader, errors } = LoaderWithHookedConsole(); + let { loader, messages } = LoaderWithHookedConsole(); let tabs = loader.require('sdk/tabs'); let url = "data:text/html;charset=utf-8,default"; @@ -322,11 +320,18 @@ exports.testPinUnpin_alt = function(test) { onOpen: function(tab) { tab.pin(); test.assertEqual(tab.isPinned, false, "The tab was pinned correctly"); - test.assertEqual(errors.length, 2, "tab.pin() logs error"); + test.assertEqual(JSON.stringify(messages), + JSON.stringify([ERR_FENNEC_MSG, ERR_FENNEC_MSG]), + "tab.pin() logs error"); + + // Clear console messages for the following test + messages.length = 0; tab.unpin(); test.assertEqual(tab.isPinned, false, "The tab was unpinned correctly"); - test.assertEqual(errors.length, 4, "tab.unpin() logs error"); + test.assertEqual(JSON.stringify(messages), + JSON.stringify([ERR_FENNEC_MSG, ERR_FENNEC_MSG]), + "tab.unpin() logs error"); // end test tab.close(function() { diff --git a/test/test-content-worker.js b/test/test-content-worker.js index d35a4858e..7448de755 100644 --- a/test/test-content-worker.js +++ b/test/test-content-worker.js @@ -6,7 +6,7 @@ const { Cc, Ci } = require("chrome"); const { setTimeout } = require("sdk/timers"); -const { Loader, Require, override } = require("sdk/test/loader"); +const { LoaderWithHookedConsole } = require("sdk/test/loader"); const { Worker } = require("sdk/content/worker"); const DEFAULT_CONTENT_URL = "data:text/html;charset=utf-8,foo"; @@ -348,24 +348,12 @@ exports["test:nothing is leaked to content script"] = WorkerTest( exports["test:ensure console.xxx works in cs"] = WorkerTest( DEFAULT_CONTENT_URL, function(assert, browser, done) { - - // Create a new module loader in order to be able to create a `console` - // module mockup: - let loader = Loader(module, { - console: { - log: hook.bind("log"), - info: hook.bind("info"), - warn: hook.bind("warn"), - error: hook.bind("error"), - debug: hook.bind("debug"), - exception: hook.bind("exception") - } - }); + let { loader } = LoaderWithHookedConsole(module, onMessage); // Intercept all console method calls let calls = []; - function hook(msg) { - assert.equal(this, msg, + function onMessage(type, msg) { + assert.equal(type, msg, "console.xxx(\"xxx\"), i.e. message is equal to the " + "console method name we are calling"); calls.push(msg); @@ -657,22 +645,11 @@ exports["test:check worker API with page history"] = WorkerTest( exports["test:global postMessage"] = WorkerTest( DEFAULT_CONTENT_URL, function(assert, browser, done) { - // Create a new module loader in order to be able to create a `console` - // module mockup: - let loader = Loader(module, { - console: { - log: hook.bind(null, "log"), - info: hook.bind(null, "info"), - warn: hook.bind(null, "warn"), - error: hook.bind(null, "error"), - debug: hook.bind(null, "debug"), - exception: hook.bind(null, "exception") - } - }); + let { loader } = LoaderWithHookedConsole(module, onMessage); // Intercept all console method calls let seenMessages = 0; - function hook(type, message) { + function onMessage(type, message) { seenMessages++; assert.equal(type, "error", "Should be an error"); assert.equal(message, "DEPRECATED: The global `postMessage()` function in " + diff --git a/test/test-deprecate.js b/test/test-deprecate.js index 557b30c32..b3afc1e75 100644 --- a/test/test-deprecate.js +++ b/test/test-deprecate.js @@ -3,27 +3,11 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ const deprecate = require("sdk/util/deprecate"); -var { Loader } = require("sdk/test/loader"); - -function LoaderWithHookedConsole() { - let errors = []; - let loader = Loader(module, { - console: Object.create(console, { - error: { value: function(error) { - errors.push(error); - }} - }) - }); - - return { - loader: loader, - deprecate: loader.require("sdk/util/deprecate"), - errors: errors - } -} +const { LoaderWithHookedConsole } = require("sdk/test/loader"); exports["test Deprecate Usage"] = function testDeprecateUsage(assert) { - let { loader, deprecate, errors } = LoaderWithHookedConsole(); + let { loader, messages } = LoaderWithHookedConsole(module); + let deprecate = loader.require("sdk/util/deprecate"); function functionIsDeprecated() { deprecate.deprecateUsage("foo"); @@ -31,9 +15,10 @@ exports["test Deprecate Usage"] = function testDeprecateUsage(assert) { functionIsDeprecated(); - assert.equal(errors.length, 1, "only one error is dispatched"); + assert.equal(messages.length, 1, "only one error is dispatched"); + assert.equal(messages[0].type, "error", "the console message is an error"); - let msg = errors[0]; + let msg = messages[0].msg; assert.ok(msg.indexOf("foo") !== -1, "message contains the given message"); @@ -46,7 +31,8 @@ exports["test Deprecate Usage"] = function testDeprecateUsage(assert) { } exports["test Deprecate Function"] = function testDeprecateFunction(assert) { - let { loader, deprecate, errors } = LoaderWithHookedConsole(); + let { loader, messages } = LoaderWithHookedConsole(module); + let deprecate = loader.require("sdk/util/deprecate"); let self = {}; let arg1 = "foo"; @@ -63,10 +49,10 @@ exports["test Deprecate Function"] = function testDeprecateFunction(assert) { deprecateFunction.call(self, arg1, arg2); - assert.equal(errors.length, 1, - "only one error is dispatched"); + assert.equal(messages.length, 1, "only one error is dispatched"); + assert.equal(messages[0].type, "error", "the console message is an error"); - let msg = errors[0]; + let msg = messages[0].msg; assert.ok(msg.indexOf("bar") !== -1, "message contains the given message"); assert.ok(msg.indexOf("testDeprecateFunction") !== -1, "message contains name of the caller function"); @@ -77,7 +63,8 @@ exports["test Deprecate Function"] = function testDeprecateFunction(assert) { } exports.testDeprecateEvent = function(assert, done) { - let { loader, deprecate, errors } = LoaderWithHookedConsole(); + let { loader, messages } = LoaderWithHookedConsole(module); + let deprecate = loader.require("sdk/util/deprecate"); let { on, emit } = loader.require('sdk/event/core'); let testObj = {}; @@ -85,15 +72,16 @@ exports.testDeprecateEvent = function(assert, done) { testObj.on('fire', function() { testObj.on('water', function() { - assert.equal(errors.length, 1, "only one error is dispatched"); + assert.equal(messages.length, 1, "only one error is dispatched"); loader.unload(); done(); }) - assert.equal(errors.length, 1, "only one error is dispatched"); + assert.equal(messages.length, 1, "only one error is dispatched"); emit(testObj, 'water'); }); - assert.equal(errors.length, 1, "only one error is dispatched"); - let msg = errors[0]; + assert.equal(messages.length, 1, "only one error is dispatched"); + assert.equal(messages[0].type, "error", "the console message is an error"); + let msg = messages[0].msg; assert.ok(msg.indexOf("BAD") !== -1, "message contains the given message"); assert.ok(msg.indexOf("deprecateEvent") !== -1, "message contains name of the caller function"); diff --git a/test/test-event-core.js b/test/test-event-core.js index 2d9413760..4aa3d599c 100644 --- a/test/test-event-core.js +++ b/test/test-event-core.js @@ -5,7 +5,7 @@ 'use strict'; const { on, once, off, emit, count, amass } = require('sdk/event/core'); -const { Loader } = require('sdk/test/loader'); +const { LoaderWithHookedConsole } = require("sdk/test/loader"); exports['test add a listener'] = function(assert) { let events = [ { name: 'event#1' }, 'event#2' ]; @@ -159,13 +159,8 @@ exports['test error handling'] = function(assert) { exports['test unhandled errors'] = function(assert) { let exceptions = []; - let loader = Loader(module, { - console: Object.create(console, { - exception: { value: function(e) { - exceptions.push(e); - }} - }) - }); + let { loader, messages } = LoaderWithHookedConsole(module); + let { emit, on } = loader.require('sdk/event/core'); let target = {}; let boom = Error('Boom!'); @@ -174,12 +169,16 @@ exports['test unhandled errors'] = function(assert) { on(target, 'message', function() { throw boom; }); emit(target, 'message'); - assert.ok(~String(exceptions[0]).indexOf('Boom!'), + assert.equal(messages.length, 1, 'Got the first exception'); + assert.equal(messages[0].type, 'exception', 'The console message is exception'); + assert.ok(~String(messages[0].msg).indexOf('Boom!'), 'unhandled exception is logged'); on(target, 'error', function() { throw drax; }); emit(target, 'message'); - assert.ok(~String(exceptions[1]).indexOf('Draax!'), + assert.equal(messages.length, 2, 'Got the second exception'); + assert.equal(messages[1].type, 'exception', 'The console message is exception'); + assert.ok(~String(messages[1].msg).indexOf('Draax!'), 'error in error handler is logged'); }; diff --git a/test/test-events.js b/test/test-events.js index cbcd2c8c0..abc78c795 100644 --- a/test/test-events.js +++ b/test/test-events.js @@ -4,7 +4,7 @@ 'use strict'; -const { Loader } = require('sdk/test/loader'); +const { LoaderWithHookedConsole } = require("sdk/test/loader"); // Exposing private methods as public in order to test const EventEmitter = require('sdk/deprecated/events').EventEmitter.compose({ @@ -256,11 +256,7 @@ exports["test:removing once"] = function(test) { exports['test:emitLoop'] = function(test) { // Override the console for this test so it doesn't log the exception to the // test output - let loader = Loader(module, { - console: Object.create(console, { - exception: { value: function(e) { }} - }) - }); + let { loader } = LoaderWithHookedConsole(module); let EventEmitter = loader.require('sdk/deprecated/events').EventEmitter.compose({ listeners: function(type) this._listeners(type), diff --git a/test/test-observer-service.js b/test/test-observer-service.js index 72cfef99d..00051d87d 100644 --- a/test/test-observer-service.js +++ b/test/test-observer-service.js @@ -4,16 +4,10 @@ const observers = require("sdk/deprecated/observer-service"); const { Cc, Ci } = require("chrome"); -const { Loader } = require("sdk/test/loader"); -const { PlainTextConsole } = require("sdk/console/plain-text"); +const { LoaderWithHookedConsole2 } = require("sdk/test/loader"); exports.testUnloadAndErrorLogging = function(test) { - var prints = []; - var loader = Loader(module, { - console: new PlainTextConsole(function(_) { - prints.push(_); - }) - }); + let { loader, messages } = LoaderWithHookedConsole2(module); var sbobsvc = loader.require("sdk/deprecated/observer-service"); var timesCalled = 0; @@ -28,10 +22,12 @@ exports.testUnloadAndErrorLogging = function(test) { test.assertEqual(timesCalled, 1); sbobsvc.add("narg", badCb); observers.notify("narg", "yo yo"); - var lines = prints[0].split("\n"); + var lines = messages[0].split("\n"); + test.assertEqual(lines[0], "error: " + require("sdk/self").name + ": An exception occurred."); test.assertEqual(lines[0], "error: " + require("sdk/self").name + ": An exception occurred."); test.assertEqual(lines[1], "Error: foo"); - test.assertEqual(lines[2], module.uri + " 24"); + // Keep in mind to update "18" to the line of "throw new Error("foo")" + test.assertEqual(lines[2], module.uri + " 18"); test.assertEqual(lines[3], "Traceback (most recent call last):"); loader.unload(); diff --git a/test/test-panel.js b/test/test-panel.js index 540d46e26..21efd365a 100644 --- a/test/test-panel.js +++ b/test/test-panel.js @@ -4,6 +4,7 @@ let { Cc, Ci } = require("chrome"); const { Loader } = require('sdk/test/loader'); +const { LoaderWithHookedConsole } = require("sdk/test/loader"); const timer = require("sdk/timers"); const self = require('sdk/self'); @@ -492,26 +493,21 @@ exports["test console.log in Panel"] = function(assert, done) { console.log("' + text + '");\ }'; - let panel; - - let loader = Loader(module, { - console: { - log: function (message) { - assert.equal(message, text, 'console.log() works'); - - panel.destroy(); - done(); - } - } - }); - + let { loader } = LoaderWithHookedConsole(module, onMessage); let { Panel } = loader.require('sdk/panel'); - panel = Panel({ + let panel = Panel({ contentURL: 'data:text/html;charset=utf-8,' + encodeURIComponent(html) }); panel.show(); + + function onMessage(type, message) { + assert.equal(type, 'log', 'console.log() works'); + assert.equal(message, text, 'console.log() works'); + panel.destroy(); + done(); + } }; try { diff --git a/test/test-system-events.js b/test/test-system-events.js index a8681a144..84cf477f7 100644 --- a/test/test-system-events.js +++ b/test/test-system-events.js @@ -6,8 +6,7 @@ const events = require("sdk/system/events"); const self = require("sdk/self"); const { Cc, Ci, Cu } = require("chrome"); const { setTimeout } = require("sdk/timers"); -const { Loader } = require("sdk/test/loader"); -const { PlainTextConsole } = require("sdk/console/plain-text"); +const { LoaderWithHookedConsole2 } = require("sdk/test/loader"); const nsIObserverService = Cc["@mozilla.org/observer-service;1"]. getService(Ci.nsIObserverService); @@ -36,12 +35,7 @@ exports["test basic"] = function(assert) { } exports["test error reporting"] = function(assert) { - let prints = []; - let loader = Loader(module, { - console: new PlainTextConsole(function(_) { - prints.push(_); - }) - }); + let { loader, messages } = LoaderWithHookedConsole2(module); let events = loader.require("sdk/system/events"); function brokenHandler(subject, data) { throw new Error("foo"); }; @@ -49,18 +43,18 @@ exports["test error reporting"] = function(assert) { let lineNumber; try { brokenHandler() } catch (error) { lineNumber = error.lineNumber } - - let errorType = Date.now().toString(32); events.on(errorType, brokenHandler); events.emit(errorType, { data: "yo yo" }); - assert.ok(prints[0].indexOf(self.name + ": An exception occurred.") >= 0, + assert.equal(messages.length, 1, "Got an exception"); + let text = messages[0]; + assert.ok(text.indexOf(self.name + ": An exception occurred.") >= 0, "error is logged"); - assert.ok(prints[0].indexOf("Error: foo") >= 0, "error message is logged"); - assert.ok(prints[0].indexOf(module.uri) >= 0, "module uri is logged"); - assert.ok(prints[0].indexOf(lineNumber) >= 0, "error line is logged"); + assert.ok(text.indexOf("Error: foo") >= 0, "error message is logged"); + assert.ok(text.indexOf(module.uri) >= 0, "module uri is logged"); + assert.ok(text.indexOf(lineNumber) >= 0, "error line is logged"); events.off(errorType, brokenHandler); diff --git a/test/test-test-loader.js b/test/test-test-loader.js new file mode 100644 index 000000000..4ae2ffc58 --- /dev/null +++ b/test/test-test-loader.js @@ -0,0 +1,60 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict" + +const { LoaderWithHookedConsole } = require("sdk/test/loader"); + +exports["test LoaderWithHookedConsole"] = function (assert) { + let count = 0; + function onMessage(type, message) { + switch (count++) { + case 0: + assert.equal(type, "log", "got log type"); + assert.equal(message, "1st", "got log msg"); + break; + case 1: + assert.equal(type, "error", "got error type"); + assert.equal(message, "2nd", "got error msg"); + break; + case 2: + assert.equal(type, "warn", "got warn type"); + assert.equal(message, "3rd", "got warn msg"); + break; + case 3: + assert.equal(type, "info", "got info type"); + assert.equal(message, "4th", "got info msg"); + break; + case 4: + assert.equal(type, "debug", "got debug type"); + assert.equal(message, "5th", "got debug msg"); + break; + case 5: + assert.equal(type, "exception", "got exception type"); + assert.equal(message, "6th", "got exception msg"); + break; + default: + assert.fail("Got unexception message: " + i); + } + } + + let { loader, messages } = LoaderWithHookedConsole(module, onMessage); + let console = loader.globals.console; + console.log("1st"); + console.error("2nd"); + console.warn("3rd"); + console.info("4th"); + console.debug("5th"); + console.exception("6th"); + assert.equal(messages.length, 6, "Got all console messages"); + assert.deepEqual(messages[0], {type: "log", msg: "1st"}, "Got log"); + assert.deepEqual(messages[1], {type: "error", msg: "2nd"}, "Got error"); + assert.deepEqual(messages[2], {type: "warn", msg: "3rd"}, "Got warn"); + assert.deepEqual(messages[3], {type: "info", msg: "4th"}, "Got info"); + assert.deepEqual(messages[4], {type: "debug", msg: "5th"}, "Got debug"); + assert.deepEqual(messages[5], {type: "exception", msg: "6th"}, "Got exception"); + assert.equal(count, 6, "Called for all messages"); +}; + +require("test").run(exports); diff --git a/test/test-unload.js b/test/test-unload.js index 1bbb64eb6..15708698f 100644 --- a/test/test-unload.js +++ b/test/test-unload.js @@ -5,17 +5,10 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ var unload = require("sdk/system/unload"); -var { Loader } = require("sdk/test/loader"); +var { Loader, LoaderWithHookedConsole } = require("sdk/test/loader"); exports.testUnloading = function(test) { - var loader = Loader(module, { - console: Object.create(console, { - exception: { value: function(error) { - exceptions.push(error); - }} - }) - }); - var exceptions = []; + let { loader, messages } = LoaderWithHookedConsole(module); var ul = loader.require("sdk/system/unload"); var unloadCalled = 0; function unload() { @@ -32,8 +25,10 @@ exports.testUnloading = function(test) { loader.unload(); test.assertEqual(unloadCalled, 2, "Unloader functions are called on unload."); - test.assertEqual(exceptions.length, 1, - "One unload handler threw exception"); + test.assertEqual(messages.length, 1, + "One unload handler threw exception 1/2"); + test.assertEqual(messages[0].type, "exception", + "One unload handler threw exception 2/2"); }; exports.testEnsure = function(test) {