1# Copyright 2013 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.
4import os
5import unittest
6
7from telemetry.core import discover
8from telemetry.core import util
9
10
11class DiscoverTest(unittest.TestCase):
12  def setUp(self):
13    self._base_dir = util.GetUnittestDataDir()
14    self._start_dir = os.path.join(self._base_dir, 'discoverable_classes')
15    self._base_class = Exception
16
17  def testDiscoverClassesBasic(self):
18    classes = discover.DiscoverClasses(
19        self._start_dir, self._base_dir, self._base_class)
20
21    actual_classes = dict(
22        (name, cls.__name__) for name, cls in classes.iteritems())
23    expected_classes = {
24        'discover_dummyclass': 'DummyException',
25        'another_discover_dummyclass': 'DummyExceptionImpl2',
26    }
27    self.assertEqual(actual_classes, expected_classes)
28
29  def testDiscoverClassesWithPattern(self):
30    classes = discover.DiscoverClasses(
31        self._start_dir, self._base_dir, self._base_class,
32        pattern='another*')
33
34    actual_classes = dict(
35        (name, cls.__name__) for name, cls in classes.iteritems())
36    expected_classes = {
37        'another_discover_dummyclass': 'DummyExceptionImpl2',
38    }
39    self.assertEqual(actual_classes, expected_classes)
40
41  def testDiscoverClassesByClassName(self):
42    classes = discover.DiscoverClasses(
43        self._start_dir, self._base_dir, self._base_class,
44        index_by_class_name=True)
45
46    actual_classes = dict(
47        (name, cls.__name__) for name, cls in classes.iteritems())
48    expected_classes = {
49        'dummy_exception': 'DummyException',
50        'dummy_exception_impl1': 'DummyExceptionImpl1',
51        'dummy_exception_impl2': 'DummyExceptionImpl2',
52    }
53    self.assertEqual(actual_classes, expected_classes)
54