page_runner_unittest.py revision 3551c9c881056c480085172ff9840cab31610854
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 12ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochfrom telemetry.page import page_measurement 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.page import page_set 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.page import page_test 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.page import page_runner 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)from telemetry.unittest import options_for_unittests 17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochfrom telemetry.page import test_expectations 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SIMPLE_CREDENTIALS_STRING = """ 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "test": { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "username": "example", 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "password": "asdf" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)""" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class StubCredentialsBackend(object): 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def __init__(self, login_return_value): 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.did_get_login = False 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.did_get_login_no_longer_needed = False 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.login_return_value = login_return_value 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @property 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def credentials_type(self): # pylint: disable=R0201 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 'test' 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def LoginNeeded(self, tab, config): # pylint: disable=W0613 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.did_get_login = True 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return self.login_return_value 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def LoginNoLongerNeeded(self, tab): # pylint: disable=W0613 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.did_get_login_no_longer_needed = True 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PageRunnerTests(unittest.TestCase): 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # TODO(nduca): Move the basic "test failed, test succeeded" tests from 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # page_measurement_unittest to here. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def testHandlingOfCrashedTab(self): 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps = page_set.PageSet() 50ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page1 = page_module.Page('chrome://crash', ps) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.pages.append(page1) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class Test(page_test.PageTest): 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def RunTest(self, *args): 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pass 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 60ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch results = page_runner.Run(Test('RunTest'), ps, expectations, options) 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self.assertEquals(0, len(results.successes)) 623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(0, len(results.failures)) 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self.assertEquals(1, len(results.errors)) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def testHandlingOfCrashedTabWithExpectedFailure(self): 663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ps = page_set.PageSet() 673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expectations = test_expectations.TestExpectations() 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expectations.Fail('chrome://crash') 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) page1 = page_module.Page('chrome://crash', ps) 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ps.pages.append(page1) 713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) class Test(page_test.PageTest): 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def RunTest(self, *args): 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) pass 753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) options = options_for_unittests.GetCopy() 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) options.output_format = 'none' 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) results = page_runner.Run(Test('RunTest'), ps, expectations, options) 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(1, len(results.successes)) 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(0, len(results.failures)) 813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(0, len(results.errors)) 823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def testDiscardFirstResult(self): 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ps = page_set.PageSet() 85ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 86a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ps.pages.append(page_module.Page( 873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'file:///blank.html', ps, base_dir=util.GetUnittestDataDir())) 88a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ps.pages.append(page_module.Page( 893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'file:///blank.html', ps, base_dir=util.GetUnittestDataDir())) 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 91ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch class Measurement(page_measurement.PageMeasurement): 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @property 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def discard_first_result(self): 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return True 95ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch def MeasurePage(self, *args): 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pass 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 100ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch options.reset_html_results = None 101a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 102a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch options.repeat_options.page_repeat_iters = 1 103a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch options.repeat_options.pageset_repeat_iters = 1 104ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch results = page_runner.Run(Measurement(), ps, expectations, options) 10590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self.assertEquals(0, len(results.successes)) 10690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self.assertEquals(0, len(results.failures)) 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 108a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch options.repeat_options.page_repeat_iters = 1 109a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch options.repeat_options.pageset_repeat_iters = 2 110ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch results = page_runner.Run(Measurement(), ps, expectations, options) 111a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch self.assertEquals(2, len(results.successes)) 112a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch self.assertEquals(0, len(results.failures)) 113a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 114a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch options.repeat_options.page_repeat_iters = 2 115a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch options.repeat_options.pageset_repeat_iters = 1 116ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch results = page_runner.Run(Measurement(), ps, expectations, options) 117a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch self.assertEquals(2, len(results.successes)) 118a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch self.assertEquals(0, len(results.failures)) 119a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 120ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch options.output_format = 'html' 121ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch options.repeat_options.page_repeat_iters = 1 122ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch options.repeat_options.pageset_repeat_iters = 1 123ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch results = page_runner.Run(Measurement(), ps, expectations, options) 124ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch self.assertEquals(0, len(results.successes)) 125ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch self.assertEquals(0, len(results.failures)) 126ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 12790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) def testCredentialsWhenLoginFails(self): 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credentials_backend = StubCredentialsBackend(login_return_value=False) 1297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) did_run = self.runCredentialsTest(credentials_backend) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert credentials_backend.did_get_login == True 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert credentials_backend.did_get_login_no_longer_needed == False 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert did_run == False 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) def testCredentialsWhenLoginSucceeds(self): 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credentials_backend = StubCredentialsBackend(login_return_value=True) 1367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) did_run = self.runCredentialsTest(credentials_backend) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert credentials_backend.did_get_login == True 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert credentials_backend.did_get_login_no_longer_needed == True 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert did_run 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def runCredentialsTest(self, # pylint: disable=R0201 1427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) credentials_backend): 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps = page_set.PageSet() 144ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 14590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) page = page_module.Page( 1463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'file:///blank.html', ps, base_dir=util.GetUnittestDataDir()) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page.credentials = "test" 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.pages.append(page) 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) did_run = [False] 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) try: 15390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) with tempfile.NamedTemporaryFile(delete=False) as f: 15490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) f.write(SIMPLE_CREDENTIALS_STRING) 15590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ps.credentials_path = f.name 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TestThatInstallsCredentialsBackend(page_test.PageTest): 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def __init__(self, credentials_backend): 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) super(TestThatInstallsCredentialsBackend, self).__init__('RunTest') 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self._credentials_backend = credentials_backend 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def DidStartBrowser(self, browser): 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser.credentials.AddBackend(self._credentials_backend) 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def RunTest(self, page, tab, results): # pylint: disable=W0613,R0201 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) did_run[0] = True 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test = TestThatInstallsCredentialsBackend(credentials_backend) 1697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 1707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 171ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch page_runner.Run(test, ps, expectations, options) 17290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) finally: 17390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) os.remove(f.name) 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return did_run[0] 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def testUserAgent(self): 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps = page_set.PageSet() 179ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page = page_module.Page( 1813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'file:///blank.html', ps, base_dir=util.GetUnittestDataDir()) 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.pages.append(page) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.user_agent_type = 'tablet' 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TestUserAgent(page_test.PageTest): 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def RunTest(self, page, tab, results): # pylint: disable=W0613,R0201 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) actual_user_agent = tab.EvaluateJavaScript('window.navigator.userAgent') 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_user_agent = user_agent.UA_TYPE_MAPPING['tablet'] 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert actual_user_agent.strip() == expected_user_agent 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # This is so we can check later that the test actually made it into this 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # function. Previously it was timing out before even getting here, which 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # should fail, but since it skipped all the asserts, it slipped by. 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.hasRun = True # pylint: disable=W0201 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test = TestUserAgent('RunTest') 1977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 1987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 199ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch page_runner.Run(test, ps, expectations, options) 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.assertTrue(hasattr(test, 'hasRun') and test.hasRun) 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # Ensure that page_runner forces exactly 1 tab before running a page. 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def testOneTab(self): 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps = page_set.PageSet() 206ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page = page_module.Page( 2083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'file:///blank.html', ps, base_dir=util.GetUnittestDataDir()) 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.pages.append(page) 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TestOneTab(page_test.PageTest): 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def __init__(self, 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_method_name, 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) action_name_to_run='', 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) needs_browser_restart_after_each_run=False): 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) super(TestOneTab, self).__init__(test_method_name, action_name_to_run, 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) needs_browser_restart_after_each_run) 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self._browser = None 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 220a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def DidStartBrowser(self, browser): 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self._browser = browser 22290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if self._browser.supports_tab_control: 22390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self._browser.tabs.New() 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def RunTest(self, page, tab, results): # pylint: disable=W0613,R0201 22690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if not self._browser.supports_tab_control: 22790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) logging.warning('Browser does not support tab control, skipping test') 22890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert len(self._browser.tabs) == 1 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test = TestOneTab('RunTest') 2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 2337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 234ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch page_runner.Run(test, ps, expectations, options) 235a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 236a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) # Ensure that page_runner allows the test to customize the browser before it 237a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) # launches. 238a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def testBrowserBeforeLaunch(self): 239a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ps = page_set.PageSet() 240a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) expectations = test_expectations.TestExpectations() 241a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) page = page_module.Page( 2423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'file:///blank.html', ps, base_dir=util.GetUnittestDataDir()) 243a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ps.pages.append(page) 244a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 245a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) class TestBeforeLaunch(page_test.PageTest): 246a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def __init__(self, 247a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_method_name, 248a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) action_name_to_run=''): 249a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) super(TestBeforeLaunch, self).__init__( 250a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_method_name, action_name_to_run, False) 251a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self._did_call_will_start = False 252a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self._did_call_did_start = False 253a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 254a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def WillStartBrowser(self, browser): 255a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self._did_call_will_start = True 256a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) # TODO(simonjam): Test that the profile is available. 257a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 258a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def DidStartBrowser(self, browser): 259a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) assert self._did_call_will_start 260a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self._did_call_did_start = True 261a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 262a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def RunTest(self, page, tab, results): # pylint: disable=W0613,R0201 263a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) assert self._did_call_did_start 264a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 265a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test = TestBeforeLaunch('RunTest') 266a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) options = options_for_unittests.GetCopy() 267a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) options.output_format = 'none' 268a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) page_runner.Run(test, ps, expectations, options) 269