~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/TestUtil.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2010-01-21 02:43:10 UTC
  • mfrom: (4976.1.3 ghost-diffs)
  • Revision ID: pqm@pqm.ubuntu.com-20100121024310-y0jq14xdry72ktxl
(Jelmer) Deal with ghosts in 'bzr diff'.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2011 Canonical Ltd
 
1
# Copyright (C) 2004, 2005, 2006 Canonical Ltd
2
2
#       Author: Robert Collins <robert.collins@canonical.com>
3
3
#
4
4
# This program is free software; you can redistribute it and/or modify
20
20
import logging
21
21
import unittest
22
22
 
23
 
from bzrlib import pyutils
24
 
 
25
23
# Mark this python module as being part of the implementation
26
24
# of unittest: this gives us better tracebacks where the last
27
25
# shown frame is the test code, not our assertXYZ.
29
27
 
30
28
 
31
29
class LogCollector(logging.Handler):
32
 
 
33
30
    def __init__(self):
34
31
        logging.Handler.__init__(self)
35
32
        self.records=[]
36
 
 
37
33
    def emit(self, record):
38
34
        self.records.append(record.getMessage())
39
35
 
62
58
                visitor.visitSuite(test)
63
59
                visitTests(test, visitor)
64
60
            else:
65
 
                print "unvisitable non-unittest.TestCase element %r (%r)" % (
66
 
                    test, test.__class__)
 
61
                print "unvisitable non-unittest.TestCase element %r (%r)" % (test, test.__class__)
67
62
 
68
63
 
69
64
class TestSuite(unittest.TestSuite):
111
106
 
112
107
    def loadTestsFromModuleName(self, name):
113
108
        result = self.suiteClass()
114
 
        module = pyutils.get_named_object(name)
 
109
        module = _load_module_by_name(name)
115
110
 
116
111
        result.addTests(self.loadTestsFromModule(module))
117
112
        return result
140
135
        >>>         result.addTests([test, test])
141
136
        >>>     return result
142
137
        """
143
 
        if sys.version_info < (2, 7):
144
 
            basic_tests = super(TestLoader, self).loadTestsFromModule(module)
145
 
        else:
146
 
            # GZ 2010-07-19: Python 2.7 unittest also uses load_tests but with
147
 
            #                a different and incompatible signature
148
 
            basic_tests = super(TestLoader, self).loadTestsFromModule(module,
149
 
                use_load_tests=False)
 
138
        basic_tests = super(TestLoader, self).loadTestsFromModule(module)
150
139
        load_tests = getattr(module, "load_tests", None)
151
140
        if load_tests is not None:
152
141
            return load_tests(basic_tests, module, self)
184
173
            return self.suiteClass()
185
174
 
186
175
 
 
176
def _load_module_by_name(mod_name):
 
177
    parts = mod_name.split('.')
 
178
    module = __import__(mod_name)
 
179
    del parts[0]
 
180
    # for historical reasons python returns the top-level module even though
 
181
    # it loads the submodule; we need to walk down to get the one we want.
 
182
    while parts:
 
183
        module = getattr(module, parts.pop(0))
 
184
    return module
 
185
 
 
186
 
187
187
class TestVisitor(object):
188
188
    """A visitor for Tests"""
189
 
 
190
189
    def visitSuite(self, aTestSuite):
191
190
        pass
192
 
 
193
191
    def visitCase(self, aTestCase):
194
192
        pass