~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/__init__.py

merge 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
1824
1821
    """
1825
1822
 
1826
1823
    OVERRIDE_PYTHON = 'python'
 
1824
    use_numbered_dirs = False
1827
1825
 
1828
1826
    def check_file_contents(self, filename, expect):
1829
1827
        self.log("check contents of file %s" % filename)
1839
1837
        For TestCaseInTempDir we create a temporary directory based on the test
1840
1838
        name and then create two subdirs - test and home under it.
1841
1839
        """
1842
 
        if NUMBERED_DIRS:       # strongly recommended on Windows
1843
 
                                # due the path length limitation (260 chars)
 
1840
        if self.use_numbered_dirs:  # strongly recommended on Windows
 
1841
                                    # due the path length limitation (260 ch.)
1844
1842
            candidate_dir = '%s/%dK/%05d' % (self.TEST_ROOT,
1845
1843
                                             int(self.number/1000),
1846
1844
                                             self.number)
2069
2067
              transport=None, lsprof_timed=None, bench_history=None,
2070
2068
              matching_tests_first=None,
2071
2069
              numbered_dirs=None):
2072
 
    global NUMBERED_DIRS
 
2070
    use_numbered_dirs = bool(numbered_dirs)
 
2071
 
 
2072
    TestCase._gather_lsprof_in_benchmarks = lsprof_timed
2073
2073
    if numbered_dirs is not None:
2074
 
        NUMBERED_DIRS = bool(numbered_dirs)
2075
 
 
2076
 
    TestCase._gather_lsprof_in_benchmarks = lsprof_timed
 
2074
        TestCaseInTempDir.use_numbered_dirs = use_numbered_dirs
2077
2075
    if verbose:
2078
2076
        verbosity = 2
2079
2077
    else:
2082
2080
                            descriptions=0,
2083
2081
                            verbosity=verbosity,
2084
2082
                            keep_output=keep_output,
2085
 
                            bench_history=bench_history)
 
2083
                            bench_history=bench_history,
 
2084
                            use_numbered_dirs=use_numbered_dirs,
 
2085
                            )
2086
2086
    runner.stop_on_failure=stop_on_failure
2087
2087
    if pattern != '.*':
2088
2088
        if matching_tests_first:
2286
2286
        suite.addTests(adapter.adapt(test))
2287
2287
 
2288
2288
 
 
2289
def _rmtree_temp_dir(dirname):
 
2290
    try:
 
2291
        osutils.rmtree(dirname)
 
2292
    except OSError, e:
 
2293
        if sys.platform == 'win32' and e.errno == errno.EACCES:
 
2294
            print >>sys.stderr, ('Permission denied: '
 
2295
                                 'unable to remove testing dir '
 
2296
                                 '%s' % os.path.basename(test_root))
 
2297
        else:
 
2298
            raise
 
2299
 
 
2300
 
2289
2301
def clean_selftest_output(root=None, quiet=False):
2290
2302
    """Remove all selftest output directories from root directory.
2291
2303
 
2303
2315
        if os.path.isdir(i) and re_dir.match(i):
2304
2316
            if not quiet:
2305
2317
                print 'delete directory:', i
2306
 
            shutil.rmtree(i)
 
2318
            _rmtree_temp_dir(i)
2307
2319
 
2308
2320
 
2309
2321
class Feature(object):