/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

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2007-04-01 06:48:38 UTC
  • mfrom: (2389.1.1 0.15-to-trunk)
  • Revision ID: pqm@pqm.ubuntu.com-20070401064838-34903c7b0d0c8007
merge 0.15 back to 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
 
107
109
 
108
110
def packages_to_test():
109
111
    """Return a list of packages to test.
152
154
    def __init__(self, stream, descriptions, verbosity,
153
155
                 bench_history=None,
154
156
                 num_tests=None,
155
 
                 use_numbered_dirs=False,
156
157
                 ):
157
158
        """Construct new TestResult.
158
159
 
183
184
        self.skip_count = 0
184
185
        self.unsupported = {}
185
186
        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 self.use_numbered_dirs:
 
293
            if 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,
324
323
                 ):
325
324
        ExtendedTestResult.__init__(self, stream, descriptions, verbosity,
326
 
            bench_history, num_tests, use_numbered_dirs)
 
325
            bench_history, num_tests)
327
326
        if pb is None:
328
327
            self.pb = self.ui.nested_progress_bar()
329
328
            self._supplied_pb = False
365
364
                + self._shortened_test_description(test))
366
365
 
367
366
    def _test_description(self, test):
368
 
        if self.use_numbered_dirs:
 
367
        if NUMBERED_DIRS:
369
368
            return '#%d %s' % (self.count,
370
369
                               self._shortened_test_description(test))
371
370
        else:
434
433
        # width needs space for 6 char status, plus 1 for slash, plus 2 10-char
435
434
        # numbers, plus a trailing blank
436
435
        # when NUMBERED_DIRS: plus 5 chars on test number, plus 1 char on space
437
 
        if self.use_numbered_dirs:
 
436
        if NUMBERED_DIRS:
438
437
            self.stream.write('%5d ' % self.count)
439
438
            self.stream.write(self._ellipsize_to_right(name,
440
439
                                osutils.terminal_width()-36))
445
444
 
446
445
    def _error_summary(self, err):
447
446
        indent = ' ' * 4
448
 
        if self.use_numbered_dirs:
 
447
        if NUMBERED_DIRS:
449
448
            indent += ' ' * 6
450
449
        return '%s%s' % (indent, err[1])
451
450
 
494
493
                 descriptions=0,
495
494
                 verbosity=1,
496
495
                 keep_output=False,
497
 
                 bench_history=None,
498
 
                 use_numbered_dirs=False,
499
 
                 ):
 
496
                 bench_history=None):
500
497
        self.stream = unittest._WritelnDecorator(stream)
501
498
        self.descriptions = descriptions
502
499
        self.verbosity = verbosity
503
500
        self.keep_output = keep_output
504
501
        self._bench_history = bench_history
505
 
        self.use_numbered_dirs = use_numbered_dirs
506
502
 
507
503
    def run(self, test):
508
504
        "Run the given test case or test suite."
516
512
                              self.verbosity,
517
513
                              bench_history=self._bench_history,
518
514
                              num_tests=test.countTestCases(),
519
 
                              use_numbered_dirs=self.use_numbered_dirs,
520
515
                              )
521
516
        result.stop_early = self.stop_on_failure
522
517
        result.report_starting()
575
570
                else:
576
571
                    test_root = test_root.encode(
577
572
                        sys.getfilesystemencoding())
578
 
                _rmtree_temp_dir(test_root)
 
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
579
582
        else:
580
583
            note("Failed tests working directories are in '%s'\n", test_root)
581
584
        TestCaseWithMemoryTransport.TEST_ROOT = None
751
754
        self._startLogFile()
752
755
        self._benchcalls = []
753
756
        self._benchtime = None
754
 
        self._clear_hooks()
755
 
 
756
 
    def _clear_hooks(self):
757
757
        # prevent hooks affecting tests
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
 
            }
 
758
        self._preserved_hooks = bzrlib.branch.Branch.hooks
764
759
        self.addCleanup(self._restoreHooks)
765
760
        # this list of hooks must be kept in sync with the defaults
766
761
        # in branch.py
767
762
        bzrlib.branch.Branch.hooks = bzrlib.branch.BranchHooks()
768
 
        bzrlib.smart.server.SmartTCPServer.hooks = \
769
 
            bzrlib.smart.server.SmartServerHooks()
770
763
 
771
764
    def _silenceUI(self):
772
765
        """Turn off UI for duration of test"""
927
920
            self.fail("%r is an instance of %s rather than %s" % (
928
921
                obj, obj.__class__, kls))
929
922
 
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
 
 
965
923
    def _capture_warnings(self, a_callable, *args, **kwargs):
966
924
        """A helper for callDeprecated and applyDeprecated.
967
925
 
1105
1063
            osutils.set_or_unset_env(name, value)
1106
1064
 
1107
1065
    def _restoreHooks(self):
1108
 
        for klass, hooks in self._preserved_hooks.items():
1109
 
            setattr(klass, 'hooks', hooks)
 
1066
        bzrlib.branch.Branch.hooks = self._preserved_hooks
1110
1067
 
1111
1068
    def knownFailure(self, reason):
1112
1069
        """This test has failed for some known reason."""
1828
1785
    """
1829
1786
 
1830
1787
    OVERRIDE_PYTHON = 'python'
1831
 
    use_numbered_dirs = False
1832
1788
 
1833
1789
    def check_file_contents(self, filename, expect):
1834
1790
        self.log("check contents of file %s" % filename)
1844
1800
        For TestCaseInTempDir we create a temporary directory based on the test
1845
1801
        name and then create two subdirs - test and home under it.
1846
1802
        """
1847
 
        if self.use_numbered_dirs:  # strongly recommended on Windows
1848
 
                                    # due the path length limitation (260 ch.)
 
1803
        if NUMBERED_DIRS:       # strongly recommended on Windows
 
1804
                                # due the path length limitation (260 chars)
1849
1805
            candidate_dir = '%s/%dK/%05d' % (self.TEST_ROOT,
1850
1806
                                             int(self.number/1000),
1851
1807
                                             self.number)
2074
2030
              transport=None, lsprof_timed=None, bench_history=None,
2075
2031
              matching_tests_first=None,
2076
2032
              numbered_dirs=None):
2077
 
    use_numbered_dirs = bool(numbered_dirs)
 
2033
    global NUMBERED_DIRS
 
2034
    if numbered_dirs is not None:
 
2035
        NUMBERED_DIRS = bool(numbered_dirs)
2078
2036
 
2079
2037
    TestCase._gather_lsprof_in_benchmarks = lsprof_timed
2080
 
    if numbered_dirs is not None:
2081
 
        TestCaseInTempDir.use_numbered_dirs = use_numbered_dirs
2082
2038
    if verbose:
2083
2039
        verbosity = 2
2084
2040
    else:
2087
2043
                            descriptions=0,
2088
2044
                            verbosity=verbosity,
2089
2045
                            keep_output=keep_output,
2090
 
                            bench_history=bench_history,
2091
 
                            use_numbered_dirs=use_numbered_dirs,
2092
 
                            )
 
2046
                            bench_history=bench_history)
2093
2047
    runner.stop_on_failure=stop_on_failure
2094
2048
    if pattern != '.*':
2095
2049
        if matching_tests_first:
2293
2247
        suite.addTests(adapter.adapt(test))
2294
2248
 
2295
2249
 
2296
 
def _rmtree_temp_dir(dirname):
2297
 
    try:
2298
 
        osutils.rmtree(dirname)
2299
 
    except OSError, e:
2300
 
        if sys.platform == 'win32' and e.errno == errno.EACCES:
2301
 
            print >>sys.stderr, ('Permission denied: '
2302
 
                                 'unable to remove testing dir '
2303
 
                                 '%s' % os.path.basename(dirname))
2304
 
        else:
2305
 
            raise
2306
 
 
2307
 
 
2308
2250
def clean_selftest_output(root=None, quiet=False):
2309
2251
    """Remove all selftest output directories from root directory.
2310
2252
 
2322
2264
        if os.path.isdir(i) and re_dir.match(i):
2323
2265
            if not quiet:
2324
2266
                print 'delete directory:', i
2325
 
            _rmtree_temp_dir(i)
 
2267
            shutil.rmtree(i)
2326
2268
 
2327
2269
 
2328
2270
class Feature(object):