page_runner_unittest.py revision a36e5920737c6adbddd3e43b760e5de8431db6e0
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# found in the LICENSE file. 490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)import logging 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import os 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import tempfile 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import unittest 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.core import user_agent 10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)from telemetry.core import util 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.page import page as page_module 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.page import page_set 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.page import page_test 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.page import page_runner 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)from telemetry.unittest import options_for_unittests 16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochfrom telemetry.page import test_expectations 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SIMPLE_CREDENTIALS_STRING = """ 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "test": { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "username": "example", 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "password": "asdf" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)""" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class StubCredentialsBackend(object): 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def __init__(self, login_return_value): 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.did_get_login = False 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.did_get_login_no_longer_needed = False 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.login_return_value = login_return_value 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @property 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def credentials_type(self): # pylint: disable=R0201 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 'test' 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def LoginNeeded(self, tab, config): # pylint: disable=W0613 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.did_get_login = True 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return self.login_return_value 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def LoginNoLongerNeeded(self, tab): # pylint: disable=W0613 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.did_get_login_no_longer_needed = True 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PageRunnerTests(unittest.TestCase): 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # TODO(nduca): Move the basic "test failed, test succeeded" tests from 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # page_measurement_unittest to here. 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def testHandlingOfCrashedTab(self): 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps = page_set.PageSet() 49ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page1 = page_module.Page('chrome://crash', ps) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.pages.append(page1) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class Test(page_test.PageTest): 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def RunTest(self, *args): 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pass 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 59ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch results = page_runner.Run(Test('RunTest'), ps, expectations, options) 6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self.assertEquals(0, len(results.successes)) 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self.assertEquals(1, len(results.errors)) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def testDiscardFirstResult(self): 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ps = page_set.PageSet() 65ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 66a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ps.pages.append(page_module.Page( 67a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 'file:///' + os.path.join(util.GetUnittestDataDir(), 'blank.html'), 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ps, 69a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base_dir=os.path.dirname(__file__))) 70a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ps.pages.append(page_module.Page( 71a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 'file:///' + os.path.join(util.GetUnittestDataDir(), 'blank.html'), 72a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ps, 73a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base_dir=os.path.dirname(__file__))) 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) class Test(page_test.PageTest): 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @property 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def discard_first_result(self): 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return True 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def RunTest(self, *args): 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pass 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 84a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 85a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch options.repeat_options.page_repeat_iters = 1 86a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch options.repeat_options.pageset_repeat_iters = 1 87ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch results = page_runner.Run(Test('RunTest'), ps, expectations, options) 8890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self.assertEquals(0, len(results.successes)) 8990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self.assertEquals(0, len(results.failures)) 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 91a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch options.repeat_options.page_repeat_iters = 1 92a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch options.repeat_options.pageset_repeat_iters = 2 93a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch results = page_runner.Run(Test('RunTest'), ps, expectations, options) 94a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch self.assertEquals(2, len(results.successes)) 95a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch self.assertEquals(0, len(results.failures)) 96a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 97a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch options.repeat_options.page_repeat_iters = 2 98a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch options.repeat_options.pageset_repeat_iters = 1 99a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch results = page_runner.Run(Test('RunTest'), ps, expectations, options) 100a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch self.assertEquals(2, len(results.successes)) 101a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch self.assertEquals(0, len(results.failures)) 102a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) def testCredentialsWhenLoginFails(self): 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credentials_backend = StubCredentialsBackend(login_return_value=False) 1057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) did_run = self.runCredentialsTest(credentials_backend) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert credentials_backend.did_get_login == True 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert credentials_backend.did_get_login_no_longer_needed == False 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert did_run == False 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) def testCredentialsWhenLoginSucceeds(self): 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credentials_backend = StubCredentialsBackend(login_return_value=True) 1127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) did_run = self.runCredentialsTest(credentials_backend) 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert credentials_backend.did_get_login == True 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert credentials_backend.did_get_login_no_longer_needed == True 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert did_run 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def runCredentialsTest(self, # pylint: disable=R0201 1187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) credentials_backend): 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps = page_set.PageSet() 120ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 12190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) page = page_module.Page( 122a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 'file:///' + os.path.join(util.GetUnittestDataDir(), 'blank.html'), 12390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ps, 12490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base_dir=os.path.dirname(__file__)) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page.credentials = "test" 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.pages.append(page) 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) did_run = [False] 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) try: 13190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) with tempfile.NamedTemporaryFile(delete=False) as f: 13290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) f.write(SIMPLE_CREDENTIALS_STRING) 13390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ps.credentials_path = f.name 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TestThatInstallsCredentialsBackend(page_test.PageTest): 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def __init__(self, credentials_backend): 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) super(TestThatInstallsCredentialsBackend, self).__init__('RunTest') 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self._credentials_backend = credentials_backend 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 140a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def DidStartBrowser(self, browser): 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser.credentials.AddBackend(self._credentials_backend) 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def RunTest(self, page, tab, results): # pylint: disable=W0613,R0201 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) did_run[0] = True 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test = TestThatInstallsCredentialsBackend(credentials_backend) 1477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 149ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch page_runner.Run(test, ps, expectations, options) 15090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) finally: 15190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) os.remove(f.name) 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return did_run[0] 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def testUserAgent(self): 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps = page_set.PageSet() 157ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page = page_module.Page( 159a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 'file:///' + os.path.join(util.GetUnittestDataDir(), 'blank.html'), 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps, 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base_dir=os.path.dirname(__file__)) 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.pages.append(page) 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.user_agent_type = 'tablet' 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TestUserAgent(page_test.PageTest): 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def RunTest(self, page, tab, results): # pylint: disable=W0613,R0201 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) actual_user_agent = tab.EvaluateJavaScript('window.navigator.userAgent') 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_user_agent = user_agent.UA_TYPE_MAPPING['tablet'] 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert actual_user_agent.strip() == expected_user_agent 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # This is so we can check later that the test actually made it into this 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # function. Previously it was timing out before even getting here, which 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # should fail, but since it skipped all the asserts, it slipped by. 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.hasRun = True # pylint: disable=W0201 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test = TestUserAgent('RunTest') 1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 1787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 179ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch page_runner.Run(test, ps, expectations, options) 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.assertTrue(hasattr(test, 'hasRun') and test.hasRun) 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # Ensure that page_runner forces exactly 1 tab before running a page. 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def testOneTab(self): 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps = page_set.PageSet() 186ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page = page_module.Page( 188a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 'file:///' + os.path.join(util.GetUnittestDataDir(), 'blank.html'), 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps, 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base_dir=os.path.dirname(__file__)) 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.pages.append(page) 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TestOneTab(page_test.PageTest): 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def __init__(self, 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_method_name, 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) action_name_to_run='', 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) needs_browser_restart_after_each_run=False): 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) super(TestOneTab, self).__init__(test_method_name, action_name_to_run, 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) needs_browser_restart_after_each_run) 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self._browser = None 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def DidStartBrowser(self, browser): 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self._browser = browser 20490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if self._browser.supports_tab_control: 20590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self._browser.tabs.New() 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def RunTest(self, page, tab, results): # pylint: disable=W0613,R0201 20890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if not self._browser.supports_tab_control: 20990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) logging.warning('Browser does not support tab control, skipping test') 21090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert len(self._browser.tabs) == 1 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test = TestOneTab('RunTest') 2147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 2157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 216ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch page_runner.Run(test, ps, expectations, options) 217a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 218a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) # Ensure that page_runner allows the test to customize the browser before it 219a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) # launches. 220a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def testBrowserBeforeLaunch(self): 221a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ps = page_set.PageSet() 222a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) expectations = test_expectations.TestExpectations() 223a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) page = page_module.Page( 224a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 'file:///' + os.path.join(util.GetUnittestDataDir(), 'blank.html'), 225a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ps, 226a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base_dir=os.path.dirname(__file__)) 227a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ps.pages.append(page) 228a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 229a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) class TestBeforeLaunch(page_test.PageTest): 230a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def __init__(self, 231a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_method_name, 232a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) action_name_to_run=''): 233a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) super(TestBeforeLaunch, self).__init__( 234a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_method_name, action_name_to_run, False) 235a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self._did_call_will_start = False 236a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self._did_call_did_start = False 237a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 238a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def WillStartBrowser(self, browser): 239a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self._did_call_will_start = True 240a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) # TODO(simonjam): Test that the profile is available. 241a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 242a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def DidStartBrowser(self, browser): 243a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) assert self._did_call_will_start 244a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self._did_call_did_start = True 245a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 246a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def RunTest(self, page, tab, results): # pylint: disable=W0613,R0201 247a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) assert self._did_call_did_start 248a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 249a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test = TestBeforeLaunch('RunTest') 250a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) options = options_for_unittests.GetCopy() 251a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) options.output_format = 'none' 252a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) page_runner.Run(test, ps, expectations, options) 253