| OLD | NEW |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import unittest | 5 import unittest |
| 6 | 6 |
| 7 from telemetry.core import browser_options | 7 from telemetry.core import browser_options |
| 8 from telemetry.page import page_runner | 8 from telemetry.page import page_runner |
| 9 from telemetry.results import page_test_results | 9 from telemetry.results import page_test_results |
| 10 from telemetry.unittest import simple_mock | 10 from telemetry.unittest import simple_mock |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 pass | 31 pass |
| 32 | 32 |
| 33 def AddSummaryResults(self, tab, results): | 33 def AddSummaryResults(self, tab, results): |
| 34 pass | 34 pass |
| 35 | 35 |
| 36 | 36 |
| 37 class FakePage(object): | 37 class FakePage(object): |
| 38 """Used to mock loading a page.""" | 38 """Used to mock loading a page.""" |
| 39 def __init__(self, url): | 39 def __init__(self, url): |
| 40 self.url = url | 40 self.url = url |
| 41 self.is_file = url.startswith('file://') |
| 41 | 42 |
| 42 | 43 |
| 43 class FakeTab(object): | 44 class FakeTab(object): |
| 44 """Used to mock a browser tab.""" | 45 """Used to mock a browser tab.""" |
| 45 def __init__(self): | 46 def __init__(self): |
| 46 self.clear_cache_calls = 0 | 47 self.clear_cache_calls = 0 |
| 48 self.navigated_urls = [] |
| 47 def ClearCache(self, force=False): | 49 def ClearCache(self, force=False): |
| 48 assert force | 50 assert force |
| 49 self.clear_cache_calls += 1 | 51 self.clear_cache_calls += 1 |
| 50 def EvaluateJavaScript(self, _): | 52 def EvaluateJavaScript(self, _): |
| 51 return 1 | 53 return 1 |
| 54 def Navigate(self, url): |
| 55 self.navigated_urls.append(url) |
| 52 def WaitForJavaScriptExpression(self, _, __): | 56 def WaitForJavaScriptExpression(self, _, __): |
| 53 pass | 57 pass |
| 54 @property | 58 @property |
| 55 def browser(self): | 59 def browser(self): |
| 56 return FakeBrowser() | 60 return FakeBrowser() |
| 57 | 61 |
| 58 class FakeBrowser(object): | 62 class FakeBrowser(object): |
| 59 _iteration = 0 | 63 _iteration = 0 |
| 60 | 64 |
| 61 @property | 65 @property |
| 62 def cpu_stats(self): | 66 def cpu_stats(self): |
| 63 FakeBrowser._iteration += 1 | 67 FakeBrowser._iteration += 1 |
| 64 return { | 68 return { |
| 65 'Browser': {'CpuProcessTime': FakeBrowser._iteration, | 69 'Browser': {'CpuProcessTime': FakeBrowser._iteration, |
| 66 'TotalTime': FakeBrowser._iteration * 2}, | 70 'TotalTime': FakeBrowser._iteration * 2}, |
| 67 'Renderer': {'CpuProcessTime': FakeBrowser._iteration, | 71 'Renderer': {'CpuProcessTime': FakeBrowser._iteration, |
| 68 'TotalTime': FakeBrowser._iteration * 3}, | 72 'TotalTime': FakeBrowser._iteration * 3}, |
| 69 'Gpu': {'CpuProcessTime': FakeBrowser._iteration, | 73 'Gpu': {'CpuProcessTime': FakeBrowser._iteration, |
| 70 'TotalTime': FakeBrowser._iteration * 4} | 74 'TotalTime': FakeBrowser._iteration * 4} |
| 71 } | 75 } |
| 72 @property | 76 @property |
| 73 def platform(self): | 77 def platform(self): |
| 74 return FakePlatform() | 78 return FakePlatform() |
| 75 | 79 |
| 80 @property |
| 81 def http_server(self): |
| 82 class FakeHttpServer(object): |
| 83 def UrlOf(self, url_path): |
| 84 return 'http://fakeserver:99999/%s' % url_path |
| 85 return FakeHttpServer() |
| 86 |
| 76 | 87 |
| 77 class FakePlatform(object): | 88 class FakePlatform(object): |
| 78 def GetOSName(self): | 89 def GetOSName(self): |
| 79 return 'fake' | 90 return 'fake' |
| 80 def CanMonitorPower(self): | 91 def CanMonitorPower(self): |
| 81 return False | 92 return False |
| 82 | 93 |
| 83 | 94 |
| 84 class PageCyclerUnitTest(unittest.TestCase): | 95 class PageCyclerUnitTest(unittest.TestCase): |
| 85 | 96 |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 self.assertEqual(values[0].name, '%s.page_load_time' % chart_name) | 217 self.assertEqual(values[0].name, '%s.page_load_time' % chart_name) |
| 207 self.assertEqual(values[0].units, 'ms') | 218 self.assertEqual(values[0].units, 'ms') |
| 208 | 219 |
| 209 for value, expected in zip(values[1:], ['gpu', 'renderer', 'browser']): | 220 for value, expected in zip(values[1:], ['gpu', 'renderer', 'browser']): |
| 210 self.assertEqual(value.page, page) | 221 self.assertEqual(value.page, page) |
| 211 self.assertEqual(value.name, | 222 self.assertEqual(value.name, |
| 212 'cpu_utilization.cpu_utilization_%s' % expected) | 223 'cpu_utilization.cpu_utilization_%s' % expected) |
| 213 self.assertEqual(value.units, '%') | 224 self.assertEqual(value.units, '%') |
| 214 | 225 |
| 215 cycler.DidNavigateToPage(page, tab) | 226 cycler.DidNavigateToPage(page, tab) |
| 227 |
| 228 def testLegacyPagesAvoidCrossRenderNavigation(self): |
| 229 # For legacy page cyclers with file URLs, verify that WillNavigateToPage |
| 230 # does an initial navigate to avoid paying for a cross-renderer navigation. |
| 231 cycler = self.SetUpCycler([], True) |
| 232 pages = [FakePage('file://fakepage1.com'), FakePage('file://fakepage2.com')] |
| 233 tab = FakeTab() |
| 234 |
| 235 self.assertEqual([], tab.navigated_urls) |
| 236 for page in pages * 2: |
| 237 cycler.WillNavigateToPage(page, tab) |
| 238 self.assertEqual( |
| 239 ['http://fakeserver:99999/nonexistent.html'], tab.navigated_urls) |
| OLD | NEW |