Index: tools/telemetry/telemetry/page/record_wpr_unittest.py |
diff --git a/tools/telemetry/telemetry/page/record_wpr_unittest.py b/tools/telemetry/telemetry/page/record_wpr_unittest.py |
index 4c89143f6b12eac906b68a1c538b7191f4875540..90b54c367416c5c29b703b5be46a096e33e3158c 100644 |
--- a/tools/telemetry/telemetry/page/record_wpr_unittest.py |
+++ b/tools/telemetry/telemetry/page/record_wpr_unittest.py |
@@ -2,56 +2,189 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
-import unittest |
+import os |
+import sys |
+from telemetry import benchmark |
+from telemetry.core import util |
+from telemetry.core import wpr_modes |
from telemetry.page import page as page_module |
+from telemetry.page import page_set as page_set_module |
+from telemetry.page import page_test |
from telemetry.page import record_wpr |
+from telemetry.unittest import tab_test_case |
-class TestPage(page_module.Page): |
- def __init__(self): |
- super(TestPage, self).__init__(url='file://foo.html', |
- page_set=None, |
- base_dir=None) |
- self.run_navigate = False |
- self.run_foo = False |
- self.run_bar = False |
+class MockPage(page_module.Page): |
+ def __init__(self, page_set, url): |
+ super(MockPage, self).__init__(url=url, |
+ page_set=page_set, |
+ base_dir=util.GetUnittestDataDir()) |
+ self.func_calls = [] |
- def RunNavigateSteps(self, _): |
- self.run_navigate = True |
+ def RunNavigateSteps(self, action_runner): |
+ self.func_calls.append('RunNavigateSteps') |
+ super(MockPage, self).RunNavigateSteps(action_runner) |
def RunFoo(self, _): |
- self.run_foo = True |
+ self.func_calls.append('RunFoo') |
def RunBar(self, _): |
- self.run_bar = True |
- |
+ self.func_calls.append('RunBar') |
-class FakeFooMeasurement(object): |
- def __init__(self): |
- self.action_name_to_run = "RunFoo" |
+ def RunBaz(self, _): |
+ self.func_calls.append('RunBaz') |
-class FakeBarMeasurement(object): |
- def __init__(self): |
- self.action_name_to_run = "RunBar" |
- |
+class MockPageSet(page_set_module.PageSet): |
+ def __init__(self, url=''): |
+ super(MockPageSet, self).__init__(archive_data_file='data/test.json') |
+ self.AddPage(MockPage(self, url)) |
-class FakeTab(object): |
- def WaitForDocumentReadyStateToBeComplete(self): |
- pass |
- |
- |
-class RecordWprUnitTest(unittest.TestCase): |
- def setUp(self): |
- super(RecordWprUnitTest, self).setUp() |
- |
- def testRunActions(self): |
- page = TestPage() |
- record_runner = record_wpr.RecordPage({1 : FakeFooMeasurement, |
- 2 : FakeBarMeasurement}) |
- record_runner.RunPage(page, tab=FakeTab(), results=None) |
- self.assertTrue(page.run_navigate) |
- self.assertTrue(page.run_foo) |
- self.assertTrue(page.run_bar) |
+class MockPageTest(page_test.PageTest): |
+ def __init__(self): |
+ super(MockPageTest, self).__init__() |
+ self._action_name_to_run = "RunBaz" |
+ self.func_calls = [] |
+ |
+ @classmethod |
+ def AddCommandLineArgs(cls, parser): |
+ parser.add_option('--mock-page-test-option', action="store_true") |
+ |
+ def WillNavigateToPage(self, page, tab): |
+ self.func_calls.append('WillNavigateToPage') |
+ |
+ def DidNavigateToPage(self, page, tab): |
+ self.func_calls.append('DidNavigateToPage') |
+ |
+ def WillRunActions(self, page, tab): |
+ self.func_calls.append('WillRunActions') |
+ |
+ def DidRunActions(self, page, tab): |
+ self.func_calls.append('DidRunActions') |
+ |
+ def ValidatePage(self, page, tab, results): |
+ self.func_calls.append('ValidatePage') |
+ |
+ |
+class MockBenchmark(benchmark.Benchmark): |
+ test = MockPageTest |
+ |
+ @classmethod |
+ def AddTestCommandLineArgs(cls, group): |
+ group.add_option('', '--mock-benchmark-url', action='store', type='string') |
+ |
+ def CreatePageSet(self, options): |
+ kwargs = {} |
+ if (options.mock_benchmark_url): |
+ kwargs['url'] = options.mock_benchmark_url |
+ return MockPageSet(**kwargs) |
+ |
+ |
+class RecordWprUnitTests(tab_test_case.TabTestCase): |
+ |
+ _base_dir = util.GetUnittestDataDir() |
+ _test_data_dir = os.path.join(util.GetUnittestDataDir(), 'page_measurements') |
+ |
+ @classmethod |
+ def setUpClass(cls): |
+ sys.path.extend([cls._base_dir, cls._test_data_dir]) |
+ super(RecordWprUnitTests, cls).setUpClass() |
+ cls._browser.SetHTTPServerDirectories(util.GetUnittestDataDir()) |
+ blank_html_path = os.path.join(util.GetUnittestDataDir(), 'blank.html') |
+ cls._url = cls._browser.http_server.UrlOf(blank_html_path) |
+ |
+ # When the RecorderPageTest is created from a PageSet, we do not have a |
+ # PageTest to use. In this case, we will record every available action. |
+ def testRunPage_AllActions(self): |
+ record_page_test = record_wpr.RecorderPageTest(["RunFoo", "RunBar"]) |
+ page = MockPage(page_set=MockPageSet(url=self._url), url=self._url) |
+ record_page_test.RunPage(page, self._tab, results=None) |
+ self.assertTrue('RunFoo' in page.func_calls) |
+ self.assertTrue('RunBar' in page.func_calls) |
+ self.assertFalse('RunBaz' in page.func_calls) |
+ |
+ def testRunPage_DontReloadSingleActions(self): |
+ record_page_test = record_wpr.RecorderPageTest(["RunFoo"]) |
+ page = MockPage(page_set=MockPageSet(url=self._url), url=self._url) |
+ record_page_test.RunPage(page, self._tab, results=None) |
+ self.assertFalse('RunNavigateSteps' in page.func_calls) |
+ |
+ def testRunPage_ReloadPageBetweenActions(self): |
+ record_page_test = record_wpr.RecorderPageTest(["RunFoo", "RunBar"]) |
+ page = MockPage(page_set=MockPageSet(url=self._url), url=self._url) |
+ record_page_test.RunPage(page, self._tab, results=None) |
+ self.assertTrue('RunNavigateSteps' in page.func_calls) |
+ |
+ # When the RecorderPageTest is created from a Benchmark, the benchmark will |
+ # have a PageTest, specified by its test attribute. |
+ def testRunPage_OnlyRunBenchmarkAction(self): |
+ record_page_test = record_wpr.RecorderPageTest(["RunFoo"]) |
+ record_page_test.page_test = MockBenchmark().test() |
+ page = MockPage(page_set=MockPageSet(url=self._url), url=self._url) |
+ record_page_test.RunPage(page, self._tab, results=None) |
+ self.assertFalse('RunFoo' in page.func_calls) |
+ self.assertTrue('RunBaz' in page.func_calls) |
+ |
+ def testRunPage_CallBenchmarksPageTestsFunctions(self): |
+ record_page_test = record_wpr.RecorderPageTest([]) |
+ record_page_test.page_test = MockBenchmark().test() |
+ page = MockPage(page_set=MockPageSet(url=self._url), url=self._url) |
+ record_page_test.RunPage(page, self._tab, results=None) |
+ self.assertEqual(3, len(record_page_test.page_test.func_calls)) |
+ self.assertEqual('WillRunActions', record_page_test.page_test.func_calls[0]) |
+ self.assertEqual('DidRunActions', record_page_test.page_test.func_calls[1]) |
+ self.assertEqual('ValidatePage', record_page_test.page_test.func_calls[2]) |
+ |
+ def testWprRecorderWithPageSet(self): |
+ wpr_recorder = record_wpr.WprRecorder(self._test_data_dir, |
+ MockPageSet(url=self._url)) |
+ results = wpr_recorder.Record() |
+ self.assertEquals(1, len(results.successes)) |
+ mock_page = results.successes.pop() |
+ self.assertTrue('RunFoo' in mock_page.func_calls) |
+ self.assertFalse('RunBaz' in mock_page.func_calls) |
+ |
+ def testWprRecorderWithBenchmark(self): |
+ flags = ['--mock-benchmark-url', self._url] |
+ wpr_recorder = record_wpr.WprRecorder(self._test_data_dir, MockBenchmark(), |
+ flags) |
+ results = wpr_recorder.Record() |
+ self.assertEquals(1, len(results.successes)) |
+ mock_page = results.successes.pop() |
+ self.assertFalse('RunFoo' in mock_page.func_calls) |
+ self.assertTrue('RunBaz' in mock_page.func_calls) |
+ |
+ def testCommandLineFlags(self): |
+ flags = [ |
+ '--page-repeat', '2', |
+ '--mock-benchmark-url', self._url, |
+ '--mock-page-test-option', |
+ ] |
+ wpr_recorder = record_wpr.WprRecorder(self._test_data_dir, MockBenchmark(), |
+ flags) |
+ # page_runner command-line args |
+ self.assertEquals(2, wpr_recorder.options.page_repeat) |
+ # benchmark command-line args |
+ self.assertEquals(self._url, wpr_recorder.options.mock_benchmark_url) |
+ # benchmark's page_test command-line args |
+ self.assertTrue(wpr_recorder.options.mock_page_test_option) |
+ # invalid command-line args |
+ self.assertFalse(hasattr(wpr_recorder.options, 'not_a_real_option')) |
+ |
+ def testRecordingEnabled(self): |
+ flags = ['--mock-benchmark-url', self._url] |
+ wpr_recorder = record_wpr.WprRecorder(self._test_data_dir, MockBenchmark(), |
+ flags) |
+ self.assertEqual(wpr_modes.WPR_RECORD, |
+ wpr_recorder.options.browser_options.wpr_mode) |
+ |
+ def testFindAllActionNames(self): |
+ # The src/tools/telemetry/unittest_data/page_measurements/ has been |
+ # populated with three simple Page Measurement classes, the first two of |
+ # which have action_name_to_run defined. |
+ action_names_to_run = record_wpr.FindAllActionNames(self._test_data_dir) |
+ self.assertTrue('RunFoo' in action_names_to_run) |
+ self.assertTrue('RunBar' in action_names_to_run) |
+ self.assertFalse('RunBaz' in action_names_to_run) |