Commit 7f701013 authored by nednguyen@google.com's avatar nednguyen@google.com

Add Page. TransferToPageSet API that allows transferring pages from one page_set to another.

BUG=394085

Review URL: https://codereview.chromium.org/397793005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@287476 0039d316-1c4b-4281-b951-d872f2087c98
parent 7fd61e32
......@@ -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)
......
......@@ -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)
......@@ -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)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment