1# Copyright 2014 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import unittest
6
7from telemetry.core import util
8from telemetry.testing import run_tests
9
10
11class MockArgs(object):
12  def __init__(self):
13    self.positional_args = []
14    self.exact_test_filter = True
15    self.run_disabled_tests = False
16    self.skip = []
17
18
19class MockPossibleBrowser(object):
20  def __init__(self, browser_type, os_name, os_version_name,
21               supports_tab_control):
22    self.browser_type = browser_type
23    self.platform = MockPlatform(os_name, os_version_name)
24    self.supports_tab_control = supports_tab_control
25
26
27class MockPlatform(object):
28  def __init__(self, os_name, os_version_name):
29    self.os_name = os_name
30    self.os_version_name = os_version_name
31
32  def GetOSName(self):
33    return self.os_name
34
35  def GetOSVersionName(self):
36    return self.os_version_name
37
38
39class RunTestsUnitTest(unittest.TestCase):
40
41  def _GetEnabledTests(self, browser_type, os_name, os_version_name,
42                       supports_tab_control, args=None):
43    if not args:
44      args = MockArgs()
45    runner = run_tests.typ.Runner()
46    host = runner.host
47    runner.top_level_dir = util.GetTelemetryDir()
48    runner.args.tests = [host.join(util.GetTelemetryDir(),
49        'telemetry', 'testing', 'disabled_cases.py')]
50    possible_browser = MockPossibleBrowser(
51        browser_type, os_name, os_version_name, supports_tab_control)
52    runner.classifier = run_tests.GetClassifier(args, possible_browser)
53    _, test_set = runner.find_tests(runner.args)
54    return set(test.name.split('.')[-1] for test in test_set.parallel_tests)
55
56  def testSystemMacMavericks(self):
57    self.assertEquals(
58        set(['testAllEnabled',
59             'testMacOnly',
60             'testMavericksOnly',
61             'testNoChromeOS',
62             'testNoWinLinux',
63             'testSystemOnly',
64             'testHasTabs']),
65        self._GetEnabledTests('system', 'mac', 'mavericks', True))
66
67  def testSystemMacLion(self):
68    self.assertEquals(
69        set(['testAllEnabled',
70             'testMacOnly',
71             'testNoChromeOS',
72             'testNoMavericks',
73             'testNoWinLinux',
74             'testSystemOnly',
75             'testHasTabs']),
76        self._GetEnabledTests('system', 'mac', 'lion', True))
77
78  def testCrosGuestChromeOS(self):
79    self.assertEquals(
80        set(['testAllEnabled',
81             'testChromeOSOnly',
82             'testNoMac',
83             'testNoMavericks',
84             'testNoSystem',
85             'testNoWinLinux',
86             'testHasTabs']),
87        self._GetEnabledTests('cros-guest', 'chromeos', '', True))
88
89  def testCanaryWindowsWin7(self):
90    self.assertEquals(
91        set(['testAllEnabled',
92             'testNoChromeOS',
93             'testNoMac',
94             'testNoMavericks',
95             'testNoSystem',
96             'testWinOrLinuxOnly',
97             'testHasTabs']),
98        self._GetEnabledTests('canary', 'win', 'win7', True))
99
100  def testDoesntHaveTabs(self):
101    self.assertEquals(
102        set(['testAllEnabled',
103             'testNoChromeOS',
104             'testNoMac',
105             'testNoMavericks',
106             'testNoSystem',
107             'testWinOrLinuxOnly']),
108        self._GetEnabledTests('canary', 'win', 'win7', False))
109
110  def testSkip(self):
111    args = MockArgs()
112    args.skip = ['telemetry.*testNoMac', '*NoMavericks',
113                 'telemetry.testing.disabled_cases.DisabledCases.testNoSystem']
114    self.assertEquals(
115        set(['testAllEnabled',
116             'testNoChromeOS',
117             'testWinOrLinuxOnly',
118             'testHasTabs']),
119        self._GetEnabledTests('canary', 'win', 'win7', True, args))
120