blob: 266f87aa17acefab2e02a6f68eeb5fd107390785 [file] [log] [blame]
# Copyright 2015 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 unittest
from telemetry import benchmark
from telemetry import benchmark_runner
from telemetry.testing import stream
import mock
class BenchmarkFoo(benchmark.Benchmark):
""" Benchmark Foo for testing."""
@classmethod
def Name(cls):
return 'FooBenchmark'
class BenchmarkBar(benchmark.Benchmark):
""" Benchmark Bar for testing long description line."""
@classmethod
def Name(cls):
return 'BarBenchmarkkkkk'
class UnusualBenchmark(benchmark.Benchmark):
@classmethod
def Name(cls):
return 'I have a very unusual name'
class BenchmarkRunnerUnittest(unittest.TestCase):
def setUp(self):
self._stream = stream.TestOutputStream()
self._mock_possible_browser = mock.MagicMock()
self._mock_possible_browser.browser_type = 'TestBrowser'
def testPrintBenchmarkListWithNoDisabledBenchmark(self):
expected_printed_stream = (
'Available benchmarks for TestBrowser are:\n'
' BarBenchmarkkkkk Benchmark Bar for testing long description line.\n'
' FooBenchmark Benchmark Foo for testing.\n'
'Pass --browser to list benchmarks for another browser.\n\n')
with mock.patch('telemetry.benchmark_runner.decorators') as mock_module:
mock_module.IsEnabled.return_value = (True, None)
benchmark_runner.PrintBenchmarkList(
[BenchmarkFoo, BenchmarkBar], self._mock_possible_browser, self._stream)
self.assertEquals(expected_printed_stream, self._stream.output_data)
def testPrintBenchmarkListWithOneDisabledBenchmark(self):
expected_printed_stream = (
'Available benchmarks for TestBrowser are:\n'
' FooBenchmark Benchmark Foo for testing.\n'
'\n'
'Disabled benchmarks for TestBrowser are (force run with -d):\n'
' BarBenchmarkkkkk Benchmark Bar for testing long description line.\n'
'Pass --browser to list benchmarks for another browser.\n\n')
with mock.patch('telemetry.benchmark_runner.decorators') as mock_module:
def FakeIsEnabled(benchmark_class, _):
if benchmark_class is BenchmarkFoo:
return True, None
else:
return False, 'Only supported BenchmarkFoo'
mock_module.IsEnabled = FakeIsEnabled
benchmark_runner.PrintBenchmarkList(
[BenchmarkFoo, BenchmarkBar], self._mock_possible_browser, self._stream)
self.assertEquals(expected_printed_stream, self._stream.output_data)
def testShouldDisable(self):
"""Ensure that overridden ShouldDisable class methods are respected."""
expected_printed_stream = (
'Available benchmarks for TestBrowser are:\n'
' BarBenchmarkkkkk Benchmark Bar for testing long description line.\n'
'\n'
'Disabled benchmarks for TestBrowser are (force run with -d):\n'
' FooBenchmark Benchmark Foo for testing.\n'
'Pass --browser to list benchmarks for another browser.\n\n')
@classmethod
def FakeShouldDisable(cls, possible_browser):
del possible_browser # unused
return cls is BenchmarkFoo
BenchmarkFoo.ShouldDisable = FakeShouldDisable
BenchmarkBar.ShouldDisable = FakeShouldDisable
benchmark_runner.PrintBenchmarkList(
[BenchmarkFoo, BenchmarkBar], self._mock_possible_browser, self._stream)
self.assertEquals(expected_printed_stream, self._stream.output_data)
def testShouldDisableComplex(self):
"""Ensure that browser-dependent ShouldDisable overrides are respected."""
expected_printed_stream = (
# Expected output for 'TestBrowser':
'Available benchmarks for TestBrowser are:\n'
' FooBenchmark Benchmark Foo for testing.\n'
'\n'
'Disabled benchmarks for TestBrowser are (force run with -d):\n'
' BarBenchmarkkkkk Benchmark Bar for testing long description line.\n'
'Pass --browser to list benchmarks for another browser.\n\n'
# Expected output for 'MockBrowser':
'Available benchmarks for MockBrowser are:\n'
' BarBenchmarkkkkk Benchmark Bar for testing long description line.\n'
' FooBenchmark Benchmark Foo for testing.\n'
'Pass --browser to list benchmarks for another browser.\n\n')
@classmethod
def FakeShouldDisable(cls, possible_browser):
return cls is BenchmarkBar and not 'Mock' in possible_browser.browser_type
BenchmarkFoo.ShouldDisable = FakeShouldDisable
BenchmarkBar.ShouldDisable = FakeShouldDisable
benchmark_runner.PrintBenchmarkList(
[BenchmarkFoo, BenchmarkBar], self._mock_possible_browser, self._stream)
self._mock_possible_browser.browser_type = 'MockBrowser'
benchmark_runner.PrintBenchmarkList(
[BenchmarkFoo, BenchmarkBar], self._mock_possible_browser, self._stream)
self.assertEquals(expected_printed_stream, self._stream.output_data)