[Pkg-mozext-commits] [requestpolicy] 24/65: [tst][imp] UI tests: append extra Logging information
David Prévot
taffit at moszumanska.debian.org
Fri Mar 25 22:59:47 UTC 2016
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository requestpolicy.
commit acef5f355d17aaa72c230677a415eeee6ebd322f
Author: Martin Kimmerle <dev at 256k.de>
Date: Sat Jan 16 15:41:13 2016 +0100
[tst][imp] UI tests: append extra Logging information
Changes:
* add "extra" information to the (HTML) Marionette Logging. The
. extra information is the Logging Errors and the Console
. Errors. To achieve that, a custom TestRunner had to be
. created.
* Logging Error detection: also detect errors in bootstrap.js
. and script-loader.jsm
* increase the error counters in the DevHelper add-on rather
. than in the Logger module.
* ConsoleObserver: save the counter in a pref, just like the
. logging observer
---
Makefile | 4 +-
src/bootstrap.js | 12 ++-
src/content/lib/default-preferences.js | 3 +-
src/content/lib/logger.jsm | 18 +++--
src/content/lib/script-loader.jsm | 12 ++-
src/content/models/prefs.jsm | 3 +-
tests/helper-addons/dev-helper/bootstrap.js | 4 +
.../dev-helper/content/console-observer.jsm | 18 +++--
.../dev-helper/content/logging-observer.jsm | 85 ++++++++++++++++++++++
.../marionette/rp_puppeteer/api/error_detection.py | 75 ++++++-------------
.../rp_puppeteer/tests/test_error_detection.py | 30 ++++----
tests/marionette/rp_ui_harness/runner.py | 59 +++++++++++++++
tests/marionette/rp_ui_harness/runtests.py | 20 +++++
tests/marionette/rp_ui_harness/testcases.py | 14 ++--
14 files changed, 262 insertions(+), 95 deletions(-)
diff --git a/Makefile b/Makefile
index 6babe4c..f09fa8e 100644
--- a/Makefile
+++ b/Makefile
@@ -418,7 +418,9 @@ marionette: venv \
source .venv/bin/activate ; \
export PYTHONPATH=tests/marionette/ ; \
profile_dir=`mozprofile -a $(xpi_file__unit_testing) -a $(xpi_file__dev_helper) --preferences=$(mozrunner_prefs_ini):marionette` ; \
- firefox-ui-functional --binary=$(app_binary) --profile=$$profile_dir $(marionette_logging) $(marionette_prefs) $(marionette_tests) ; \
+ ./tests/marionette/rp_ui_harness/runtests.py \
+ --binary=$(app_binary) --profile=$$profile_dir \
+ $(marionette_logging) $(marionette_prefs) $(marionette_tests) ; \
exit_status=$$? ; \
rm -rf $$profile_dir ; \
exit $$exit_status \
diff --git a/src/bootstrap.js b/src/bootstrap.js
index 66e9c05..63eb7d0 100644
--- a/src/bootstrap.js
+++ b/src/bootstrap.js
@@ -27,6 +27,8 @@ const {utils: Cu} = Components;
/* exported startup, shutdown, install, uninstall */
/* global dump */
+let {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
+
//==============================================================================
// utilities
//==============================================================================
@@ -37,9 +39,13 @@ const envURI = "chrome://rpcontinued/content/lib/environment.jsm";
* If any Exception gets into bootstrap.js, it will be a severe error.
* The Logger can't be used, as it might not be available.
*/
-function logSevereError(msg, e) {
- dump("[RequestPolicy] [SEVERE] [ERROR] " + msg + " " + e +
- (e.stack ? ", stack was: " + e.stack : "") + "\n");
+function logSevereError(aMessage, aError) {
+ let msg = "[RequestPolicy] [SEVERE] [ERROR] " + aMessage + " " + aError +
+ (aError.stack ? ", stack was: " + aError.stack : "");
+ dump(msg + "\n");
+ // #ifdef UNIT_TESTING
+ Services.obs.notifyObservers(null, "requestpolicy-log-error", msg);
+ // #endif
Cu.reportError(e);
}
diff --git a/src/content/lib/default-preferences.js b/src/content/lib/default-preferences.js
index c03b99d..92e541a 100644
--- a/src/content/lib/default-preferences.js
+++ b/src/content/lib/default-preferences.js
@@ -36,7 +36,8 @@ pref("extensions.requestpolicy.lastVersion", "0.0");
pref("extensions.requestpolicy.lastAppVersion", "0.0");
// #ifdef UNIT_TESTING
-pref("extensions.requestpolicy.unitTesting.errorCount", 0);
+pref("extensions.requestpolicy.unitTesting.consoleErrors.counter", 0);
+pref("extensions.requestpolicy.unitTesting.loggingErrors.counter", 0);
// #endif
// Old prefs that are no longer used.
diff --git a/src/content/lib/logger.jsm b/src/content/lib/logger.jsm
index 0aa00a0..63bc052 100644
--- a/src/content/lib/logger.jsm
+++ b/src/content/lib/logger.jsm
@@ -136,12 +136,8 @@ var Logger = (function() {
let shouldLog = enabled && aLevel >= level && types & aType;
// #ifdef UNIT_TESTING
- if (aType === self.TYPE_ERROR || aLevel === self.LEVEL_SEVERE) {
- // increment the error count
- let errorCount = Prefs.get("unitTesting.errorCount");
- Prefs.set("unitTesting.errorCount", ++errorCount);
- Prefs.save();
-
+ let isError = aType === self.TYPE_ERROR || aLevel === self.LEVEL_SEVERE;
+ if (isError) {
// log even if logging is disabled
shouldLog = true;
}
@@ -153,8 +149,14 @@ var Logger = (function() {
let stack = aError && aError.stack ?
", stack was:\n" + aError.stack : "";
- self.printFunc("[RequestPolicy] [" + levelName + "] " +
- "[" + typeName + "] " + aMessage + stack + "\n");
+ let msg = "[RequestPolicy] [" + levelName + "] " +
+ "[" + typeName + "] " + aMessage + stack;
+ self.printFunc(msg + "\n");
+ // #ifdef UNIT_TESTING
+ if (isError) {
+ Services.obs.notifyObservers(null, "requestpolicy-log-error", msg);
+ }
+ // #endif
}
}
diff --git a/src/content/lib/script-loader.jsm b/src/content/lib/script-loader.jsm
index c34eebf..5a99154 100644
--- a/src/content/lib/script-loader.jsm
+++ b/src/content/lib/script-loader.jsm
@@ -35,6 +35,7 @@ this.EXPORTED_SYMBOLS = ["ScriptLoader"];
// when the module to be imported wants to import ScriptLoader.
let {XPCOMUtils} = Cu.import("resource://gre/modules/XPCOMUtils.jsm", {});
let {console} = Cu.import("resource://gre/modules/devtools/Console.jsm", {});
+let {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
//==============================================================================
// utilities
@@ -49,9 +50,14 @@ function getModuleURI(id) {
/**
* If the ScriptLoader catches an Exception, it will be a severe error.
*/
-function logSevereError(msg, e) {
- dump("[RequestPolicy] [SEVERE] [ERROR] " + msg + " " + e +
- (e.stack ? ", stack was: " + e.stack : "") + "\n");
+function logSevereError(aMessage, aError) {
+ let msg = "[RequestPolicy] [SEVERE] [ERROR] " + aMessage + " " + aError +
+ (aError.stack ? ", stack was: " + aError.stack : "");
+ dump(msg + "\n");
+ // #ifdef UNIT_TESTING
+ Services.obs.notifyObservers(null, "requestpolicy-log-error", msg);
+ // #endif
+ Cu.reportError(e);
}
//==============================================================================
diff --git a/src/content/models/prefs.jsm b/src/content/models/prefs.jsm
index 690aff4..09cc477 100644
--- a/src/content/models/prefs.jsm
+++ b/src/content/models/prefs.jsm
@@ -72,7 +72,8 @@ var Prefs = (function() {
"startWithAllowAllEnabled": "BoolPref",
"welcomeWindowShown": "BoolPref",
// #ifdef UNIT_TESTING
- "unitTesting.errorCount": "IntPref",
+ "unitTesting.consoleErrors.counter": "IntPref",
+ "unitTesting.loggingErrors.counter": "IntPref",
// #endif
}),
diff --git a/tests/helper-addons/dev-helper/bootstrap.js b/tests/helper-addons/dev-helper/bootstrap.js
index 7e509f8..54af05a 100644
--- a/tests/helper-addons/dev-helper/bootstrap.js
+++ b/tests/helper-addons/dev-helper/bootstrap.js
@@ -28,6 +28,8 @@ const Cu = Components.utils;
function startup(data, reason) {
Cu.import("chrome://rpc-dev-helper/content/console-observer.jsm");
ConsoleObserver.startup();
+ Cu.import("chrome://rpc-dev-helper/content/logging-observer.jsm");
+ LoggingObserver.startup();
Cu.import("chrome://rpc-dev-helper/content/rpc-uri.jsm");
CustomUri.startup();
}
@@ -35,6 +37,8 @@ function startup(data, reason) {
function shutdown(data, reason) {
CustomUri.shutdown();
Cu.unload("chrome://rpc-dev-helper/content/rpc-uri.jsm");
+ LoggingObserver.shutdown();
+ Cu.unload("chrome://rpc-dev-helper/content/logging-observer.jsm");
ConsoleObserver.shutdown();
Cu.unload("chrome://rpc-dev-helper/content/console-observer.jsm");
}
diff --git a/tests/helper-addons/dev-helper/content/console-observer.jsm b/tests/helper-addons/dev-helper/content/console-observer.jsm
index 92387b1..a5c401f 100644
--- a/tests/helper-addons/dev-helper/content/console-observer.jsm
+++ b/tests/helper-addons/dev-helper/content/console-observer.jsm
@@ -73,36 +73,44 @@ function isKnownBug(aMessage) {
var ConsoleObserver = (function () {
let self = {};
- let numErrors = 0;
let messages = [];
+ let prefBranch;
+
self.getNumErrors = function () {
- return numErrors;
+ return prefBranch.getIntPref("unitTesting.loggingErrors.counter");
};
self.getMessages = function () {
return messages;
};
+ function setNumErrors(aN) {
+ prefBranch.setIntPref("unitTesting.loggingErrors.counter", aN);
+ Services.prefs.savePrefFile(null);
+ };
+
self.reset = function () {
- numErrors = 0;
+ setNumErrors(0);
messages = [];
};
self.startup = function () {
- self.reset();
+ prefBranch = Services.prefs.getBranch("extensions.requestpolicy.").
+ QueryInterface(Ci.nsIPrefBranch2);
Services.console.registerListener(self);
};
self.shutdown = function () {
Services.console.unregisterListener(self);
+ prefBranch = undefined;
};
self.observe = function (aSubject) {
var msg = aSubject.message;
if (isRPException(msg) && !isKnownBug(msg)) {
- ++numErrors;
+ setNumErrors(self.getNumErrors() + 1);
messages.push(msg);
dump("[RequestPolicy] [Browser Console] " + msg + "\n");
}
diff --git a/tests/helper-addons/dev-helper/content/logging-observer.jsm b/tests/helper-addons/dev-helper/content/logging-observer.jsm
new file mode 100644
index 0000000..e6eaffb
--- /dev/null
+++ b/tests/helper-addons/dev-helper/content/logging-observer.jsm
@@ -0,0 +1,85 @@
+/*
+ * ***** BEGIN LICENSE BLOCK *****
+ *
+ * RPC Dev Helper - A helper add-on for RequestPolicy development.
+ * Copyright (c) 2016 Martin Kimmerle
+ *
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * ***** END LICENSE BLOCK *****
+ */
+
+const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
+
+this.EXPORTED_SYMBOLS = ["LoggingObserver"];
+
+let {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
+
+//==============================================================================
+// LoggingObserver
+//==============================================================================
+
+/**
+ * LoggingObserver observes all logs sent by RP's Logger module.
+ */
+var LoggingObserver = (function () {
+ let self = {};
+
+ let messages = [];
+
+ let prefBranch;
+
+ self.getNumErrors = function () {
+ return prefBranch.getIntPref("unitTesting.loggingErrors.counter");
+ };
+
+ self.getMessages = function () {
+ return messages;
+ };
+
+ function setNumErrors(aN) {
+ prefBranch.setIntPref("unitTesting.loggingErrors.counter", aN);
+ Services.prefs.savePrefFile(null);
+ };
+
+ self.reset = function () {
+ setNumErrors(0);
+ messages = [];
+ };
+
+ self.startup = function () {
+ prefBranch = Services.prefs.getBranch("extensions.requestpolicy.").
+ QueryInterface(Ci.nsIPrefBranch2);
+ Services.obs.addObserver(self, "requestpolicy-log-error", false);
+ };
+
+ self.shutdown = function () {
+ Services.obs.removeObserver(self, "requestpolicy-log-error");
+ prefBranch = undefined;
+ };
+
+ self.observe = function (aSubject, aTopic, aData) {
+ switch (aTopic) {
+ case "requestpolicy-log-error":
+ setNumErrors(self.getNumErrors() + 1);
+ messages.push(aData);
+ break;
+
+ default:
+ break;
+ }
+ };
+
+ return self;
+}());
diff --git a/tests/marionette/rp_puppeteer/api/error_detection.py b/tests/marionette/rp_puppeteer/api/error_detection.py
index 0d4597e..925330e 100644
--- a/tests/marionette/rp_puppeteer/api/error_detection.py
+++ b/tests/marionette/rp_puppeteer/api/error_detection.py
@@ -3,30 +3,29 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
from firefox_puppeteer.base import BaseLib
-from firefox_puppeteer.api.prefs import Preferences
-
-ERROR_COUNT_PREF = "extensions.requestpolicy.unitTesting.errorCount"
class ErrorDetection(BaseLib):
+
def _notify_observers(self, topic, data):
- with self.marionette.using_context("chrome"):
- self.marionette.execute_script(
- """
- Components.utils.import("resource://gre/modules/Services.jsm");
- Services.obs.notifyObservers(null, "{}", "{}");
- """.format(topic, data))
+ self.marionette.execute_script("""
+ Components.utils.import("resource://gre/modules/Services.jsm");
+ Services.obs.notifyObservers(null, "{}", "{}");
+ """.format(topic, data))
+
+ def _call(self):
+ raise NotImplementedError
@property
def n_errors(self):
- raise NotImplementedError
+ return self._call("getNumErrors")
@property
def messages(self):
- raise NotImplementedError
+ return self._call("getMessages")
def reset(self):
- raise NotImplementedError
+ self._call("reset")
def trigger_error(self):
raise NotImplementedError
@@ -34,17 +33,13 @@ class ErrorDetection(BaseLib):
class LoggingErrorDetection(ErrorDetection):
- def __init__(self, marionette_getter):
- BaseLib.__init__(self, marionette_getter)
-
- self.prefs = Preferences(marionette_getter)
-
- @property
- def n_errors(self):
- return self.prefs.get_pref(ERROR_COUNT_PREF)
-
- def reset(self):
- self.prefs.set_pref(ERROR_COUNT_PREF, 0)
+ def _call(self, fn_name):
+ return self.marionette.execute_script("""
+ let fnName = arguments[0];
+ let {LoggingObserver} = Components.utils.import(
+ "chrome://rpc-dev-helper/content/logging-observer.jsm", {});
+ return LoggingObserver[fnName]();
+ """, script_args=[fn_name])
def trigger_error(self, error_type, msg="[Marionette unit test]"):
self._notify_observers("requestpolicy-trigger-logging-error",
@@ -53,35 +48,13 @@ class LoggingErrorDetection(ErrorDetection):
class ConsoleErrorDetection(ErrorDetection):
- @property
- def n_errors(self):
- with self.marionette.using_context("chrome"):
- return self.marionette.execute_script(
- """
- let scope = {};
- Components.utils.import("chrome://rpc-dev-helper/" +
- "content/console-observer.jsm", scope);
- return scope.ConsoleObserver.getNumErrors();
- """)
-
- @property
- def messages(self):
+ def _call(self, fn_name):
return self.marionette.execute_script("""
- let scope = {};
- Components.utils.import("chrome://rpc-dev-helper/" +
- "content/console-observer.jsm", scope);
- return scope.ConsoleObserver.getMessages();
- """)
-
- def reset(self):
- with self.marionette.using_context("chrome"):
- return self.marionette.execute_script(
- """
- let scope = {};
- Components.utils.import("chrome://rpc-dev-helper/content/" +
- "console-observer.jsm", scope);
- scope.ConsoleObserver.reset();
- """)
+ let fnName = arguments[0];
+ let {ConsoleObserver} = Components.utils.import(
+ "chrome://rpc-dev-helper/content/console-observer.jsm", {});
+ return ConsoleObserver[fnName]();
+ """, script_args=[fn_name])
def trigger_error(self, error_type):
self._notify_observers("requestpolicy-trigger-console-error",
diff --git a/tests/marionette/rp_puppeteer/tests/test_error_detection.py b/tests/marionette/rp_puppeteer/tests/test_error_detection.py
index aa12ac6..ddd80de 100644
--- a/tests/marionette/rp_puppeteer/tests/test_error_detection.py
+++ b/tests/marionette/rp_puppeteer/tests/test_error_detection.py
@@ -8,38 +8,38 @@ from rp_puppeteer.api.error_detection import (LoggingErrorDetection,
class TestErrorDetection(RequestPolicyTestCase):
+
def test_logging_error_detection(self):
error_detect = LoggingErrorDetection(lambda: self.marionette)
- previous_value = error_detect.n_errors
+ def assert_n_errors(n):
+ self.assertEqual(n, error_detect.n_errors)
+ self.assertEqual(n, len(error_detect.messages))
- self.assertIsNotNone(previous_value,
- msg="The pref for the error count exists.")
+ assert_n_errors(0)
error_detect.trigger_error(
"warning", msg="[Marionette] test_logging_error_detection")
- self.assertEqual(error_detect.n_errors, previous_value + 1,
- msg="The error has been detected.")
+ assert_n_errors(1)
error_detect.trigger_error(
"severe", msg="[Marionette] test_logging_error_detection")
- self.assertEqual(error_detect.n_errors, previous_value + 2,
- msg="The severe log message has been detected.")
+ assert_n_errors(2)
error_detect.reset()
- self.assertEqual(error_detect.n_errors, 0,
- msg="The Logging error count has been reset.")
+ assert_n_errors(0)
def test_console_error_detection(self):
error_detect = ConsoleErrorDetection(lambda: self.marionette)
- self.assertEqual(error_detect.n_errors, 0,
- msg="The Console error count is zero.")
+ def assert_n_errors(n):
+ self.assertEqual(n, error_detect.n_errors)
+ self.assertEqual(n, len(error_detect.messages))
+
+ assert_n_errors(0)
error_detect.trigger_error("ReferenceError")
- self.assertEqual(error_detect.n_errors, 1,
- msg="The Console error count has increased.")
+ assert_n_errors(1)
error_detect.reset()
- self.assertEqual(error_detect.n_errors, 0,
- msg="The Console error count has been reset.")
+ assert_n_errors(0)
diff --git a/tests/marionette/rp_ui_harness/runner.py b/tests/marionette/rp_ui_harness/runner.py
new file mode 100644
index 0000000..96c6079
--- /dev/null
+++ b/tests/marionette/rp_ui_harness/runner.py
@@ -0,0 +1,59 @@
+# 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/.
+
+from firefox_ui_harness.runners.base import FirefoxUITestRunner
+from mozlog import get_default_logger
+
+from rp_puppeteer.api.error_detection import (LoggingErrorDetection,
+ ConsoleErrorDetection)
+
+
+class RequestPolicyUITestRunner(FirefoxUITestRunner):
+
+ def __init__(self, **kwargs):
+ FirefoxUITestRunner.__init__(self, **kwargs)
+
+ def gather_debug(test, status):
+ rv = {}
+ marionette = test._marionette_weakref()
+
+ if marionette.session is not None:
+ try:
+ self._add_logging_info(rv, marionette)
+ except Exception:
+ logger = get_default_logger()
+ logger.warning("Failed to gather test failure debug.",
+ exc_info=True)
+ return rv
+
+ self.result_callbacks.append(gather_debug)
+
+ def _add_logging_info(self, rv, marionette):
+ m_getter = lambda: self.marionette
+ logging_error_detect = LoggingErrorDetection(m_getter)
+ console_error_detect = ConsoleErrorDetection(m_getter)
+
+ n_logging_errors = logging_error_detect.n_errors
+ logging_errors = logging_error_detect.messages
+ if n_logging_errors > 0:
+ msg = ""
+ n_diff = n_logging_errors - len(logging_errors)
+ if n_diff != 0:
+ msg += ("There are actually {} more logging erros "
+ "than displayed here!\n\n"
+ ).format(n_diff)
+ msg += "\n\n".join(logging_errors)
+ rv["Logging Errors"] = msg
+
+ n_console_errors = console_error_detect.n_errors
+ console_errors = console_error_detect.messages
+ if n_console_errors > 0:
+ msg = ""
+ n_diff = n_console_errors - len(console_errors)
+ if n_diff != 0:
+ msg += ("There are actually {} more console erros "
+ "than displayed here!\n\n"
+ ).format(n_diff)
+ msg += "\n".join(console_errors)
+ rv["console errors"] = msg
diff --git a/tests/marionette/rp_ui_harness/runtests.py b/tests/marionette/rp_ui_harness/runtests.py
new file mode 100755
index 0000000..db8c579
--- /dev/null
+++ b/tests/marionette/rp_ui_harness/runtests.py
@@ -0,0 +1,20 @@
+#!/usr/bin/env python
+
+# 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/.
+
+from marionette.runtests import MarionetteHarness, cli as mn_cli
+
+from firefox_ui_harness.arguments import FirefoxUIArguments
+from firefox_ui_harness.runtests import FirefoxUIHarness
+from rp_ui_harness.runner import RequestPolicyUITestRunner
+
+
+def cli():
+ mn_cli(runner_class=RequestPolicyUITestRunner,
+ parser_class=FirefoxUIArguments,
+ harness_class=FirefoxUIHarness)
+
+if __name__ == '__main__':
+ cli()
diff --git a/tests/marionette/rp_ui_harness/testcases.py b/tests/marionette/rp_ui_harness/testcases.py
index af2b35b..0557283 100644
--- a/tests/marionette/rp_ui_harness/testcases.py
+++ b/tests/marionette/rp_ui_harness/testcases.py
@@ -49,8 +49,9 @@ class RequestPolicyTestCase(RequestPolicyPuppeteer, FirefoxTestCase):
try:
n_rules = self.rules.count_rules()
self.assertEqual(n_rules, 0,
- "A test must not leak rules. Rule count is {}, "
- "but should be zero.".format(n_rules))
+ ("A test must not leak rules. Rule count is {}, "
+ "but should be zero."
+ ).format(n_rules))
finally:
self.rules.remove_all()
@@ -59,17 +60,16 @@ class RequestPolicyTestCase(RequestPolicyPuppeteer, FirefoxTestCase):
n_rules = 0 if rules is None else len(rules)
if n_rules != 0:
self.rules.save()
- self.fail("A test must not leak rules in the rules file. "
- "Rule count is {} but should be zero.".format(n_rules))
+ self.fail(("A test must not leak rules in the rules file. "
+ "Rule count is {} but should be zero."
+ ).format(n_rules))
def _check_and_reset_error_counts(self):
try:
self.assertEqual(self.logging_error_detect.n_errors, 0,
"There should be no logging errers.")
self.assertEqual(self.console_error_detect.n_errors, 0,
- "There should be no console errors. "
- "Messages were: {}"
- .format(self.console_error_detect.messages))
+ "There should be no console errors.")
finally:
self.logging_error_detect.reset()
self.console_error_detect.reset()
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/requestpolicy.git
More information about the Pkg-mozext-commits
mailing list