| Index: tools/telemetry/telemetry/page/page_run_end_to_end_unittest.py
|
| diff --git a/tools/telemetry/telemetry/page/page_run_end_to_end_unittest.py b/tools/telemetry/telemetry/page/page_run_end_to_end_unittest.py
|
| deleted file mode 100644
|
| index eb3cd0b7924870aac39ef58d3921e1ea60d8e97a..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/telemetry/page/page_run_end_to_end_unittest.py
|
| +++ /dev/null
|
| @@ -1,727 +0,0 @@
|
| -# Copyright 2014 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -import os
|
| -import re
|
| -import shutil
|
| -import sys
|
| -import StringIO
|
| -import tempfile
|
| -import unittest
|
| -
|
| -from telemetry import benchmark
|
| -from telemetry import story
|
| -from telemetry.core import exceptions
|
| -from telemetry.core import util
|
| -from telemetry import decorators
|
| -from telemetry.internal.browser import browser_finder
|
| -from telemetry.internal.browser import user_agent
|
| -from telemetry.internal.results import results_options
|
| -from telemetry.internal import story_runner
|
| -from telemetry.internal.testing.page_sets import example_domain
|
| -from telemetry.internal.util import exception_formatter
|
| -from telemetry.page import page as page_module
|
| -from telemetry.page import page_test
|
| -from telemetry.page import shared_page_state
|
| -from telemetry.util import image_util
|
| -from telemetry.testing import fakes
|
| -from telemetry.testing import options_for_unittests
|
| -from telemetry.testing import system_stub
|
| -
|
| -
|
| -SIMPLE_CREDENTIALS_STRING = """
|
| -{
|
| - "test": {
|
| - "username": "example",
|
| - "password": "asdf"
|
| - }
|
| -}
|
| -"""
|
| -
|
| -
|
| -class DummyTest(page_test.PageTest):
|
| -
|
| - def ValidateAndMeasurePage(self, *_):
|
| - pass
|
| -
|
| -
|
| -def SetUpStoryRunnerArguments(options):
|
| - parser = options.CreateParser()
|
| - story_runner.AddCommandLineArgs(parser)
|
| - options.MergeDefaultValues(parser.get_default_values())
|
| - story_runner.ProcessCommandLineArgs(parser, options)
|
| -
|
| -
|
| -class EmptyMetadataForTest(benchmark.BenchmarkMetadata):
|
| -
|
| - def __init__(self):
|
| - super(EmptyMetadataForTest, self).__init__('')
|
| -
|
| -
|
| -class StubCredentialsBackend(object):
|
| -
|
| - def __init__(self, login_return_value):
|
| - self.did_get_login = False
|
| - self.did_get_login_no_longer_needed = False
|
| - self.login_return_value = login_return_value
|
| -
|
| - @property
|
| - def credentials_type(self):
|
| - return 'test'
|
| -
|
| - def LoginNeeded(self, *_):
|
| - self.did_get_login = True
|
| - return self.login_return_value
|
| -
|
| - def LoginNoLongerNeeded(self, _):
|
| - self.did_get_login_no_longer_needed = True
|
| -
|
| -
|
| -def GetSuccessfulPageRuns(results):
|
| - return [run for run in results.all_page_runs if run.ok or run.skipped]
|
| -
|
| -
|
| -def CaptureStderr(func, output_buffer):
|
| - def wrapper(*args, **kwargs):
|
| - original_stderr, sys.stderr = sys.stderr, output_buffer
|
| - try:
|
| - return func(*args, **kwargs)
|
| - finally:
|
| - sys.stderr = original_stderr
|
| - return wrapper
|
| -
|
| -
|
| -# TODO: remove test cases that use real browsers and replace with a
|
| -# story_runner or shared_page_state unittest that tests the same logic.
|
| -class ActualPageRunEndToEndTests(unittest.TestCase):
|
| - # TODO(nduca): Move the basic "test failed, test succeeded" tests from
|
| - # page_test_unittest to here.
|
| -
|
| - def setUp(self):
|
| - self._story_runner_logging_stub = None
|
| - self._formatted_exception_buffer = StringIO.StringIO()
|
| - self._original_formatter = exception_formatter.PrintFormattedException
|
| -
|
| - def tearDown(self):
|
| - self.RestoreExceptionFormatter()
|
| -
|
| - def CaptureFormattedException(self):
|
| - exception_formatter.PrintFormattedException = CaptureStderr(
|
| - exception_formatter.PrintFormattedException,
|
| - self._formatted_exception_buffer)
|
| - self._story_runner_logging_stub = system_stub.Override(
|
| - story_runner, ['logging'])
|
| -
|
| - @property
|
| - def formatted_exception(self):
|
| - return self._formatted_exception_buffer.getvalue()
|
| -
|
| - def RestoreExceptionFormatter(self):
|
| - exception_formatter.PrintFormattedException = self._original_formatter
|
| - if self._story_runner_logging_stub:
|
| - self._story_runner_logging_stub.Restore()
|
| - self._story_runner_logging_stub = None
|
| -
|
| - def assertFormattedExceptionIsEmpty(self):
|
| - self.longMessage = False
|
| - self.assertEquals(
|
| - '', self.formatted_exception,
|
| - msg='Expected empty formatted exception: actual=%s' % '\n > '.join(
|
| - self.formatted_exception.split('\n')))
|
| -
|
| - def assertFormattedExceptionOnlyHas(self, expected_exception_name):
|
| - self.longMessage = True
|
| - actual_exception_names = re.findall(r'^Traceback.*?^(\w+)',
|
| - self.formatted_exception,
|
| - re.DOTALL | re.MULTILINE)
|
| - self.assertEquals([expected_exception_name], actual_exception_names,
|
| - msg='Full formatted exception: %s' % '\n > '.join(
|
| - self.formatted_exception.split('\n')))
|
| -
|
| - def testRaiseBrowserGoneExceptionFromRestartBrowserBeforeEachPage(self):
|
| - self.CaptureFormattedException()
|
| - story_set = story.StorySet()
|
| - story_set.AddStory(page_module.Page(
|
| - 'file://blank.html', story_set, base_dir=util.GetUnittestDataDir()))
|
| - story_set.AddStory(page_module.Page(
|
| - 'file://blank.html', story_set, base_dir=util.GetUnittestDataDir()))
|
| -
|
| - class Test(page_test.PageTest):
|
| -
|
| - def __init__(self, *args):
|
| - super(Test, self).__init__(
|
| - *args, needs_browser_restart_after_each_page=True)
|
| - self.run_count = 0
|
| -
|
| - def RestartBrowserBeforeEachPage(self):
|
| - old_run_count = self.run_count
|
| - self.run_count += 1
|
| - if old_run_count == 0:
|
| - raise exceptions.BrowserGoneException(None)
|
| - return self._needs_browser_restart_after_each_page
|
| -
|
| - def ValidateAndMeasurePage(self, page, tab, results):
|
| - pass
|
| -
|
| - options = options_for_unittests.GetCopy()
|
| - options.output_formats = ['none']
|
| - options.suppress_gtest_report = True
|
| - test = Test()
|
| - SetUpStoryRunnerArguments(options)
|
| - results = results_options.CreateResults(EmptyMetadataForTest(), options)
|
| - story_runner.Run(test, story_set, options, results)
|
| - self.assertEquals(2, test.run_count)
|
| - self.assertEquals(1, len(GetSuccessfulPageRuns(results)))
|
| - self.assertEquals(1, len(results.failures))
|
| - self.assertFormattedExceptionIsEmpty()
|
| -
|
| - def testNeedsBrowserRestartAfterEachPage(self):
|
| - self.CaptureFormattedException()
|
| - story_set = story.StorySet()
|
| - story_set.AddStory(page_module.Page(
|
| - 'file://blank.html', story_set, base_dir=util.GetUnittestDataDir()))
|
| - story_set.AddStory(page_module.Page(
|
| - 'file://blank.html', story_set, base_dir=util.GetUnittestDataDir()))
|
| -
|
| - class Test(page_test.PageTest):
|
| -
|
| - def __init__(self, *args, **kwargs):
|
| - super(Test, self).__init__(*args, **kwargs)
|
| - self.browser_starts = 0
|
| -
|
| - def DidStartBrowser(self, *args):
|
| - super(Test, self).DidStartBrowser(*args)
|
| - self.browser_starts += 1
|
| -
|
| - def ValidateAndMeasurePage(self, page, tab, results):
|
| - pass
|
| -
|
| - options = options_for_unittests.GetCopy()
|
| - options.output_formats = ['none']
|
| - options.suppress_gtest_report = True
|
| - test = Test(needs_browser_restart_after_each_page=True)
|
| - SetUpStoryRunnerArguments(options)
|
| - results = results_options.CreateResults(EmptyMetadataForTest(), options)
|
| - story_runner.Run(test, story_set, options, results)
|
| - self.assertEquals(2, len(GetSuccessfulPageRuns(results)))
|
| - self.assertEquals(2, test.browser_starts)
|
| - self.assertFormattedExceptionIsEmpty()
|
| -
|
| - def testCredentialsWhenLoginFails(self):
|
| - self.CaptureFormattedException()
|
| - credentials_backend = StubCredentialsBackend(login_return_value=False)
|
| - did_run = self.runCredentialsTest(credentials_backend)
|
| - assert credentials_backend.did_get_login
|
| - assert not credentials_backend.did_get_login_no_longer_needed
|
| - assert not did_run
|
| - self.assertFormattedExceptionIsEmpty()
|
| -
|
| - def testCredentialsWhenLoginSucceeds(self):
|
| - credentials_backend = StubCredentialsBackend(login_return_value=True)
|
| - did_run = self.runCredentialsTest(credentials_backend)
|
| - assert credentials_backend.did_get_login
|
| - assert credentials_backend.did_get_login_no_longer_needed
|
| - assert did_run
|
| -
|
| - def runCredentialsTest(self, credentials_backend):
|
| - story_set = story.StorySet()
|
| - did_run = [False]
|
| -
|
| - try:
|
| - with tempfile.NamedTemporaryFile(delete=False) as f:
|
| - page = page_module.Page(
|
| - 'file://blank.html', story_set, base_dir=util.GetUnittestDataDir(),
|
| - credentials_path=f.name)
|
| - page.credentials = "test"
|
| - story_set.AddStory(page)
|
| -
|
| - f.write(SIMPLE_CREDENTIALS_STRING)
|
| -
|
| - class TestThatInstallsCredentialsBackend(page_test.PageTest):
|
| -
|
| - def __init__(self, credentials_backend):
|
| - super(TestThatInstallsCredentialsBackend, self).__init__()
|
| - self._credentials_backend = credentials_backend
|
| -
|
| - def DidStartBrowser(self, browser):
|
| - browser.credentials.AddBackend(self._credentials_backend)
|
| -
|
| - def ValidateAndMeasurePage(self, *_):
|
| - did_run[0] = True
|
| -
|
| - test = TestThatInstallsCredentialsBackend(credentials_backend)
|
| - options = options_for_unittests.GetCopy()
|
| - options.output_formats = ['none']
|
| - options.suppress_gtest_report = True
|
| - SetUpStoryRunnerArguments(options)
|
| - results = results_options.CreateResults(EmptyMetadataForTest(), options)
|
| - story_runner.Run(test, story_set, options, results)
|
| - finally:
|
| - os.remove(f.name)
|
| -
|
| - return did_run[0]
|
| -
|
| - @decorators.Disabled('chromeos') # crbug.com/483212
|
| - def testUserAgent(self):
|
| - story_set = story.StorySet()
|
| - page = page_module.Page(
|
| - 'file://blank.html', story_set, base_dir=util.GetUnittestDataDir(),
|
| - shared_page_state_class=shared_page_state.SharedTabletPageState)
|
| - story_set.AddStory(page)
|
| -
|
| - class TestUserAgent(page_test.PageTest):
|
| - def ValidateAndMeasurePage(self, page, tab, results):
|
| - del page, results # unused
|
| - actual_user_agent = tab.EvaluateJavaScript('window.navigator.userAgent')
|
| - expected_user_agent = user_agent.UA_TYPE_MAPPING['tablet']
|
| - assert actual_user_agent.strip() == expected_user_agent
|
| -
|
| - # This is so we can check later that the test actually made it into this
|
| - # function. Previously it was timing out before even getting here, which
|
| - # should fail, but since it skipped all the asserts, it slipped by.
|
| - self.hasRun = True # pylint: disable=attribute-defined-outside-init
|
| -
|
| - test = TestUserAgent()
|
| - options = options_for_unittests.GetCopy()
|
| - options.output_formats = ['none']
|
| - options.suppress_gtest_report = True
|
| - SetUpStoryRunnerArguments(options)
|
| - results = results_options.CreateResults(EmptyMetadataForTest(), options)
|
| - story_runner.Run(test, story_set, options, results)
|
| -
|
| - self.assertTrue(hasattr(test, 'hasRun') and test.hasRun)
|
| -
|
| - # Ensure that story_runner forces exactly 1 tab before running a page.
|
| - @decorators.Enabled('has tabs')
|
| - def testOneTab(self):
|
| - story_set = story.StorySet()
|
| - page = page_module.Page(
|
| - 'file://blank.html', story_set, base_dir=util.GetUnittestDataDir())
|
| - story_set.AddStory(page)
|
| -
|
| - class TestOneTab(page_test.PageTest):
|
| -
|
| - def DidStartBrowser(self, browser):
|
| - browser.tabs.New()
|
| -
|
| - def ValidateAndMeasurePage(self, page, tab, results):
|
| - del page, results # unused
|
| - assert len(tab.browser.tabs) == 1
|
| -
|
| - test = TestOneTab()
|
| - options = options_for_unittests.GetCopy()
|
| - options.output_formats = ['none']
|
| - options.suppress_gtest_report = True
|
| - SetUpStoryRunnerArguments(options)
|
| - results = results_options.CreateResults(EmptyMetadataForTest(), options)
|
| - story_runner.Run(test, story_set, options, results)
|
| -
|
| - # Ensure that story_runner allows >1 tab for multi-tab test.
|
| - @decorators.Enabled('has tabs')
|
| - def testMultipleTabsOkayForMultiTabTest(self):
|
| - story_set = story.StorySet()
|
| - page = page_module.Page(
|
| - 'file://blank.html', story_set, base_dir=util.GetUnittestDataDir())
|
| - story_set.AddStory(page)
|
| -
|
| - class TestMultiTabs(page_test.PageTest):
|
| - def TabForPage(self, page, browser):
|
| - del page # unused
|
| - return browser.tabs.New()
|
| -
|
| - def ValidateAndMeasurePage(self, page, tab, results):
|
| - del page, results # unused
|
| - assert len(tab.browser.tabs) == 2
|
| -
|
| - test = TestMultiTabs()
|
| - options = options_for_unittests.GetCopy()
|
| - options.output_formats = ['none']
|
| - options.suppress_gtest_report = True
|
| - SetUpStoryRunnerArguments(options)
|
| - results = results_options.CreateResults(EmptyMetadataForTest(), options)
|
| - story_runner.Run(test, story_set, options, results)
|
| -
|
| - # Ensure that story_runner allows the test to customize the browser
|
| - # before it launches.
|
| - def testBrowserBeforeLaunch(self):
|
| - story_set = story.StorySet()
|
| - page = page_module.Page(
|
| - 'file://blank.html', story_set, base_dir=util.GetUnittestDataDir())
|
| - story_set.AddStory(page)
|
| -
|
| - class TestBeforeLaunch(page_test.PageTest):
|
| -
|
| - def __init__(self):
|
| - super(TestBeforeLaunch, self).__init__()
|
| - self._did_call_will_start = False
|
| - self._did_call_did_start = False
|
| -
|
| - def WillStartBrowser(self, platform):
|
| - self._did_call_will_start = True
|
| - # TODO(simonjam): Test that the profile is available.
|
| -
|
| - def DidStartBrowser(self, browser):
|
| - assert self._did_call_will_start
|
| - self._did_call_did_start = True
|
| -
|
| - def ValidateAndMeasurePage(self, *_):
|
| - assert self._did_call_did_start
|
| -
|
| - test = TestBeforeLaunch()
|
| - options = options_for_unittests.GetCopy()
|
| - options.output_formats = ['none']
|
| - options.suppress_gtest_report = True
|
| - SetUpStoryRunnerArguments(options)
|
| - results = results_options.CreateResults(EmptyMetadataForTest(), options)
|
| - story_runner.Run(test, story_set, options, results)
|
| -
|
| - def testRunPageWithStartupUrl(self):
|
| - num_times_browser_closed = [0]
|
| -
|
| - class TestSharedState(shared_page_state.SharedPageState):
|
| -
|
| - def _StopBrowser(self):
|
| - super(TestSharedState, self)._StopBrowser()
|
| - num_times_browser_closed[0] += 1
|
| - story_set = story.StorySet()
|
| - page = page_module.Page(
|
| - 'file://blank.html', story_set, base_dir=util.GetUnittestDataDir(),
|
| - startup_url='about:blank', shared_page_state_class=TestSharedState)
|
| - story_set.AddStory(page)
|
| -
|
| - class Measurement(page_test.PageTest):
|
| -
|
| - def __init__(self):
|
| - super(Measurement, self).__init__()
|
| -
|
| - def ValidateAndMeasurePage(self, page, tab, results):
|
| - del page, tab, results # not used
|
| -
|
| - options = options_for_unittests.GetCopy()
|
| - options.page_repeat = 2
|
| - options.output_formats = ['none']
|
| - options.suppress_gtest_report = True
|
| - if not browser_finder.FindBrowser(options):
|
| - return
|
| - test = Measurement()
|
| - SetUpStoryRunnerArguments(options)
|
| - results = results_options.CreateResults(EmptyMetadataForTest(), options)
|
| - story_runner.Run(test, story_set, options, results)
|
| - self.assertEquals('about:blank', options.browser_options.startup_url)
|
| - # _StopBrowser should be called 3 times: after browser restarts, after page
|
| - # 2 has run and in the TearDownState after all the pages have run.
|
| - self.assertEquals(num_times_browser_closed[0], 3)
|
| -
|
| - # Ensure that story_runner calls cleanUp when a page run fails.
|
| - def testCleanUpPage(self):
|
| - story_set = story.StorySet()
|
| - page = page_module.Page(
|
| - 'file://blank.html', story_set, base_dir=util.GetUnittestDataDir())
|
| - story_set.AddStory(page)
|
| -
|
| - class Test(page_test.PageTest):
|
| -
|
| - def __init__(self):
|
| - super(Test, self).__init__()
|
| - self.did_call_clean_up = False
|
| -
|
| - def ValidateAndMeasurePage(self, *_):
|
| - raise page_test.Failure
|
| -
|
| - def DidRunPage(self, platform):
|
| - del platform # unused
|
| - self.did_call_clean_up = True
|
| -
|
| - test = Test()
|
| - options = options_for_unittests.GetCopy()
|
| - options.output_formats = ['none']
|
| - options.suppress_gtest_report = True
|
| - SetUpStoryRunnerArguments(options)
|
| - results = results_options.CreateResults(EmptyMetadataForTest(), options)
|
| - story_runner.Run(test, story_set, options, results)
|
| - assert test.did_call_clean_up
|
| -
|
| - # Ensure skipping the test if shared state cannot be run on the browser.
|
| - def testSharedPageStateCannotRunOnBrowser(self):
|
| - story_set = story.StorySet()
|
| -
|
| - class UnrunnableSharedState(shared_page_state.SharedPageState):
|
| - def CanRunOnBrowser(self, browser_info, page):
|
| - del browser_info, page # unused
|
| - return False
|
| -
|
| - def ValidateAndMeasurePage(self, _):
|
| - pass
|
| -
|
| - story_set.AddStory(page_module.Page(
|
| - url='file://blank.html', page_set=story_set,
|
| - base_dir=util.GetUnittestDataDir(),
|
| - shared_page_state_class=UnrunnableSharedState))
|
| -
|
| - class Test(page_test.PageTest):
|
| -
|
| - def __init__(self, *args, **kwargs):
|
| - super(Test, self).__init__(*args, **kwargs)
|
| - self.will_navigate_to_page_called = False
|
| -
|
| - def ValidateAndMeasurePage(self, *args):
|
| - del args # unused
|
| - raise Exception('Exception should not be thrown')
|
| -
|
| - def WillNavigateToPage(self, page, tab):
|
| - del page, tab # unused
|
| - self.will_navigate_to_page_called = True
|
| -
|
| - test = Test()
|
| - options = options_for_unittests.GetCopy()
|
| - options.output_formats = ['none']
|
| - options.suppress_gtest_report = True
|
| - SetUpStoryRunnerArguments(options)
|
| - results = results_options.CreateResults(EmptyMetadataForTest(), options)
|
| - story_runner.Run(test, story_set, options, results)
|
| - self.assertFalse(test.will_navigate_to_page_called)
|
| - self.assertEquals(1, len(GetSuccessfulPageRuns(results)))
|
| - self.assertEquals(1, len(results.skipped_values))
|
| - self.assertEquals(0, len(results.failures))
|
| -
|
| - def testRunPageWithProfilingFlag(self):
|
| - story_set = story.StorySet()
|
| - story_set.AddStory(page_module.Page(
|
| - 'file://blank.html', story_set, base_dir=util.GetUnittestDataDir()))
|
| -
|
| - class Measurement(page_test.PageTest):
|
| -
|
| - def ValidateAndMeasurePage(self, page, tab, results):
|
| - pass
|
| -
|
| - options = options_for_unittests.GetCopy()
|
| - options.output_formats = ['none']
|
| - options.suppress_gtest_report = True
|
| - options.reset_results = None
|
| - options.upload_results = None
|
| - options.results_label = None
|
| - options.output_dir = tempfile.mkdtemp()
|
| - options.profiler = 'trace'
|
| - try:
|
| - SetUpStoryRunnerArguments(options)
|
| - results = results_options.CreateResults(EmptyMetadataForTest(), options)
|
| - story_runner.Run(Measurement(), story_set, options, results)
|
| - self.assertEquals(1, len(GetSuccessfulPageRuns(results)))
|
| - self.assertEquals(0, len(results.failures))
|
| - self.assertEquals(0, len(results.all_page_specific_values))
|
| - self.assertTrue(os.path.isfile(
|
| - os.path.join(options.output_dir, 'blank_html.zip')))
|
| - finally:
|
| - shutil.rmtree(options.output_dir)
|
| -
|
| - def _RunPageTestThatRaisesAppCrashException(self, test, max_failures):
|
| - class TestPage(page_module.Page):
|
| -
|
| - def RunNavigateSteps(self, _):
|
| - raise exceptions.AppCrashException
|
| -
|
| - story_set = story.StorySet()
|
| - for _ in range(5):
|
| - story_set.AddStory(
|
| - TestPage('file://blank.html', story_set,
|
| - base_dir=util.GetUnittestDataDir()))
|
| - options = options_for_unittests.GetCopy()
|
| - options.output_formats = ['none']
|
| - options.suppress_gtest_report = True
|
| - SetUpStoryRunnerArguments(options)
|
| - results = results_options.CreateResults(EmptyMetadataForTest(), options)
|
| - story_runner.Run(test, story_set, options, results,
|
| - max_failures=max_failures)
|
| - return results
|
| -
|
| - def testSingleTabMeansCrashWillCauseFailureValue(self):
|
| - self.CaptureFormattedException()
|
| -
|
| - class SingleTabTest(page_test.PageTest):
|
| - # Test is not multi-tab because it does not override TabForPage.
|
| -
|
| - def ValidateAndMeasurePage(self, *_):
|
| - pass
|
| -
|
| - test = SingleTabTest()
|
| - results = self._RunPageTestThatRaisesAppCrashException(
|
| - test, max_failures=1)
|
| - self.assertEquals([], GetSuccessfulPageRuns(results))
|
| - self.assertEquals(2, len(results.failures)) # max_failures + 1
|
| - self.assertFormattedExceptionIsEmpty()
|
| -
|
| - @decorators.Enabled('has tabs')
|
| - def testMultipleTabsMeansCrashRaises(self):
|
| - self.CaptureFormattedException()
|
| -
|
| - class MultipleTabsTest(page_test.PageTest):
|
| - # Test *is* multi-tab because it overrides TabForPage.
|
| -
|
| - def TabForPage(self, page, browser):
|
| - return browser.tabs.New()
|
| -
|
| - def ValidateAndMeasurePage(self, *_):
|
| - pass
|
| -
|
| - test = MultipleTabsTest()
|
| - with self.assertRaises(page_test.MultiTabTestAppCrashError):
|
| - self._RunPageTestThatRaisesAppCrashException(test, max_failures=1)
|
| - self.assertFormattedExceptionOnlyHas('AppCrashException')
|
| -
|
| - def testWebPageReplay(self):
|
| - story_set = example_domain.ExampleDomainPageSet()
|
| - body = []
|
| -
|
| - class TestWpr(page_test.PageTest):
|
| - def ValidateAndMeasurePage(self, page, tab, results):
|
| - del page, results # unused
|
| - body.append(tab.EvaluateJavaScript('document.body.innerText'))
|
| - test = TestWpr()
|
| - options = options_for_unittests.GetCopy()
|
| - options.output_formats = ['none']
|
| - options.suppress_gtest_report = True
|
| - SetUpStoryRunnerArguments(options)
|
| - results = results_options.CreateResults(EmptyMetadataForTest(), options)
|
| -
|
| - story_runner.Run(test, story_set, options, results)
|
| -
|
| - self.longMessage = True
|
| - self.assertIn('Example Domain', body[0],
|
| - msg='URL: %s' % story_set.stories[0].url)
|
| - self.assertIn('Example Domain', body[1],
|
| - msg='URL: %s' % story_set.stories[1].url)
|
| -
|
| - self.assertEquals(2, len(GetSuccessfulPageRuns(results)))
|
| - self.assertEquals(0, len(results.failures))
|
| -
|
| - def testScreenShotTakenForFailedPage(self):
|
| - self.CaptureFormattedException()
|
| - platform_screenshot_supported = [False]
|
| - tab_screenshot_supported = [False]
|
| - chrome_version_screen_shot = [None]
|
| -
|
| - class FailingTestPage(page_module.Page):
|
| -
|
| - def RunNavigateSteps(self, action_runner):
|
| - action_runner.Navigate(self._url)
|
| - platform_screenshot_supported[0] = (
|
| - action_runner.tab.browser.platform.CanTakeScreenshot)
|
| - tab_screenshot_supported[0] = action_runner.tab.screenshot_supported
|
| - if not platform_screenshot_supported[0] and tab_screenshot_supported[0]:
|
| - chrome_version_screen_shot[0] = action_runner.tab.Screenshot()
|
| - raise exceptions.AppCrashException
|
| -
|
| - story_set = story.StorySet()
|
| - story_set.AddStory(page_module.Page('file://blank.html', story_set))
|
| - failing_page = FailingTestPage('chrome://version', story_set)
|
| - story_set.AddStory(failing_page)
|
| - options = options_for_unittests.GetCopy()
|
| - options.output_formats = ['none']
|
| - options.browser_options.take_screenshot_for_failed_page = True
|
| - options.suppress_gtest_report = True
|
| - SetUpStoryRunnerArguments(options)
|
| - results = results_options.CreateResults(EmptyMetadataForTest(), options)
|
| - story_runner.Run(DummyTest(), story_set, options, results,
|
| - max_failures=2)
|
| - self.assertEquals(1, len(results.failures))
|
| - if not platform_screenshot_supported[0] and tab_screenshot_supported[0]:
|
| - self.assertEquals(1, len(results.pages_to_profiling_files))
|
| - self.assertIn(failing_page,
|
| - results.pages_to_profiling_files)
|
| - screenshot_file_path = (
|
| - results.pages_to_profiling_files[failing_page][0].GetAbsPath())
|
| - try:
|
| - actual_screenshot = image_util.FromPngFile(screenshot_file_path)
|
| - self.assertEquals(image_util.Pixels(chrome_version_screen_shot[0]),
|
| - image_util.Pixels(actual_screenshot))
|
| - finally: # Must clean up screenshot file if exists.
|
| - os.remove(screenshot_file_path)
|
| -
|
| - def testNoProfilingFilesCreatedForPageByDefault(self):
|
| - self.CaptureFormattedException()
|
| -
|
| - class FailingTestPage(page_module.Page):
|
| -
|
| - def RunNavigateSteps(self, action_runner):
|
| - action_runner.Navigate(self._url)
|
| - raise exceptions.AppCrashException
|
| -
|
| - story_set = story.StorySet()
|
| - story_set.AddStory(page_module.Page('file://blank.html', story_set))
|
| - failing_page = FailingTestPage('chrome://version', story_set)
|
| - story_set.AddStory(failing_page)
|
| - options = options_for_unittests.GetCopy()
|
| - options.output_formats = ['none']
|
| - options.suppress_gtest_report = True
|
| - SetUpStoryRunnerArguments(options)
|
| - results = results_options.CreateResults(EmptyMetadataForTest(), options)
|
| - story_runner.Run(DummyTest(), story_set, options, results,
|
| - max_failures=2)
|
| - self.assertEquals(1, len(results.failures))
|
| - self.assertEquals(0, len(results.pages_to_profiling_files))
|
| -
|
| -
|
| -class FakePageRunEndToEndTests(unittest.TestCase):
|
| -
|
| - def setUp(self):
|
| - self.options = fakes.CreateBrowserFinderOptions()
|
| - self.options.output_formats = ['none']
|
| - self.options.suppress_gtest_report = True
|
| - SetUpStoryRunnerArguments(self.options)
|
| -
|
| - def testNoScreenShotTakenForFailedPageDueToNoSupport(self):
|
| - self.options.browser_options.take_screenshot_for_failed_page = True
|
| -
|
| - class FailingTestPage(page_module.Page):
|
| -
|
| - def RunNavigateSteps(self, action_runner):
|
| - raise exceptions.AppCrashException
|
| -
|
| - story_set = story.StorySet()
|
| - story_set.AddStory(page_module.Page('file://blank.html', story_set))
|
| - failing_page = FailingTestPage('chrome://version', story_set)
|
| - story_set.AddStory(failing_page)
|
| - results = results_options.CreateResults(
|
| - EmptyMetadataForTest(), self.options)
|
| - story_runner.Run(DummyTest(), story_set, self.options, results,
|
| - max_failures=2)
|
| - self.assertEquals(1, len(results.failures))
|
| - self.assertEquals(0, len(results.pages_to_profiling_files))
|
| -
|
| - def testScreenShotTakenForFailedPageOnSupportedPlatform(self):
|
| - fake_platform = self.options.fake_possible_browser.returned_browser.platform
|
| - expected_png_base64 = """
|
| - iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91
|
| - JpzAAAAFklEQVR4Xg3EAQ0AAABAMP1LY3YI7l8l6A
|
| - T8tgwbJAAAAABJRU5ErkJggg==
|
| -"""
|
| - fake_platform.screenshot_png_data = expected_png_base64
|
| - self.options.browser_options.take_screenshot_for_failed_page = True
|
| -
|
| - class FailingTestPage(page_module.Page):
|
| -
|
| - def RunNavigateSteps(self, action_runner):
|
| - raise exceptions.AppCrashException
|
| - story_set = story.StorySet()
|
| - story_set.AddStory(page_module.Page('file://blank.html', story_set))
|
| - failing_page = FailingTestPage('chrome://version', story_set)
|
| - story_set.AddStory(failing_page)
|
| -
|
| - results = results_options.CreateResults(
|
| - EmptyMetadataForTest(), self.options)
|
| - story_runner.Run(DummyTest(), story_set, self.options, results,
|
| - max_failures=2)
|
| - self.assertEquals(1, len(results.failures))
|
| - self.assertEquals(1, len(results.pages_to_profiling_files))
|
| - self.assertIn(failing_page,
|
| - results.pages_to_profiling_files)
|
| - screenshot_file_path = (
|
| - results.pages_to_profiling_files[failing_page][0].GetAbsPath())
|
| - try:
|
| - actual_screenshot_img = image_util.FromPngFile(screenshot_file_path)
|
| - self.assertTrue(image_util.AreEqual(
|
| - image_util.FromBase64Png(expected_png_base64),
|
| - actual_screenshot_img))
|
| - finally: # Must clean up screenshot file if exists.
|
| - os.remove(screenshot_file_path)
|
|
|