~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/__init__.py

  • Committer: abentley
  • Date: 2006-04-20 23:47:53 UTC
  • mfrom: (1681 +trunk)
  • mto: This revision was merged to the branch mainline in revision 1683.
  • Revision ID: abentley@lappy-20060420234753-6a6874b76f09f86d
Merge bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
48
48
import bzrlib.inventory
49
49
import bzrlib.iterablefile
50
50
import bzrlib.lockdir
 
51
from bzrlib.merge import merge_inner
51
52
import bzrlib.merge3
52
53
import bzrlib.osutils
53
54
import bzrlib.osutils as osutils
54
55
import bzrlib.plugin
 
56
from bzrlib.revision import common_ancestor
55
57
import bzrlib.store
56
58
import bzrlib.trace
57
59
from bzrlib.transport import urlescape, get_transport
327
329
    def assertTransportMode(self, transport, path, mode):
328
330
        """Fail if a path does not have mode mode.
329
331
        
330
 
        If modes are not supported on this platform, the test is skipped.
 
332
        If modes are not supported on this transport, the assertion is ignored.
331
333
        """
332
 
        if sys.platform == 'win32':
 
334
        if not transport._can_roundtrip_unix_modebits():
333
335
            return
334
336
        path_stat = transport.stat(path)
335
337
        actual_mode = stat.S_IMODE(path_stat.st_mode)
336
338
        self.assertEqual(mode, actual_mode,
337
339
            'mode of %r incorrect (%o != %o)' % (path, mode, actual_mode))
338
340
 
 
341
    def assertIsInstance(self, obj, kls):
 
342
        """Fail if obj is not an instance of kls"""
 
343
        if not isinstance(obj, kls):
 
344
            self.fail("%r is an instance of %s rather than %s" % (
 
345
                obj, obj.__class__, kls))
 
346
 
339
347
    def _startLogFile(self):
340
348
        """Send bzr and test log messages to a temporary file.
341
349
 
544
552
            sys.stderr = real_stderr
545
553
            sys.stdin = real_stdin
546
554
 
 
555
    def merge(self, branch_from, wt_to):
 
556
        """A helper for tests to do a ui-less merge.
 
557
 
 
558
        This should move to the main library when someone has time to integrate
 
559
        it in.
 
560
        """
 
561
        # minimal ui-less merge.
 
562
        wt_to.branch.fetch(branch_from)
 
563
        base_rev = common_ancestor(branch_from.last_revision(),
 
564
                                   wt_to.branch.last_revision(),
 
565
                                   wt_to.branch.repository)
 
566
        merge_inner(wt_to.branch, branch_from.basis_tree(), 
 
567
                    wt_to.branch.repository.revision_tree(base_rev),
 
568
                    this_tree=wt_to)
 
569
        wt_to.add_pending_merge(branch_from.last_revision())
 
570
 
547
571
 
548
572
BzrTestBase = TestCase
549
573
 
598
622
        super(TestCaseInTempDir, self).setUp()
599
623
        self._make_test_root()
600
624
        _currentdir = os.getcwdu()
 
625
        # shorten the name, to avoid test failures due to path length
601
626
        short_id = self.id().replace('bzrlib.tests.', '') \
602
 
                   .replace('__main__.', '')
603
 
        self.test_dir = osutils.pathjoin(self.TEST_ROOT, short_id)
604
 
        os.mkdir(self.test_dir)
605
 
        os.chdir(self.test_dir)
 
627
                   .replace('__main__.', '')[-100:]
 
628
        # it's possible the same test class is run several times for
 
629
        # parameterized tests, so make sure the names don't collide.  
 
630
        i = 0
 
631
        while True:
 
632
            if i > 0:
 
633
                candidate_dir = '%s/%s.%d' % (self.TEST_ROOT, short_id, i)
 
634
            else:
 
635
                candidate_dir = '%s/%s' % (self.TEST_ROOT, short_id)
 
636
            if os.path.exists(candidate_dir):
 
637
                i = i + 1
 
638
                continue
 
639
            else:
 
640
                self.test_dir = candidate_dir
 
641
                os.mkdir(self.test_dir)
 
642
                os.chdir(self.test_dir)
 
643
                break
606
644
        os.environ['HOME'] = self.test_dir
607
645
        os.environ['APPDATA'] = self.test_dir
608
646
        def _leaveDirectory():
756
794
        self.assertTrue(t.is_readonly())
757
795
        return t
758
796
 
759
 
    def make_branch(self, relpath):
 
797
    def make_branch(self, relpath, format=None):
760
798
        """Create a branch on the transport at relpath."""
761
 
        repo = self.make_repository(relpath)
 
799
        repo = self.make_repository(relpath, format=format)
762
800
        return repo.bzrdir.create_branch()
763
801
 
764
 
    def make_bzrdir(self, relpath):
 
802
    def make_bzrdir(self, relpath, format=None):
765
803
        try:
766
804
            url = self.get_url(relpath)
767
805
            segments = relpath.split('/')
772
810
                    t.mkdir(segments[-1])
773
811
                except errors.FileExists:
774
812
                    pass
775
 
            return bzrlib.bzrdir.BzrDir.create(url)
 
813
            if format is None:
 
814
                format=bzrlib.bzrdir.BzrDirFormat.get_default_format()
 
815
            # FIXME: make this use a single transport someday. RBC 20060418
 
816
            return format.initialize_on_transport(get_transport(relpath))
776
817
        except errors.UninitializableFormat:
777
818
            raise TestSkipped("Format %s is not initializable.")
778
819
 
779
 
    def make_repository(self, relpath, shared=False):
 
820
    def make_repository(self, relpath, shared=False, format=None):
780
821
        """Create a repository on our default transport at relpath."""
781
 
        made_control = self.make_bzrdir(relpath)
 
822
        made_control = self.make_bzrdir(relpath, format=format)
782
823
        return made_control.create_repository(shared=shared)
783
824
 
784
 
    def make_branch_and_tree(self, relpath):
 
825
    def make_branch_and_tree(self, relpath, format=None):
785
826
        """Create a branch on the transport and a tree locally.
786
827
 
787
828
        Returns the tree.
790
831
        # this obviously requires a format that supports branch references
791
832
        # so check for that by checking bzrdir.BzrDirFormat.get_default_format()
792
833
        # RBC 20060208
793
 
        b = self.make_branch(relpath)
 
834
        b = self.make_branch(relpath, format=format)
794
835
        try:
795
836
            return b.bzrdir.create_workingtree()
796
837
        except errors.NotLocalUrl:
861
902
    # This is still a little bogus, 
862
903
    # but only a little. Folk not using our testrunner will
863
904
    # have to delete their temp directories themselves.
 
905
    test_root = TestCaseInTempDir.TEST_ROOT
864
906
    if result.wasSuccessful() or not keep_output:
865
 
        if TestCaseInTempDir.TEST_ROOT is not None:
866
 
            shutil.rmtree(TestCaseInTempDir.TEST_ROOT) 
 
907
        if test_root is not None:
 
908
            print 'Deleting test root %s...' % test_root
 
909
            try:
 
910
                shutil.rmtree(test_root)
 
911
            finally:
 
912
                print
867
913
    else:
868
914
        print "Failed tests working directories are in '%s'\n" % TestCaseInTempDir.TEST_ROOT
869
915
    return result.wasSuccessful()
899
945
                   'bzrlib.tests.test_annotate',
900
946
                   'bzrlib.tests.test_api',
901
947
                   'bzrlib.tests.test_bad_files',
902
 
                   'bzrlib.tests.test_basis_inventory',
903
948
                   'bzrlib.tests.test_branch',
904
949
                   'bzrlib.tests.test_bzrdir',
905
950
                   'bzrlib.tests.test_command',
911
956
                   'bzrlib.tests.test_diff',
912
957
                   'bzrlib.tests.test_doc_generate',
913
958
                   'bzrlib.tests.test_errors',
 
959
                   'bzrlib.tests.test_escaped_store',
914
960
                   'bzrlib.tests.test_fetch',
915
961
                   'bzrlib.tests.test_gpg',
916
962
                   'bzrlib.tests.test_graph',
930
976
                   'bzrlib.tests.test_nonascii',
931
977
                   'bzrlib.tests.test_options',
932
978
                   'bzrlib.tests.test_osutils',
 
979
                   'bzrlib.tests.test_patch',
933
980
                   'bzrlib.tests.test_permissions',
934
981
                   'bzrlib.tests.test_plugins',
935
982
                   'bzrlib.tests.test_progress',
948
995
                   'bzrlib.tests.test_store',
949
996
                   'bzrlib.tests.test_symbol_versioning',
950
997
                   'bzrlib.tests.test_testament',
 
998
                   'bzrlib.tests.test_textfile',
 
999
                   'bzrlib.tests.test_textmerge',
951
1000
                   'bzrlib.tests.test_trace',
952
1001
                   'bzrlib.tests.test_transactions',
953
1002
                   'bzrlib.tests.test_transform',
954
1003
                   'bzrlib.tests.test_transport',
955
1004
                   'bzrlib.tests.test_tsort',
 
1005
                   'bzrlib.tests.test_tuned_gzip',
956
1006
                   'bzrlib.tests.test_ui',
957
 
                   'bzrlib.tests.test_uncommit',
958
1007
                   'bzrlib.tests.test_upgrade',
959
1008
                   'bzrlib.tests.test_versionedfile',
960
1009
                   'bzrlib.tests.test_weave',