summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/telemetry/telemetry/page/page.py22
-rw-r--r--tools/telemetry/telemetry/page/page_set_unittest.py22
-rw-r--r--tools/telemetry/telemetry/page/page_unittest.py16
3 files changed, 59 insertions, 1 deletions
diff --git a/tools/telemetry/telemetry/page/page.py b/tools/telemetry/telemetry/page/page.py
index bde3dfb..3af8196 100644
--- a/tools/telemetry/telemetry/page/page.py
+++ b/tools/telemetry/telemetry/page/page.py
@@ -15,7 +15,7 @@ class Page(object):
self._url = url
self._page_set = page_set
# Default value of base_dir is the directory of the file that defines the
- # class of this page instace.
+ # class of this page instance.
if base_dir is None:
base_dir = os.path.dirname(inspect.getfile(self.__class__))
self._base_dir = base_dir
@@ -44,6 +44,26 @@ class Page(object):
if startup_url_scheme == 'file':
raise ValueError('startup_url with local file scheme is not supported')
+ def TransferToPageSet(self, another_page_set):
+ """ Transfer this page to another page set.
+ Args:
+ another_page_set: an instance of telemetry.page.PageSet to transfer this
+ page to.
+ Note:
+ This method removes this page instance from the pages list of its current
+ page_set, so one should be careful not to iterate through the list of
+ pages of a page_set and calling this method.
+ For example, the below loop is erroneous:
+ for p in page_set_A.pages:
+ p.TransferToPageSet(page_set_B.pages)
+ """
+ assert self._page_set
+ if another_page_set is self._page_set:
+ return
+ self._page_set.pages.remove(self)
+ self._page_set = another_page_set
+ self._page_set.AddPage(self)
+
def RunNavigateSteps(self, action_runner):
action_runner.NavigateToPage(self)
diff --git a/tools/telemetry/telemetry/page/page_set_unittest.py b/tools/telemetry/telemetry/page/page_set_unittest.py
index 75afb5b..799b010 100644
--- a/tools/telemetry/telemetry/page/page_set_unittest.py
+++ b/tools/telemetry/telemetry/page/page_set_unittest.py
@@ -7,6 +7,7 @@ import tempfile
import unittest
from telemetry.core import util
+from telemetry.page import page
from telemetry.page import page_set
from telemetry.util import cloud_storage
@@ -98,3 +99,24 @@ class TestPageSet(unittest.TestCase):
self.assertEqual(internal_ps.bucket, expected_bucket)
self.assertRaises(ValueError, page_set.PageSet, bucket='garbage_bucket')
+
+ def testFormingPageSetFromSubPageSet(self):
+ page_set_a = page_set.PageSet()
+ pages = [
+ page.Page('http://foo.com', page_set_a),
+ page.Page('http://bar.com', page_set_a),
+ ]
+ for p in pages:
+ page_set_a.AddPage(p)
+
+ # Form page_set_b from sub page_set_a.
+ page_set_b = page_set.PageSet()
+ for p in pages:
+ p.TransferToPageSet(page_set_b)
+ page_set_b.AddPage(page.Page('http://baz.com', page_set_b))
+ self.assertEqual(0, len(page_set_a.pages))
+ self.assertEqual(
+ set(['http://foo.com', 'http://bar.com', 'http://baz.com']),
+ set(p.url for p in page_set_b.pages))
+ for p in page_set_b.pages:
+ self.assertIs(page_set_b, p.page_set)
diff --git a/tools/telemetry/telemetry/page/page_unittest.py b/tools/telemetry/telemetry/page/page_unittest.py
index c60c59df..b392e55 100644
--- a/tools/telemetry/telemetry/page/page_unittest.py
+++ b/tools/telemetry/telemetry/page/page_unittest.py
@@ -137,3 +137,19 @@ class TestPage(unittest.TestCase):
'url': 'http://example.com/',
'name': 'Example'
}, named_dict)
+
+ def testTransferToPageSet(self):
+ page_set_a = page_set.PageSet()
+ page_set_b = page_set.PageSet()
+ page_foo = page.Page('http://foo.com', page_set_a)
+ page_bar = page.Page('http://bar.com', page_set_a)
+ page_baz = page.Page('http://baz.com', page_set_a)
+
+ page_set_a.AddPage(page_foo)
+ page_set_a.AddPage(page_bar)
+ page_set_a.AddPage(page_baz)
+
+ page_bar.TransferToPageSet(page_set_b)
+ self.assertEqual([page_foo, page_baz], page_set_a.pages)
+ self.assertEqual([page_bar], page_set_b.pages)
+ self.assertIs(page_set_b, page_bar.page_set)