[Pkg-mozext-commits] [requestpolicy] 72/257: [tst][add] RP Puppeteer "request_log" library

David Prévot taffit at moszumanska.debian.org
Thu Jan 28 03:19:58 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 89fbefb48bf0860f3f993c52a45808c43e0e869d
Author: Martin Kimmerle <dev at 256k.de>
Date:   Fri Oct 9 17:53:27 2015 +0200

    [tst][add] RP Puppeteer "request_log" library
    
    This library allows to control the elements on the Request Log.
    Some parts of this library have been taken from the Marionette
    library `request-log-utils.js`.
---
 tests/marionette/rp_puppeteer/__init__.py          |   4 +
 tests/marionette/rp_puppeteer/tests/manifest.ini   |   1 +
 .../rp_puppeteer/tests/test_request_log.py         |  98 +++++++++++++++++
 tests/marionette/rp_puppeteer/ui/request_log.py    | 118 +++++++++++++++++++++
 4 files changed, 221 insertions(+)

diff --git a/tests/marionette/rp_puppeteer/__init__.py b/tests/marionette/rp_puppeteer/__init__.py
index 7482250..829a5e3 100644
--- a/tests/marionette/rp_puppeteer/__init__.py
+++ b/tests/marionette/rp_puppeteer/__init__.py
@@ -36,6 +36,10 @@ class RequestPolicyPuppeteer(object):
     def redir(self):
         pass
 
+    @use_class_as_property('ui.request_log.RequestLog')
+    def request_log(self):
+        pass
+
     @use_class_as_property('ui.tabs.Tabs')
     def tabs(self):
         pass
diff --git a/tests/marionette/rp_puppeteer/tests/manifest.ini b/tests/marionette/rp_puppeteer/tests/manifest.ini
index 69b1fd1..290d1a2 100644
--- a/tests/marionette/rp_puppeteer/tests/manifest.ini
+++ b/tests/marionette/rp_puppeteer/tests/manifest.ini
@@ -2,6 +2,7 @@
 [test_error_detection.py]
 [test_l10n.py]
 [test_prefs.py]
+[test_request_log.py]
 [test_requests.py]
 [test_rules.py]
 [test_your_policy.py]
diff --git a/tests/marionette/rp_puppeteer/tests/test_request_log.py b/tests/marionette/rp_puppeteer/tests/test_request_log.py
new file mode 100644
index 0000000..6fc4abc
--- /dev/null
+++ b/tests/marionette/rp_puppeteer/tests/test_request_log.py
@@ -0,0 +1,98 @@
+# 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 rp_ui_harness import RequestPolicyTestCase
+
+
+PREF_DEFAULT_ALLOW = "extensions.requestpolicy.defaultPolicy.allow"
+
+
+class RequestLogTestCase(RequestPolicyTestCase):
+
+    def tearDown(self):
+        try:
+            if self.request_log.is_open():
+                self.request_log.close()
+        finally:
+            super(RequestLogTestCase, self).tearDown()
+
+    def _create_some_requests(self):
+        with self.marionette.using_context("content"):
+            self.marionette.navigate("http://www.maindomain.test/img_1.html")
+
+
+class TestRequestLog(RequestLogTestCase):
+
+    def test_open_close(self):
+        self.assertFalse(self.request_log.is_open())
+        self.request_log.open()
+        self.assertTrue(self.request_log.is_open())
+        self.request_log.close()
+        self.assertFalse(self.request_log.is_open())
+
+    def test_clear(self):
+        self.request_log.open()
+
+        self._create_some_requests()
+
+        with self.request_log.in_iframe():
+            self.assertGreater(self.request_log.row_count, 0,
+                               "The Request Log is not empty.")
+
+        self.request_log.clear()
+
+        with self.request_log.in_iframe():
+            self.assertEqual(self.request_log.row_count, 0,
+                             "The Request Log is empty.")
+
+
+class TestGettingRequests(RequestLogTestCase):
+
+    def setUp(self):
+        super(TestGettingRequests, self).setUp()
+
+        self.prefs.set_pref(PREF_DEFAULT_ALLOW, False)
+        self.request_log.open()
+        self.request_log.clear()
+
+    def tearDown(self):
+        try:
+            self.prefs.reset_pref(PREF_DEFAULT_ALLOW)
+        finally:
+            super(TestGettingRequests, self).tearDown()
+
+    def test_row_count_property(self):
+        self._create_some_requests()
+
+        with self.request_log.in_iframe():
+            self.assertEqual(self.request_log.row_count,
+                             len(self.request_log.rows))
+
+    def test_compare_with_requests_api(self):
+        # A test page with one allowed and one denied request.
+        url = "http://www.maindomain.test/img_1.html"
+
+        # Create some requests and record them with the Requests API.
+        with self.requests.listen():
+            with self.marionette.using_context("content"):
+                self.marionette.navigate(url)
+
+        api_requests = self.requests.all
+        with self.request_log.in_iframe():
+            ui_requests = self.request_log.rows
+            row_count = self.request_log.row_count
+
+        # Check the row count.
+        self.assertEqual(len(ui_requests), row_count)
+        self.assertEqual(len(api_requests), row_count)
+
+        for i in range(row_count):
+            # The orders of the two lists are vice versa.
+            request = api_requests[i]
+            row = ui_requests[row_count - i - 1]
+
+            row_request = {"origin": row["origin"], "dest": row["dest"],
+                           "isAllowed": row["isAllowed"]}
+
+            self.assertEqual(row_request, request)
diff --git a/tests/marionette/rp_puppeteer/ui/request_log.py b/tests/marionette/rp_puppeteer/ui/request_log.py
new file mode 100644
index 0000000..e4efff3
--- /dev/null
+++ b/tests/marionette/rp_puppeteer/ui/request_log.py
@@ -0,0 +1,118 @@
+# 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_puppeteer.base import BaseLib
+from contextlib import contextmanager
+
+
+class RequestLog(BaseLib):
+
+    #################################
+    # Public Properties and Methods #
+    #################################
+
+    @property
+    def row_count(self):
+        return self.marionette.execute_script("""
+          var tree = arguments[0];
+          return tree.view.rowCount;
+        """, [self._tree])
+
+    @property
+    def rows(self):
+        """Get a list of all rows."""
+
+        return self.marionette.execute_script("""
+          var tree = arguments[0];
+
+          {
+            let getCol = tree.columns.getNamedColumn.bind(tree.columns);
+
+            var originCol = getCol("rpcontinued-requestLog-origin");
+            var destCol = getCol("rpcontinued-requestLog-destination");
+            var blockedCol = getCol("rpcontinued-requestLog-blocked");
+            var timeCol = getCol("rpcontinued-requestLog-time");
+          }
+
+          var getCellText = tree.view.getCellText.bind(tree.view);
+          var isRequestAllowed = function (row) {
+            var blockedImg = "chrome://rpcontinued/skin/dot.png";
+            var imgSrc = tree.view.getImageSrc(row, blockedCol);
+            return imgSrc !== blockedImg;
+          };
+
+          var rows = [];
+
+          for (let i = 0; i < tree.view.rowCount; ++i) {
+            rows.push({
+              origin: getCellText(i, originCol),
+              dest: getCellText(i, destCol),
+              isAllowed: isRequestAllowed(i),
+              time: getCellText(i, timeCol)
+            });
+          }
+
+          return rows;
+        """, [self._tree])
+
+    def open(self):
+        if not self.is_open():
+            self._toggle()
+
+            # Briefly enter the iframe to make sure the it's loaded.
+            with self.in_iframe():
+                pass
+
+    def is_open(self):
+        request_log_uri = "chrome://rpcontinued/content/ui/request-log.xul"
+        return self._iframe.get_attribute("src") == request_log_uri
+
+    def close(self):
+        self._close_button.click()
+
+    def clear(self):
+        self._clear_button.click()
+
+    def switch_to_iframe(self):
+        self.marionette.switch_to_frame(self._iframe)
+
+    @contextmanager
+    def in_iframe(self):
+        frame = self.marionette.get_active_frame()
+        self.switch_to_iframe()
+        yield
+        self.marionette.switch_to_frame(frame)
+
+    ##################################
+    # Private Properties and Methods #
+    ##################################
+
+    @property
+    def _close_button(self):
+        return self.marionette.find_element("id",
+                                            "rpcontinued-requestLog-close")
+
+    @property
+    def _clear_button(self):
+        return self.marionette.find_element("id",
+                                            "rpcontinued-requestLog-clear")
+
+    @property
+    def _iframe(self):
+        """Return the <iframe> of the Request Log."""
+
+        return (
+            self.marionette
+            .find_element("id", "rpcontinued-requestLog-frame")
+        )
+
+    @property
+    def _tree(self):
+        return self.marionette.find_element("id",
+                                            "rpcontinued-requestLog-tree")
+
+    def _toggle(self):
+        self.marionette.execute_script("""
+          window.rpcontinued.overlay.toggleRequestLog();
+        """)

-- 
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