15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import os 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import unittest 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.page import page_runner 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.page import page as page_module 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.page import page_set 10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochfrom telemetry.page import test_expectations 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)from telemetry.unittest import options_for_unittests 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class PageMeasurementUnitTestBase(unittest.TestCase): 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """unittest.TestCase-derived class to help in the construction of unit tests 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for a measurement.""" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def CreatePageSetFromFileInUnittestDataDir(self, test_filename): 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return self.CreatePageSet('file:///' + os.path.join( 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) '..', '..', 'unittest_data', test_filename)) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def CreatePageSet(self, test_filename): 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base_dir = os.path.dirname(__file__) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps = page_set.PageSet(file_path=os.path.join(base_dir, 'foo.json')) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page = page_module.Page(test_filename, ps, base_dir=base_dir) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) setattr(page, 'smoothness', {'action': 'scroll'}) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ps.pages.append(page) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ps 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch def RunMeasurement(self, measurement, ps, 30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations=test_expectations.TestExpectations(), 31ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch options=None): 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """Runs a measurement against a pageset, returning the rows its outputs.""" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if options is None: 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) options = options_for_unittests.GetCopy() 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert options 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) temp_parser = options.CreateParser() 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) measurement.AddCommandLineOptions(temp_parser) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) defaults = temp_parser.get_default_values() 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for k, v in defaults.__dict__.items(): 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if hasattr(options, k): 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setattr(options, k, v) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) measurement.CustomizeBrowserOptions(options) 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_file = None 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_trace_tag = None 48ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return page_runner.Run(measurement, ps, expectations, options) 49