Update sdk/platform-tools to version 26.0.0.
[android_tools.git] / sdk / platform-tools / systrace / catapult / telemetry / telemetry / testing / page_test_test_case.py
blobd7e7296d2009bc90fa2e1d00c9eed5f9c6a2f347
1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
5 """Provide a TestCase base class for PageTest subclasses' unittests."""
7 import unittest
9 from telemetry import benchmark
10 from telemetry import story
11 from telemetry.core import exceptions
12 from telemetry.core import util
13 from telemetry.internal.results import results_options
14 from telemetry.internal import story_runner
15 from telemetry.page import page as page_module
16 from telemetry.page import legacy_page_test
17 from telemetry.testing import options_for_unittests
20 class BasicTestPage(page_module.Page):
21 def __init__(self, url, story_set, base_dir):
22 super(BasicTestPage, self).__init__(url, story_set, base_dir)
24 def RunPageInteractions(self, action_runner):
25 with action_runner.CreateGestureInteraction('ScrollAction'):
26 action_runner.ScrollPage()
29 class EmptyMetadataForTest(benchmark.BenchmarkMetadata):
30 def __init__(self):
31 super(EmptyMetadataForTest, self).__init__('')
34 class PageTestTestCase(unittest.TestCase):
35 """A base class to simplify writing unit tests for PageTest subclasses."""
37 def CreateStorySetFromFileInUnittestDataDir(self, test_filename):
38 ps = self.CreateEmptyPageSet()
39 page = BasicTestPage('file://' + test_filename, ps, base_dir=ps.base_dir)
40 ps.AddStory(page)
41 return ps
43 def CreateEmptyPageSet(self):
44 base_dir = util.GetUnittestDataDir()
45 ps = story.StorySet(base_dir=base_dir)
46 return ps
48 def RunMeasurement(self, measurement, ps,
49 options=None):
50 """Runs a measurement against a pageset, returning the rows its outputs."""
51 if options is None:
52 options = options_for_unittests.GetCopy()
53 assert options
54 temp_parser = options.CreateParser()
55 story_runner.AddCommandLineArgs(temp_parser)
56 defaults = temp_parser.get_default_values()
57 for k, v in defaults.__dict__.items():
58 if hasattr(options, k):
59 continue
60 setattr(options, k, v)
62 if isinstance(measurement, legacy_page_test.LegacyPageTest):
63 measurement.CustomizeBrowserOptions(options.browser_options)
64 options.output_file = None
65 options.output_formats = ['none']
66 options.suppress_gtest_report = True
67 options.output_trace_tag = None
68 story_runner.ProcessCommandLineArgs(temp_parser, options)
69 results = results_options.CreateResults(EmptyMetadataForTest(), options)
70 story_runner.Run(measurement, ps, options, results)
71 return results
73 def TestTracingCleanedUp(self, measurement_class, options=None):
74 ps = self.CreateStorySetFromFileInUnittestDataDir('blank.html')
75 start_tracing_called = [False]
76 stop_tracing_called = [False]
78 class BuggyMeasurement(measurement_class):
79 def __init__(self, *args, **kwargs):
80 measurement_class.__init__(self, *args, **kwargs)
82 # Inject fake tracing methods to tracing_controller
83 def TabForPage(self, page, browser):
84 ActualStartTracing = browser.platform.tracing_controller.StartTracing
85 def FakeStartTracing(*args, **kwargs):
86 ActualStartTracing(*args, **kwargs)
87 start_tracing_called[0] = True
88 raise exceptions.IntentionalException
89 browser.StartTracing = FakeStartTracing
91 ActualStopTracing = browser.platform.tracing_controller.StopTracing
92 def FakeStopTracing(*args, **kwargs):
93 result = ActualStopTracing(*args, **kwargs)
94 stop_tracing_called[0] = True
95 return result
96 browser.platform.tracing_controller.StopTracing = FakeStopTracing
98 return measurement_class.TabForPage(self, page, browser)
100 measurement = BuggyMeasurement()
101 try:
102 self.RunMeasurement(measurement, ps, options=options)
103 except legacy_page_test.TestNotSupportedOnPlatformError:
104 pass
105 if start_tracing_called[0]:
106 self.assertTrue(stop_tracing_called[0])