[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