/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/__init__.py

Upgraded to the latest bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
104
104
                      bzrlib.store,
105
105
                      ]
106
106
 
107
 
NUMBERED_DIRS = False   # dirs kind for TestCaseInTempDir (numbered or named)
108
 
 
109
107
 
110
108
def packages_to_test():
111
109
    """Return a list of packages to test.
154
152
    def __init__(self, stream, descriptions, verbosity,
155
153
                 bench_history=None,
156
154
                 num_tests=None,
 
155
                 use_numbered_dirs=False,
157
156
                 ):
158
157
        """Construct new TestResult.
159
158
 
184
183
        self.skip_count = 0
185
184
        self.unsupported = {}
186
185
        self.count = 0
 
186
        self.use_numbered_dirs = use_numbered_dirs
187
187
        self._overall_start_time = time.time()
188
188
    
189
189
    def extractBenchmarkTime(self, testCase):
290
290
        for test, err in errors:
291
291
            self.stream.writeln(self.separator1)
292
292
            self.stream.write("%s: " % flavour)
293
 
            if NUMBERED_DIRS:
 
293
            if self.use_numbered_dirs:
294
294
                self.stream.write('#%d ' % test.number)
295
295
            self.stream.writeln(self.getDescription(test))
296
296
            if getattr(test, '_get_log', None) is not None:
320
320
                 bench_history=None,
321
321
                 num_tests=None,
322
322
                 pb=None,
 
323
                 use_numbered_dirs=False,
323
324
                 ):
324
325
        ExtendedTestResult.__init__(self, stream, descriptions, verbosity,
325
 
            bench_history, num_tests)
 
326
            bench_history, num_tests, use_numbered_dirs)
326
327
        if pb is None:
327
328
            self.pb = self.ui.nested_progress_bar()
328
329
            self._supplied_pb = False
364
365
                + self._shortened_test_description(test))
365
366
 
366
367
    def _test_description(self, test):
367
 
        if NUMBERED_DIRS:
 
368
        if self.use_numbered_dirs:
368
369
            return '#%d %s' % (self.count,
369
370
                               self._shortened_test_description(test))
370
371
        else:
433
434
        # width needs space for 6 char status, plus 1 for slash, plus 2 10-char
434
435
        # numbers, plus a trailing blank
435
436
        # when NUMBERED_DIRS: plus 5 chars on test number, plus 1 char on space
436
 
        if NUMBERED_DIRS:
 
437
        if self.use_numbered_dirs:
437
438
            self.stream.write('%5d ' % self.count)
438
439
            self.stream.write(self._ellipsize_to_right(name,
439
440
                                osutils.terminal_width()-36))
444
445
 
445
446
    def _error_summary(self, err):
446
447
        indent = ' ' * 4
447
 
        if NUMBERED_DIRS:
 
448
        if self.use_numbered_dirs:
448
449
            indent += ' ' * 6
449
450
        return '%s%s' % (indent, err[1])
450
451
 
493
494
                 descriptions=0,
494
495
                 verbosity=1,
495
496
                 keep_output=False,
496
 
                 bench_history=None):
 
497
                 bench_history=None,
 
498
                 use_numbered_dirs=False,
 
499
                 ):
497
500
        self.stream = unittest._WritelnDecorator(stream)
498
501
        self.descriptions = descriptions
499
502
        self.verbosity = verbosity
500
503
        self.keep_output = keep_output
501
504
        self._bench_history = bench_history
 
505
        self.use_numbered_dirs = use_numbered_dirs
502
506
 
503
507
    def run(self, test):
504
508
        "Run the given test case or test suite."
512
516
                              self.verbosity,
513
517
                              bench_history=self._bench_history,
514
518
                              num_tests=test.countTestCases(),
 
519
                              use_numbered_dirs=self.use_numbered_dirs,
515
520
                              )
516
521
        result.stop_early = self.stop_on_failure
517
522
        result.report_starting()
570
575
                else:
571
576
                    test_root = test_root.encode(
572
577
                        sys.getfilesystemencoding())
573
 
                try:
574
 
                    osutils.rmtree(test_root)
575
 
                except OSError, e:
576
 
                    if sys.platform == 'win32' and e.errno == errno.EACCES:
577
 
                        print >>sys.stderr, ('Permission denied: '
578
 
                                             'unable to remove testing dir '
579
 
                                             '%s' % os.path.basename(test_root))
580
 
                    else:
581
 
                        raise
 
578
                _rmtree_temp_dir(test_root)
582
579
        else:
583
580
            note("Failed tests working directories are in '%s'\n", test_root)
584
581
        TestCaseWithMemoryTransport.TEST_ROOT = None
754
751
        self._startLogFile()
755
752
        self._benchcalls = []
756
753
        self._benchtime = None
 
754
        self._clear_hooks()
 
755
 
 
756
    def _clear_hooks(self):
757
757
        # prevent hooks affecting tests
758
 
        self._preserved_hooks = bzrlib.branch.Branch.hooks
 
758
        import bzrlib.branch
 
759
        import bzrlib.smart.server
 
760
        self._preserved_hooks = {
 
761
            bzrlib.branch.Branch: bzrlib.branch.Branch.hooks,
 
762
            bzrlib.smart.server.SmartTCPServer: bzrlib.smart.server.SmartTCPServer.hooks,
 
763
            }
759
764
        self.addCleanup(self._restoreHooks)
760
765
        # this list of hooks must be kept in sync with the defaults
761
766
        # in branch.py
762
767
        bzrlib.branch.Branch.hooks = bzrlib.branch.BranchHooks()
 
768
        bzrlib.smart.server.SmartTCPServer.hooks = \
 
769
            bzrlib.smart.server.SmartServerHooks()
763
770
 
764
771
    def _silenceUI(self):
765
772
        """Turn off UI for duration of test"""
868
875
                excName = str(excClass)
869
876
            raise self.failureException, "%s not raised" % excName
870
877
 
 
878
    def assertRaises(self, excClass, func, *args, **kwargs):
 
879
        """Assert that a callable raises a particular exception.
 
880
 
 
881
        :param excClass: As for the except statement, this may be either an
 
882
        exception class, or a tuple of classes.
 
883
 
 
884
        Returns the exception so that you can examine it.
 
885
        """
 
886
        try:
 
887
            func(*args, **kwargs)
 
888
        except excClass, e:
 
889
            return e
 
890
        else:
 
891
            if getattr(excClass,'__name__', None) is not None:
 
892
                excName = excClass.__name__
 
893
            else:
 
894
                # probably a tuple
 
895
                excName = str(excClass)
 
896
            raise self.failureException, "%s not raised" % excName
 
897
 
871
898
    def assertIs(self, left, right, message=None):
872
899
        if not (left is right):
873
900
            if message is not None:
900
927
            self.fail("%r is an instance of %s rather than %s" % (
901
928
                obj, obj.__class__, kls))
902
929
 
 
930
    def expectFailure(self, reason, assertion, *args, **kwargs):
 
931
        """Invoke a test, expecting it to fail for the given reason.
 
932
 
 
933
        This is for assertions that ought to succeed, but currently fail.
 
934
        (The failure is *expected* but not *wanted*.)  Please be very precise
 
935
        about the failure you're expecting.  If a new bug is introduced,
 
936
        AssertionError should be raised, not KnownFailure.
 
937
 
 
938
        Frequently, expectFailure should be followed by an opposite assertion.
 
939
        See example below.
 
940
 
 
941
        Intended to be used with a callable that raises AssertionError as the
 
942
        'assertion' parameter.  args and kwargs are passed to the 'assertion'.
 
943
 
 
944
        Raises KnownFailure if the test fails.  Raises AssertionError if the
 
945
        test succeeds.
 
946
 
 
947
        example usage::
 
948
 
 
949
          self.expectFailure('Math is broken', self.assertNotEqual, 54,
 
950
                             dynamic_val)
 
951
          self.assertEqual(42, dynamic_val)
 
952
 
 
953
          This means that a dynamic_val of 54 will cause the test to raise
 
954
          a KnownFailure.  Once math is fixed and the expectFailure is removed,
 
955
          only a dynamic_val of 42 will allow the test to pass.  Anything other
 
956
          than 54 or 42 will cause an AssertionError.
 
957
        """
 
958
        try:
 
959
            assertion(*args, **kwargs)
 
960
        except AssertionError:
 
961
            raise KnownFailure(reason)
 
962
        else:
 
963
            self.fail('Unexpected success.  Should have failed: %s' % reason)
 
964
 
903
965
    def _capture_warnings(self, a_callable, *args, **kwargs):
904
966
        """A helper for callDeprecated and applyDeprecated.
905
967
 
1043
1105
            osutils.set_or_unset_env(name, value)
1044
1106
 
1045
1107
    def _restoreHooks(self):
1046
 
        bzrlib.branch.Branch.hooks = self._preserved_hooks
 
1108
        for klass, hooks in self._preserved_hooks.items():
 
1109
            setattr(klass, 'hooks', hooks)
1047
1110
 
1048
1111
    def knownFailure(self, reason):
1049
1112
        """This test has failed for some known reason."""
1765
1828
    """
1766
1829
 
1767
1830
    OVERRIDE_PYTHON = 'python'
 
1831
    use_numbered_dirs = False
1768
1832
 
1769
1833
    def check_file_contents(self, filename, expect):
1770
1834
        self.log("check contents of file %s" % filename)
1780
1844
        For TestCaseInTempDir we create a temporary directory based on the test
1781
1845
        name and then create two subdirs - test and home under it.
1782
1846
        """
1783
 
        if NUMBERED_DIRS:       # strongly recommended on Windows
1784
 
                                # due the path length limitation (260 chars)
 
1847
        if self.use_numbered_dirs:  # strongly recommended on Windows
 
1848
                                    # due the path length limitation (260 ch.)
1785
1849
            candidate_dir = '%s/%dK/%05d' % (self.TEST_ROOT,
1786
1850
                                             int(self.number/1000),
1787
1851
                                             self.number)
2010
2074
              transport=None, lsprof_timed=None, bench_history=None,
2011
2075
              matching_tests_first=None,
2012
2076
              numbered_dirs=None):
2013
 
    global NUMBERED_DIRS
 
2077
    use_numbered_dirs = bool(numbered_dirs)
 
2078
 
 
2079
    TestCase._gather_lsprof_in_benchmarks = lsprof_timed
2014
2080
    if numbered_dirs is not None:
2015
 
        NUMBERED_DIRS = bool(numbered_dirs)
2016
 
 
2017
 
    TestCase._gather_lsprof_in_benchmarks = lsprof_timed
 
2081
        TestCaseInTempDir.use_numbered_dirs = use_numbered_dirs
2018
2082
    if verbose:
2019
2083
        verbosity = 2
2020
2084
    else:
2023
2087
                            descriptions=0,
2024
2088
                            verbosity=verbosity,
2025
2089
                            keep_output=keep_output,
2026
 
                            bench_history=bench_history)
 
2090
                            bench_history=bench_history,
 
2091
                            use_numbered_dirs=use_numbered_dirs,
 
2092
                            )
2027
2093
    runner.stop_on_failure=stop_on_failure
2028
2094
    if pattern != '.*':
2029
2095
        if matching_tests_first:
2107
2173
                   'bzrlib.tests.test_gpg',
2108
2174
                   'bzrlib.tests.test_graph',
2109
2175
                   'bzrlib.tests.test_hashcache',
 
2176
                   'bzrlib.tests.test_help',
2110
2177
                   'bzrlib.tests.test_http',
2111
2178
                   'bzrlib.tests.test_http_response',
2112
2179
                   'bzrlib.tests.test_https_ca_bundle',
2137
2204
                   'bzrlib.tests.test_progress',
2138
2205
                   'bzrlib.tests.test_reconcile',
2139
2206
                   'bzrlib.tests.test_registry',
 
2207
                   'bzrlib.tests.test_remote',
2140
2208
                   'bzrlib.tests.test_repository',
2141
2209
                   'bzrlib.tests.test_revert',
2142
2210
                   'bzrlib.tests.test_revision',
2147
2215
                   'bzrlib.tests.test_selftest',
2148
2216
                   'bzrlib.tests.test_setup',
2149
2217
                   'bzrlib.tests.test_sftp_transport',
 
2218
                   'bzrlib.tests.test_smart',
2150
2219
                   'bzrlib.tests.test_smart_add',
2151
2220
                   'bzrlib.tests.test_smart_transport',
2152
2221
                   'bzrlib.tests.test_source',
2227
2296
        suite.addTests(adapter.adapt(test))
2228
2297
 
2229
2298
 
 
2299
def _rmtree_temp_dir(dirname):
 
2300
    try:
 
2301
        osutils.rmtree(dirname)
 
2302
    except OSError, e:
 
2303
        if sys.platform == 'win32' and e.errno == errno.EACCES:
 
2304
            print >>sys.stderr, ('Permission denied: '
 
2305
                                 'unable to remove testing dir '
 
2306
                                 '%s' % os.path.basename(dirname))
 
2307
        else:
 
2308
            raise
 
2309
 
 
2310
 
2230
2311
def clean_selftest_output(root=None, quiet=False):
2231
2312
    """Remove all selftest output directories from root directory.
2232
2313
 
2235
2316
    :param  quiet:  suppress report about deleting directories
2236
2317
    """
2237
2318
    import re
2238
 
    import shutil
2239
 
 
2240
2319
    re_dir = re.compile(r'''test\d\d\d\d\.tmp''')
2241
2320
    if root is None:
2242
2321
        root = u'.'
2244
2323
        if os.path.isdir(i) and re_dir.match(i):
2245
2324
            if not quiet:
2246
2325
                print 'delete directory:', i
2247
 
            shutil.rmtree(i)
 
2326
            _rmtree_temp_dir(i)
2248
2327
 
2249
2328
 
2250
2329
class Feature(object):