[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