/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: Kent Gibson
  • Date: 2007-03-07 14:49:00 UTC
  • mfrom: (2324 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2350.
  • Revision ID: warthog618@gmail.com-20070307144900-6bt7twg47zul3w0w
merged bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
import errno
34
34
import logging
35
35
import os
 
36
from pprint import pformat
36
37
import re
37
38
import shlex
38
39
import stat
102
103
                      bzrlib.store,
103
104
                      ]
104
105
 
 
106
NUMBERED_DIRS = False   # dirs kind for TestCaseInTempDir (numbered or named)
 
107
 
105
108
 
106
109
def packages_to_test():
107
110
    """Return a list of packages to test.
208
211
    def startTest(self, test):
209
212
        unittest.TestResult.startTest(self, test)
210
213
        self.report_test_start(test)
 
214
        test.number = self.count
211
215
        self._recordTestStartTime()
212
216
 
213
217
    def _recordTestStartTime(self):
324
328
                + ' ' 
325
329
                + self._shortened_test_description(test))
326
330
 
 
331
    def _test_description(self, test):
 
332
        if NUMBERED_DIRS:
 
333
            return '#%d %s' % (self.count,
 
334
                               self._shortened_test_description(test))
 
335
        else:
 
336
            return self._shortened_test_description(test)
 
337
 
327
338
    def report_error(self, test, err):
328
339
        self.error_count += 1
329
340
        self.pb.note('ERROR: %s\n    %s\n', 
330
 
            self._shortened_test_description(test),
 
341
            self._test_description(test),
331
342
            err[1],
332
343
            )
333
344
 
334
345
    def report_failure(self, test, err):
335
346
        self.failure_count += 1
336
347
        self.pb.note('FAIL: %s\n    %s\n', 
337
 
            self._shortened_test_description(test),
 
348
            self._test_description(test),
338
349
            err[1],
339
350
            )
340
351
 
380
391
        name = self._shortened_test_description(test)
381
392
        # width needs space for 6 char status, plus 1 for slash, plus 2 10-char
382
393
        # numbers, plus a trailing blank
383
 
        self.stream.write(self._ellipsize_to_right(name,
384
 
                            osutils.terminal_width()-30))
 
394
        # when NUMBERED_DIRS: plus 5 chars on test number, plus 1 char on space
 
395
        if NUMBERED_DIRS:
 
396
            self.stream.write('%5d ' % self.count)
 
397
            self.stream.write(self._ellipsize_to_right(name,
 
398
                                osutils.terminal_width()-36))
 
399
        else:
 
400
            self.stream.write(self._ellipsize_to_right(name,
 
401
                                osutils.terminal_width()-30))
385
402
        self.stream.flush()
386
403
 
 
404
    def _error_summary(self, err):
 
405
        indent = ' ' * 4
 
406
        if NUMBERED_DIRS:
 
407
            indent += ' ' * 6
 
408
        return '%s%s' % (indent, err[1])
 
409
 
387
410
    def report_error(self, test, err):
388
411
        self.error_count += 1
389
 
        self.stream.writeln('ERROR %s\n    %s' 
390
 
                % (self._testTimeString(), err[1]))
 
412
        self.stream.writeln('ERROR %s\n%s'
 
413
                % (self._testTimeString(),
 
414
                   self._error_summary(err)))
391
415
 
392
416
    def report_failure(self, test, err):
393
417
        self.failure_count += 1
394
 
        self.stream.writeln(' FAIL %s\n    %s'
395
 
                % (self._testTimeString(), err[1]))
 
418
        self.stream.writeln(' FAIL %s\n%s'
 
419
                % (self._testTimeString(),
 
420
                   self._error_summary(err)))
396
421
 
397
422
    def report_success(self, test):
398
423
        self.stream.writeln('   OK %s' % self._testTimeString())
399
424
        for bench_called, stats in getattr(test, '_benchcalls', []):
 
425
            if NUMBERED_DIRS:
 
426
                self.stream.write(' ' * 6)
400
427
            self.stream.writeln('LSProf output for %s(%s, %s)' % bench_called)
401
428
            stats.pprint(file=self.stream)
402
429
        self.stream.flush()
403
430
 
404
431
    def report_skip(self, test, skip_excinfo):
405
 
        print >>self.stream, ' SKIP %s' % self._testTimeString()
406
 
        print >>self.stream, '     %s' % skip_excinfo[1]
 
432
        self.skip_count += 1
 
433
        self.stream.writeln(' SKIP %s\n%s'
 
434
                % (self._testTimeString(),
 
435
                   self._error_summary(skip_excinfo)))
407
436
 
408
437
 
409
438
class TextTestRunner(object):
456
485
            self.stream.writeln(")")
457
486
        else:
458
487
            self.stream.writeln("OK")
 
488
        if result.skip_count > 0:
 
489
            skipped = result.skip_count
 
490
            self.stream.writeln('%d test%s skipped' %
 
491
                                (skipped, skipped != 1 and "s" or ""))
459
492
        result.report_cleaning_up()
460
493
        # This is still a little bogus, 
461
494
        # but only a little. Folk not using our testrunner will
608
641
                                  charjunk=lambda x: False)
609
642
        return ''.join(difflines)
610
643
 
 
644
    def assertEqual(self, a, b, message=''):
 
645
        if a == b:
 
646
            return
 
647
        if message:
 
648
            message += '\n'
 
649
        raise AssertionError("%snot equal:\na = %s\nb = %s\n"
 
650
            % (message,
 
651
               pformat(a, indent=4), pformat(b, indent=4)))
 
652
 
 
653
    assertEquals = assertEqual
 
654
 
611
655
    def assertEqualDiff(self, a, b, message=None):
612
656
        """Assert two texts are equal, if not raise an exception.
613
657
        
638
682
    def assertContainsRe(self, haystack, needle_re):
639
683
        """Assert that a contains something matching a regular expression."""
640
684
        if not re.search(needle_re, haystack):
641
 
            raise AssertionError('pattern "%s" not found in "%s"'
 
685
            raise AssertionError('pattern "%r" not found in "%r"'
642
686
                    % (needle_re, haystack))
643
687
 
644
688
    def assertNotContainsRe(self, haystack, needle_re):
749
793
        expected_first_warning = symbol_versioning.deprecation_string(
750
794
            a_callable, deprecation_format)
751
795
        if len(call_warnings) == 0:
752
 
            self.fail("No assertion generated by call to %s" %
 
796
            self.fail("No deprecation warning generated by call to %s" %
753
797
                a_callable)
754
798
        self.assertEqual(expected_first_warning, call_warnings[0])
755
799
        return result
1010
1054
        where it may be useful for debugging.  See also run_captured.
1011
1055
 
1012
1056
        :param stdin: A string to be used as stdin for the command.
 
1057
        :param retcode: The status code the command should return
 
1058
        :param working_dir: The directory to run the command in
1013
1059
        """
1014
1060
        retcode = kwargs.pop('retcode', 0)
1015
1061
        encoding = kwargs.pop('encoding', None)
1503
1549
        For TestCaseInTempDir we create a temporary directory based on the test
1504
1550
        name and then create two subdirs - test and home under it.
1505
1551
        """
 
1552
        if NUMBERED_DIRS:       # strongly recommended on Windows
 
1553
                                # due the path length limitation (260 chars)
 
1554
            candidate_dir = '%s/%dK/%05d' % (self.TEST_ROOT,
 
1555
                                             int(self.number/1000),
 
1556
                                             self.number)
 
1557
            os.makedirs(candidate_dir)
 
1558
            self.test_home_dir = candidate_dir + '/home'
 
1559
            os.mkdir(self.test_home_dir)
 
1560
            self.test_dir = candidate_dir + '/work'
 
1561
            os.mkdir(self.test_dir)
 
1562
            os.chdir(self.test_dir)
 
1563
            # put name of test inside
 
1564
            f = file(candidate_dir + '/name', 'w')
 
1565
            f.write(self.id())
 
1566
            f.close()
 
1567
            return
 
1568
        # Else NAMED DIRS
1506
1569
        # shorten the name, to avoid test failures due to path length
1507
1570
        short_id = self.id().replace('bzrlib.tests.', '') \
1508
1571
                   .replace('__main__.', '')[-100:]
1660
1723
            self.fail("path %s is not a directory; has mode %#o"
1661
1724
                      % (relpath, mode))
1662
1725
 
 
1726
    def assertTreesEqual(self, left, right):
 
1727
        """Check that left and right have the same content and properties."""
 
1728
        # we use a tree delta to check for equality of the content, and we
 
1729
        # manually check for equality of other things such as the parents list.
 
1730
        self.assertEqual(left.get_parent_ids(), right.get_parent_ids())
 
1731
        differences = left.changes_from(right)
 
1732
        self.assertFalse(differences.has_changed(),
 
1733
            "Trees %r and %r are different: %r" % (left, right, differences))
 
1734
 
1663
1735
    def setUp(self):
1664
1736
        super(TestCaseWithTransport, self).setUp()
1665
1737
        self.__server = None
1707
1779
def run_suite(suite, name='test', verbose=False, pattern=".*",
1708
1780
              stop_on_failure=False, keep_output=False,
1709
1781
              transport=None, lsprof_timed=None, bench_history=None,
1710
 
              matching_tests_first=None):
 
1782
              matching_tests_first=None,
 
1783
              numbered_dirs=False):
 
1784
    global NUMBERED_DIRS
 
1785
    NUMBERED_DIRS = bool(numbered_dirs)
 
1786
 
1711
1787
    TestCase._gather_lsprof_in_benchmarks = lsprof_timed
1712
1788
    if verbose:
1713
1789
        verbosity = 2
1734
1810
             test_suite_factory=None,
1735
1811
             lsprof_timed=None,
1736
1812
             bench_history=None,
1737
 
             matching_tests_first=None):
 
1813
             matching_tests_first=None,
 
1814
             numbered_dirs=False):
1738
1815
    """Run the whole test suite under the enhanced runner"""
1739
1816
    # XXX: Very ugly way to do this...
1740
1817
    # Disable warning about old formats because we don't want it to disturb
1757
1834
                     transport=transport,
1758
1835
                     lsprof_timed=lsprof_timed,
1759
1836
                     bench_history=bench_history,
1760
 
                     matching_tests_first=matching_tests_first)
 
1837
                     matching_tests_first=matching_tests_first,
 
1838
                     numbered_dirs=numbered_dirs)
1761
1839
    finally:
1762
1840
        default_transport = old_transport
1763
1841
 
1786
1864
                   'bzrlib.tests.test_decorators',
1787
1865
                   'bzrlib.tests.test_delta',
1788
1866
                   'bzrlib.tests.test_diff',
 
1867
                   'bzrlib.tests.test_dirstate',
1789
1868
                   'bzrlib.tests.test_doc_generate',
1790
1869
                   'bzrlib.tests.test_errors',
1791
1870
                   'bzrlib.tests.test_escaped_store',
 
1871
                   'bzrlib.tests.test_extract',
1792
1872
                   'bzrlib.tests.test_fetch',
1793
1873
                   'bzrlib.tests.test_ftp_transport',
1794
1874
                   'bzrlib.tests.test_generate_docs',
1841
1921
                   'bzrlib.tests.test_source',
1842
1922
                   'bzrlib.tests.test_status',
1843
1923
                   'bzrlib.tests.test_store',
 
1924
                   'bzrlib.tests.test_subsume',
1844
1925
                   'bzrlib.tests.test_symbol_versioning',
1845
1926
                   'bzrlib.tests.test_tag',
1846
1927
                   'bzrlib.tests.test_testament',
1863
1944
                   'bzrlib.tests.test_weave',
1864
1945
                   'bzrlib.tests.test_whitebox',
1865
1946
                   'bzrlib.tests.test_workingtree',
 
1947
                   'bzrlib.tests.test_workingtree_4',
1866
1948
                   'bzrlib.tests.test_wsgi',
1867
1949
                   'bzrlib.tests.test_xml',
1868
1950
                   ]