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 import decorators
8from telemetry.core import util
9from telemetry.unittest import run_tests
10
11
12class MockPossibleBrowser(object):
13  def __init__(self, browser_type, os_name, os_version_name,
14               supports_tab_control):
15    self.browser_type = browser_type
16    self.platform = MockPlatform(os_name, os_version_name)
17    self.supports_tab_control = supports_tab_control
18
19
20class MockPlatform(object):
21  def __init__(self, os_name, os_version_name):
22    self.os_name = os_name
23    self.os_version_name = os_version_name
24
25  def GetOSName(self):
26    return self.os_name
27
28  def GetOSVersionName(self):
29    return self.os_version_name
30
31
32class RunTestsUnitTest(unittest.TestCase):
33
34  def setUp(self):
35    self.suite = unittest.TestSuite()
36    self.suite.addTests(run_tests.Discover(
37        util.GetTelemetryDir(), util.GetTelemetryDir(), 'disabled_cases.py'))
38
39  def _GetEnabledTests(self, browser_type, os_name, os_version_name,
40                       supports_tab_control):
41    # pylint: disable=W0212
42    def MockPredicate(test):
43      method = getattr(test, test._testMethodName)
44      return decorators.IsEnabled(method, MockPossibleBrowser(
45          browser_type, os_name, os_version_name, supports_tab_control))
46
47    enabled_tests = set()
48    for i in run_tests.FilterSuite(self.suite, MockPredicate)._tests:
49      for j in i:
50        for k in j:
51          enabled_tests.add(k._testMethodName)
52    return enabled_tests
53
54  def testSystemMacMavericks(self):
55    self.assertEquals(
56        set(['testAllEnabled',
57             'testMacOnly',
58             'testMavericksOnly',
59             'testNoChromeOS',
60             'testNoWinLinux',
61             'testSystemOnly',
62             'testHasTabs']),
63        self._GetEnabledTests('system', 'mac', 'mavericks', True))
64
65  def testSystemMacLion(self):
66    self.assertEquals(
67        set(['testAllEnabled',
68             'testMacOnly',
69             'testNoChromeOS',
70             'testNoMavericks',
71             'testNoWinLinux',
72             'testSystemOnly',
73             'testHasTabs']),
74        self._GetEnabledTests('system', 'mac', 'lion', True))
75
76  def testCrosGuestChromeOS(self):
77    self.assertEquals(
78        set(['testAllEnabled',
79             'testChromeOSOnly',
80             'testNoMac',
81             'testNoMavericks',
82             'testNoSystem',
83             'testNoWinLinux',
84             'testHasTabs']),
85        self._GetEnabledTests('cros-guest', 'chromeos', '', True))
86
87  def testCanaryWindowsWin7(self):
88    self.assertEquals(
89        set(['testAllEnabled',
90             'testNoChromeOS',
91             'testNoMac',
92             'testNoMavericks',
93             'testNoSystem',
94             'testWinOrLinuxOnly',
95             'testHasTabs']),
96        self._GetEnabledTests('canary', 'win', 'win7', True))
97
98  def testDoesntHaveTabs(self):
99    self.assertEquals(
100        set(['testAllEnabled',
101             'testNoChromeOS',
102             'testNoMac',
103             'testNoMavericks',
104             'testNoSystem',
105             'testWinOrLinuxOnly']),
106        self._GetEnabledTests('canary', 'win', 'win7', False))
107