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