page_runner_unittest.py revision 5f1c94371a64b3196d4be9466099bb892df9b88e
15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# Copyright 2014 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. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)import logging 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import os 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import tempfile 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import unittest 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from telemetry import benchmark 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liufrom telemetry import decorators 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)from telemetry.core import browser_finder 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)from telemetry.core import exceptions 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.core import user_agent 15a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)from telemetry.core import util 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.page import page as page_module 17ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochfrom telemetry.page import page_measurement 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.page import page_set 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.page import page_test 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.page import page_runner 21ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochfrom telemetry.page import test_expectations 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from telemetry.results import results_options 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)from telemetry.unittest import options_for_unittests 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom telemetry.value import scalar 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from telemetry.value import string 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SIMPLE_CREDENTIALS_STRING = """ 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "test": { 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "username": "example", 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "password": "asdf" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)""" 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)def SetUpPageRunnerArguments(options): 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) parser = options.CreateParser() 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) page_runner.AddCommandLineArgs(parser) 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) options.MergeDefaultValues(parser.get_default_values()) 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) page_runner.ProcessCommandLineArgs(parser, options) 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class EmptyMetadataForTest(benchmark.BenchmarkMetadata): 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def __init__(self): 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) super(EmptyMetadataForTest, self).__init__('') 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class StubCredentialsBackend(object): 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def __init__(self, login_return_value): 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.did_get_login = False 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.did_get_login_no_longer_needed = False 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.login_return_value = login_return_value 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @property 55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) def credentials_type(self): 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 'test' 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) def LoginNeeded(self, *_): 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.did_get_login = True 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return self.login_return_value 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) def LoginNoLongerNeeded(self, _): 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.did_get_login_no_longer_needed = True 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)def GetSuccessfulPageRuns(results): 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return [run for run in results.all_page_runs if run.ok or run.skipped] 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PageRunnerTests(unittest.TestCase): 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # TODO(nduca): Move the basic "test failed, test succeeded" tests from 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # page_measurement_unittest to here. 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def testHandlingOfCrashedTab(self): 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps = page_set.PageSet() 76ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) page1 = page_module.Page('chrome://crash', ps) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.pages.append(page1) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class Test(page_test.PageTest): 81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) def ValidatePage(self, *args): 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pass 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) options.suppress_gtest_report = True 87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetUpPageRunnerArguments(options) 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results = results_options.CreateResults(EmptyMetadataForTest(), options) 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) page_runner.Run(Test(), ps, expectations, options, results) 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(0, len(GetSuccessfulPageRuns(results))) 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertEquals(1, len(results.failures)) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 93a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def testHandlingOfTestThatRaisesWithNonFatalUnknownExceptions(self): 94a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ps = page_set.PageSet() 95a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) expectations = test_expectations.TestExpectations() 96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ps.pages.append(page_module.Page( 97a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir())) 98a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ps.pages.append(page_module.Page( 99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir())) 100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) class ExpectedException(Exception): 102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) pass 103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 104a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) class Test(page_test.PageTest): 105a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def __init__(self, *args): 106a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) super(Test, self).__init__(*args) 107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.run_count = 0 108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) def ValidatePage(self, *_): 109a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) old_run_count = self.run_count 110a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.run_count += 1 111a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if old_run_count == 0: 112a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) raise ExpectedException() 113a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 114a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) options = options_for_unittests.GetCopy() 115a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) options.output_format = 'none' 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) options.suppress_gtest_report = True 117010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) test = Test() 118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetUpPageRunnerArguments(options) 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results = results_options.CreateResults(EmptyMetadataForTest(), options) 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) page_runner.Run(test, ps, expectations, options, results) 121a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertEquals(2, test.run_count) 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(1, len(GetSuccessfulPageRuns(results))) 123a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertEquals(1, len(results.failures)) 124a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def testHandlingOfCrashedTabWithExpectedFailure(self): 1263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ps = page_set.PageSet() 1273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expectations = test_expectations.TestExpectations() 1283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expectations.Fail('chrome://crash') 1293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) page1 = page_module.Page('chrome://crash', ps) 1303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ps.pages.append(page1) 1313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) class Test(page_test.PageTest): 133010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) def ValidatePage(self, *_): 1343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) pass 1353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) options = options_for_unittests.GetCopy() 1373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) options.output_format = 'none' 1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) options.suppress_gtest_report = True 139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetUpPageRunnerArguments(options) 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results = results_options.CreateResults(EmptyMetadataForTest(), options) 1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) page_runner.Run(Test(), ps, expectations, options, results) 1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(1, len(GetSuccessfulPageRuns(results))) 1433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(0, len(results.failures)) 1443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) def testRetryOnBrowserCrash(self): 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ps = page_set.PageSet() 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) expectations = test_expectations.TestExpectations() 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ps.pages.append(page_module.Page( 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir())) 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) class CrashyMeasurement(page_measurement.PageMeasurement): 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) has_crashed = False 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def MeasurePage(self, page, tab, results): 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) # This value should be discarded on the first run when the 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) # browser crashed. 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results.AddValue( 1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) string.StringValue(page, 'test', 't', str(self.has_crashed))) 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if not self.has_crashed: 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.has_crashed = True 160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) raise exceptions.BrowserGoneException(tab.browser) 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) options = options_for_unittests.GetCopy() 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) options.output_format = 'csv' 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) options.suppress_gtest_report = True 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 166a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetUpPageRunnerArguments(options) 1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results = results_options.CreateResults(EmptyMetadataForTest(), options) 1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) page_runner.Run(CrashyMeasurement(), ps, expectations, options, results) 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(1, len(GetSuccessfulPageRuns(results))) 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.assertEquals(0, len(results.failures)) 1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(1, len(results.all_page_specific_values)) 1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals( 1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'True', results.all_page_specific_values[0].GetRepresentativeString()) 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @decorators.Disabled('xp') # Flaky, http://crbug.com/390079. 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def testDiscardFirstResult(self): 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ps = page_set.PageSet() 179ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 180a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ps.pages.append(page_module.Page( 1814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir())) 182a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ps.pages.append(page_module.Page( 1834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir())) 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 185ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch class Measurement(page_measurement.PageMeasurement): 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @property 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def discard_first_result(self): 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return True 1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def MeasurePage(self, page, _, results): 1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results.AddValue(string.StringValue(page, 'test', 't', page.url)) 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 1947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) options.suppress_gtest_report = True 1968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) options.reset_results = None 1978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) options.upload_results = None 1988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) options.results_label = None 199a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 200a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch options.page_repeat = 1 201a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch options.pageset_repeat = 1 202a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetUpPageRunnerArguments(options) 2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results = results_options.CreateResults(EmptyMetadataForTest(), options) 2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) page_runner.Run(Measurement(), ps, expectations, options, results) 2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(0, len(GetSuccessfulPageRuns(results))) 20690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self.assertEquals(0, len(results.failures)) 2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(0, len(results.all_page_specific_values)) 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 209a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch options.page_repeat = 1 210a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch options.pageset_repeat = 2 211a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetUpPageRunnerArguments(options) 2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results = results_options.CreateResults(EmptyMetadataForTest(), options) 2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) page_runner.Run(Measurement(), ps, expectations, options, results) 2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(2, len(GetSuccessfulPageRuns(results))) 215a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch self.assertEquals(0, len(results.failures)) 2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(2, len(results.all_page_specific_values)) 217a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 218a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch options.page_repeat = 2 219a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch options.pageset_repeat = 1 220a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetUpPageRunnerArguments(options) 2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results = results_options.CreateResults(EmptyMetadataForTest(), options) 2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) page_runner.Run(Measurement(), ps, expectations, options, results) 2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(2, len(GetSuccessfulPageRuns(results))) 224a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch self.assertEquals(0, len(results.failures)) 2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(2, len(results.all_page_specific_values)) 226a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 227ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch options.output_format = 'html' 2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) options.suppress_gtest_report = True 229a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch options.page_repeat = 1 230a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch options.pageset_repeat = 1 231a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetUpPageRunnerArguments(options) 2325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results = results_options.CreateResults(EmptyMetadataForTest(), options) 2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) page_runner.Run(Measurement(), ps, expectations, options, results) 2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(0, len(GetSuccessfulPageRuns(results))) 235ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch self.assertEquals(0, len(results.failures)) 2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(0, len(results.all_page_specific_values)) 237ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 2385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu @decorators.Disabled('win') 2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) def testPagesetRepeat(self): 2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ps = page_set.PageSet() 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) expectations = test_expectations.TestExpectations() 2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ps.pages.append(page_module.Page( 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir())) 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ps.pages.append(page_module.Page( 2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'file://green_rect.html', ps, base_dir=util.GetUnittestDataDir())) 2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) class Measurement(page_measurement.PageMeasurement): 2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) i = 0 249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch def MeasurePage(self, page, _, results): 2505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.i += 1 251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch results.AddValue(scalar.ScalarValue( 252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch page, 'metric', 'unit', self.i)) 2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) output_file = tempfile.NamedTemporaryFile(delete=False).name 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) try: 2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) options = options_for_unittests.GetCopy() 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) options.output_format = 'buildbot' 2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) options.output_file = output_file 2595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) options.suppress_gtest_report = True 2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) options.reset_results = None 2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) options.upload_results = None 2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) options.results_label = None 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 264a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch options.page_repeat = 1 265a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch options.pageset_repeat = 2 266a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetUpPageRunnerArguments(options) 2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results = results_options.CreateResults(EmptyMetadataForTest(), options) 2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) page_runner.Run(Measurement(), ps, expectations, options, results) 2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) results.PrintSummary() 2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(4, len(GetSuccessfulPageRuns(results))) 2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.assertEquals(0, len(results.failures)) 2725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu with open(output_file) as f: 2735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu stdout = f.read() 274cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) self.assertIn('RESULT metric: blank.html= [1,3] unit', stdout) 275cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) self.assertIn('RESULT metric: green_rect.html= [2,4] unit', stdout) 2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.assertIn('*RESULT metric: metric= [1,2,3,4] unit', stdout) 2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) finally: 2785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) # TODO(chrishenry): This is a HACK!!1 Really, the right way to 2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) # do this is for page_runner (or output formatter) to close any 2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) # files it has opened. 2815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for formatter in results._output_formatters: # pylint: disable=W0212 2825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) formatter.output_stream.close() 2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) os.remove(output_file) 2845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 28590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) def testCredentialsWhenLoginFails(self): 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credentials_backend = StubCredentialsBackend(login_return_value=False) 2877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) did_run = self.runCredentialsTest(credentials_backend) 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert credentials_backend.did_get_login == True 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert credentials_backend.did_get_login_no_longer_needed == False 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert did_run == False 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 29290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) def testCredentialsWhenLoginSucceeds(self): 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credentials_backend = StubCredentialsBackend(login_return_value=True) 2947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) did_run = self.runCredentialsTest(credentials_backend) 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert credentials_backend.did_get_login == True 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert credentials_backend.did_get_login_no_longer_needed == True 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert did_run 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 299010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) def runCredentialsTest(self, credentials_backend): 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps = page_set.PageSet() 301ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 30290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) page = page_module.Page( 3034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir()) 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page.credentials = "test" 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.pages.append(page) 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) did_run = [False] 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 30990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) try: 31090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) with tempfile.NamedTemporaryFile(delete=False) as f: 31190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) f.write(SIMPLE_CREDENTIALS_STRING) 31290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ps.credentials_path = f.name 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TestThatInstallsCredentialsBackend(page_test.PageTest): 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def __init__(self, credentials_backend): 316010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) super(TestThatInstallsCredentialsBackend, self).__init__() 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self._credentials_backend = credentials_backend 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 319a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def DidStartBrowser(self, browser): 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser.credentials.AddBackend(self._credentials_backend) 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) def ValidatePage(self, *_): 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) did_run[0] = True 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test = TestThatInstallsCredentialsBackend(credentials_backend) 3267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 3277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 3285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) options.suppress_gtest_report = True 329a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetUpPageRunnerArguments(options) 3305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results = results_options.CreateResults(EmptyMetadataForTest(), options) 3315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) page_runner.Run(test, ps, expectations, options, results) 33290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) finally: 33390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) os.remove(f.name) 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return did_run[0] 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def testUserAgent(self): 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps = page_set.PageSet() 339ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page = page_module.Page( 3414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir()) 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.pages.append(page) 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.user_agent_type = 'tablet' 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TestUserAgent(page_test.PageTest): 346010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) def ValidatePage(self, _1, tab, _2): 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) actual_user_agent = tab.EvaluateJavaScript('window.navigator.userAgent') 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_user_agent = user_agent.UA_TYPE_MAPPING['tablet'] 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert actual_user_agent.strip() == expected_user_agent 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # This is so we can check later that the test actually made it into this 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # function. Previously it was timing out before even getting here, which 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # should fail, but since it skipped all the asserts, it slipped by. 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.hasRun = True # pylint: disable=W0201 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 356010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) test = TestUserAgent() 3577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 3587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 3595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) options.suppress_gtest_report = True 360a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetUpPageRunnerArguments(options) 3615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results = results_options.CreateResults(EmptyMetadataForTest(), options) 3625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) page_runner.Run(test, ps, expectations, options, results) 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.assertTrue(hasattr(test, 'hasRun') and test.hasRun) 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # Ensure that page_runner forces exactly 1 tab before running a page. 367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @decorators.Enabled('has tabs') 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def testOneTab(self): 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps = page_set.PageSet() 370ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page = page_module.Page( 3724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir()) 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.pages.append(page) 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TestOneTab(page_test.PageTest): 376010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) def __init__(self): 377010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) super(TestOneTab, self).__init__() 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self._browser = None 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 380a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def DidStartBrowser(self, browser): 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self._browser = browser 382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._browser.tabs.New() 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 384010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) def ValidatePage(self, *_): 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert len(self._browser.tabs) == 1 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 387010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) test = TestOneTab() 3887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 3897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 3905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) options.suppress_gtest_report = True 391a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetUpPageRunnerArguments(options) 3925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results = results_options.CreateResults(EmptyMetadataForTest(), options) 3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) page_runner.Run(test, ps, expectations, options, results) 394a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 395a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) # Ensure that page_runner allows the test to customize the browser before it 396a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) # launches. 397a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def testBrowserBeforeLaunch(self): 398a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ps = page_set.PageSet() 399a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) expectations = test_expectations.TestExpectations() 400a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) page = page_module.Page( 4014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir()) 402a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ps.pages.append(page) 403a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 404a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) class TestBeforeLaunch(page_test.PageTest): 405010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) def __init__(self): 406010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) super(TestBeforeLaunch, self).__init__() 407a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self._did_call_will_start = False 408a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self._did_call_did_start = False 409a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 410a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def WillStartBrowser(self, browser): 411a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self._did_call_will_start = True 412a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) # TODO(simonjam): Test that the profile is available. 413a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 414a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def DidStartBrowser(self, browser): 415a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) assert self._did_call_will_start 416a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self._did_call_did_start = True 417a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 418010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) def ValidatePage(self, *_): 419a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) assert self._did_call_did_start 420a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 421010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) test = TestBeforeLaunch() 422a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) options = options_for_unittests.GetCopy() 423a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) options.output_format = 'none' 4245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) options.suppress_gtest_report = True 425a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetUpPageRunnerArguments(options) 4265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results = results_options.CreateResults(EmptyMetadataForTest(), options) 4275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) page_runner.Run(test, ps, expectations, options, results) 428a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 429a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) def testRunPageWithStartupUrl(self): 430a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ps = page_set.PageSet() 431a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) expectations = test_expectations.TestExpectations() 432a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) expectations = test_expectations.TestExpectations() 433a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) page = page_module.Page( 434a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir()) 435a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) page.startup_url = 'about:blank' 436a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ps.pages.append(page) 437a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 438a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) class Measurement(page_measurement.PageMeasurement): 439a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) def __init__(self): 440a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) super(Measurement, self).__init__() 441a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) self.browser_restarted = False 442a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 443effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch def CustomizeBrowserOptionsForSinglePage(self, ps, options): 444a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) self.browser_restarted = True 445effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(Measurement, self).CustomizeBrowserOptionsForSinglePage(ps, 446effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch options) 447a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) def MeasurePage(self, page, tab, results): 448a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) pass 449a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 450a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) options = options_for_unittests.GetCopy() 451a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch options.page_repeat = 2 452a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) options.output_format = 'none' 4535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) options.suppress_gtest_report = True 454a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if not browser_finder.FindBrowser(options): 455a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return 456a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) test = Measurement() 457effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch SetUpPageRunnerArguments(options) 4585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results = results_options.CreateResults(EmptyMetadataForTest(), options) 4595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) page_runner.Run(test, ps, expectations, options, results) 460a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) self.assertEquals('about:blank', options.browser_options.startup_url) 461a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) self.assertTrue(test.browser_restarted) 462a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 463a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) # Ensure that page_runner calls cleanUp when a page run fails. 464a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) def testCleanUpPage(self): 465a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ps = page_set.PageSet() 466a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) expectations = test_expectations.TestExpectations() 467a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) page = page_module.Page( 468a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir()) 469a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ps.pages.append(page) 470a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 471a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) class Test(page_test.PageTest): 472010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) def __init__(self): 473010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) super(Test, self).__init__() 474a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) self.did_call_clean_up = False 475a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 476010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) def ValidatePage(self, *_): 477cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) raise exceptions.IntentionalException 478a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 479a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) def CleanUpAfterPage(self, page, tab): 480a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) self.did_call_clean_up = True 481a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 482a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 483010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) test = Test() 484a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) options = options_for_unittests.GetCopy() 485a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) options.output_format = 'none' 4865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) options.suppress_gtest_report = True 487a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetUpPageRunnerArguments(options) 4885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results = results_options.CreateResults(EmptyMetadataForTest(), options) 4895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) page_runner.Run(test, ps, expectations, options, results) 490a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) assert test.did_call_clean_up 491cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 492cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) # Ensure skipping the test if page cannot be run on the browser 493cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) def testPageCannotRunOnBrowser(self): 494cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ps = page_set.PageSet() 495cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) expectations = test_expectations.TestExpectations() 496cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 497cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) class PageThatCannotRunOnBrowser(page_module.Page): 498cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 499cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) def __init__(self): 500cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) super(PageThatCannotRunOnBrowser, self).__init__( 501cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) url='file://blank.html', page_set=ps, 502cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base_dir=util.GetUnittestDataDir()) 503cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 504cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) def CanRunOnBrowser(self, _): 505cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return False 506cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 507cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) def ValidatePage(self, _): 508cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) pass 509cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 510cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) class Test(page_test.PageTest): 511cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) def __init__(self, *args, **kwargs): 512cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) super(Test, self).__init__(*args, **kwargs) 513cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) self.will_navigate_to_page_called = False 514cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 515cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) def ValidatePage(self, *args): 516cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) pass 517cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 518cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) def WillNavigateToPage(self, _1, _2): 519cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) self.will_navigate_to_page_called = True 520cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 521cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test = Test() 522cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) options = options_for_unittests.GetCopy() 523cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) options.output_format = 'none' 5245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) options.suppress_gtest_report = True 525cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SetUpPageRunnerArguments(options) 5265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results = results_options.CreateResults(EmptyMetadataForTest(), options) 5275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) page_runner.Run(test, ps, expectations, options, results) 528cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) self.assertFalse(test.will_navigate_to_page_called) 5295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(0, len(GetSuccessfulPageRuns(results))) 530cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) self.assertEquals(0, len(results.failures)) 531f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 532f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def TestUseLiveSitesFlag(self, options, expect_from_archive): 533f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ps = page_set.PageSet( 534f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) file_path=util.GetUnittestDataDir(), 535f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) archive_data_file='data/archive_blank.json') 536f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ps.pages.append(page_module.Page( 537f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 'file://blank.html', ps, base_dir=ps.base_dir)) 538f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) expectations = test_expectations.TestExpectations() 539f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 540f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) class ArchiveTest(page_measurement.PageMeasurement): 541f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def __init__(self): 542f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) super(ArchiveTest, self).__init__() 543f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.is_page_from_archive = False 544f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.archive_path_exist = True 545f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 546f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def WillNavigateToPage(self, page, tab): 547f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.archive_path_exist = (page.archive_path 548f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) and os.path.isfile(page.archive_path)) 549f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.is_page_from_archive = ( 550f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) tab.browser._wpr_server is not None) # pylint: disable=W0212 551f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 552f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def MeasurePage(self, _, __, results): 553f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pass 554f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 555f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) test = ArchiveTest() 5565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results = results_options.CreateResults(EmptyMetadataForTest(), options) 5575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) try: 5585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) page_runner.Run(test, ps, expectations, options, results) 5595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if expect_from_archive and not test.archive_path_exist: 5605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) logging.warning('archive path did not exist, asserting that page ' 5615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'is from archive is skipped.') 5625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 5635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(expect_from_archive, test.is_page_from_archive) 5645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) finally: 5655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for p in ps: 5665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if os.path.isfile(p.archive_path): 5675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) os.remove(p.archive_path) 5685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 569f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 570f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def testUseLiveSitesFlagSet(self): 571f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) options = options_for_unittests.GetCopy() 572f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) options.output_format = 'none' 5735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) options.suppress_gtest_report = True 574f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) options.use_live_sites = True 575f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetUpPageRunnerArguments(options) 576f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.TestUseLiveSitesFlag(options, expect_from_archive=False) 577f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 578f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def testUseLiveSitesFlagUnset(self): 579f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) options = options_for_unittests.GetCopy() 580f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) options.output_format = 'none' 5815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) options.suppress_gtest_report = True 582f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetUpPageRunnerArguments(options) 583f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.TestUseLiveSitesFlag(options, expect_from_archive=True) 584116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch def testMaxFailuresOptionIsRespected(self): 586116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch class TestPage(page_module.Page): 587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch def __init__(self, *args, **kwargs): 588116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch super(TestPage, self).__init__(*args, **kwargs) 589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.was_run = False 590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch def RunNavigateSteps(self, action_runner): 592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.was_run = True 593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch raise Exception('Test exception') 594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch class Test(page_test.PageTest): 596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch def ValidatePage(self, *args): 597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pass 598116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 599116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ps = page_set.PageSet() 600116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expectations = test_expectations.TestExpectations() 601116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch page1 = TestPage( 602116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 'file://blank.html', ps, base_dir=util.GetUnittestDataDir()) 603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ps.pages.append(page1) 604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch page2 = TestPage( 605116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 'file://blank.html', ps, base_dir=util.GetUnittestDataDir()) 606116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ps.pages.append(page2) 607116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch page3 = TestPage( 608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 'file://blank.html', ps, base_dir=util.GetUnittestDataDir()) 609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ps.pages.append(page3) 610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch page4 = TestPage( 611116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 'file://blank.html', ps, base_dir=util.GetUnittestDataDir()) 612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ps.pages.append(page4) 613116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch page5 = TestPage( 614116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 'file://blank.html', ps, base_dir=util.GetUnittestDataDir()) 615116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ps.pages.append(page5) 616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch options = options_for_unittests.GetCopy() 618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch options.output_format = 'none' 6195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) options.suppress_gtest_report = True 620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetUpPageRunnerArguments(options) 6215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) results = results_options.CreateResults(EmptyMetadataForTest(), options) 6225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) page_runner.Run(Test(max_failures=2), ps, expectations, options, results) 6235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(0, len(GetSuccessfulPageRuns(results))) 624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch # Runs up to max_failures+1 failing tests before stopping, since 625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch # every tests after max_failures failures have been encountered 626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch # may all be passing. 627116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertEquals(3, len(results.failures)) 628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertTrue(page1.was_run) 629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertTrue(page2.was_run) 630116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertTrue(page3.was_run) 631116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertFalse(page4.was_run) 632116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertFalse(page5.was_run) 633