~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_branch.py

  • Committer: Robert Collins
  • Date: 2006-01-05 22:30:59 UTC
  • mto: (1534.1.4 integration)
  • mto: This revision was merged to the branch mainline in revision 1536.
  • Revision ID: robertc@robertcollins.net-20060105223059-a8b64f7b47cf12fb
 * bzrlib.osutils.safe_unicode now exists to provide parameter coercion
   for functions that need unicode strings. (Robert Collins)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# (C) 2005 Canonical Ltd
2
 
 
3
 
# This program is free software; you can redistribute it and/or modify
4
 
# it under the terms of the GNU General Public License as published by
5
 
# the Free Software Foundation; either version 2 of the License, or
6
 
# (at your option) any later version.
7
 
 
8
 
# This program is distributed in the hope that it will be useful,
9
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
 
# GNU General Public License for more details.
12
 
 
13
 
# You should have received a copy of the GNU General Public License
14
 
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
 
 
17
 
"""Tests for the Branch facility that are not interface  tests.
18
 
 
19
 
For interface tests see test_branch_implementations.py.
20
 
 
21
 
For concrete class tests see this file, and for meta-branch tests
22
 
also see this file.
23
 
"""
24
 
 
25
 
from StringIO import StringIO
26
 
 
27
 
import bzrlib.branch as branch
28
 
from bzrlib.errors import (NotBranchError,
29
 
                           UnknownFormatError,
30
 
                           UnsupportedFormatError,
31
 
                           )
32
 
 
33
 
from bzrlib.tests import TestCase, TestCaseInTempDir
34
 
from bzrlib.transport import get_transport
35
 
 
36
 
class TestDefaultFormat(TestCase):
37
 
 
38
 
    def test_get_set_default_initializer(self):
39
 
        old_initializer = branch.Branch.get_default_initializer()
40
 
        # default is BzrBranch._initialize
41
 
        self.assertEqual(branch.BzrBranch._initialize, old_initializer)
42
 
        def recorder(url):
43
 
            return "a branch %s" % url
44
 
        branch.Branch.set_default_initializer(recorder)
45
 
        try:
46
 
            b = branch.Branch.initialize("memory:/")
47
 
            self.assertEqual("a branch memory:/", b)
48
 
        finally:
49
 
            branch.Branch.set_default_initializer(old_initializer)
50
 
        self.assertEqual(old_initializer, branch.Branch.get_default_initializer())
51
 
 
52
 
 
53
 
class SampleBranchFormat(branch.BzrBranchFormat):
54
 
    """A sample format
55
 
 
56
 
    this format is initializable, unsupported to aid in testing the 
57
 
    open and open_downlevel routines.
58
 
    """
59
 
 
60
 
    def get_format_string(self):
61
 
        """See BzrBranchFormat.get_format_string()."""
62
 
        return "Sample branch format."
63
 
 
64
 
    def initialize(self, url):
65
 
        """Format 4 branches cannot be created."""
66
 
        t = get_transport(url)
67
 
        t.mkdir('.bzr')
68
 
        t.put('.bzr/branch-format', StringIO(self.get_format_string()))
69
 
        return 'A branch'
70
 
 
71
 
    def is_supported(self):
72
 
        return False
73
 
 
74
 
    def open(self, transport):
75
 
        return "opened branch."
76
 
 
77
 
 
78
 
class TestBzrBranchFormat(TestCaseInTempDir):
79
 
    """Tests for the BzrBranchFormat facility."""
80
 
 
81
 
    def test_find_format(self):
82
 
        # is the right format object found for a branch?
83
 
        # create a branch with a few known format objects.
84
 
        # this is not quite the same as 
85
 
        self.build_tree(["foo/", "bar/"])
86
 
        def check_format(format, url):
87
 
            format.initialize(url)
88
 
            t = get_transport(url)
89
 
            found_format = branch.BzrBranchFormat.find_format(t)
90
 
            self.failUnless(isinstance(found_format, format.__class__))
91
 
        check_format(branch.BzrBranchFormat5(), "foo")
92
 
        check_format(branch.BzrBranchFormat6(), "bar")
93
 
        
94
 
    def test_find_format_not_branch(self):
95
 
        self.assertRaises(NotBranchError,
96
 
                          branch.BzrBranchFormat.find_format,
97
 
                          get_transport('.'))
98
 
 
99
 
    def test_find_format_unknown_format(self):
100
 
        t = get_transport('.')
101
 
        t.mkdir('.bzr')
102
 
        t.put('.bzr/branch-format', StringIO())
103
 
        self.assertRaises(UnknownFormatError,
104
 
                          branch.BzrBranchFormat.find_format,
105
 
                          get_transport('.'))
106
 
 
107
 
    def test_register_unregister_format(self):
108
 
        format = SampleBranchFormat()
109
 
        # make a branch
110
 
        format.initialize('.')
111
 
        # register a format for it.
112
 
        branch.BzrBranchFormat.register_format(format)
113
 
        # which branch.Open will refuse (not supported)
114
 
        self.assertRaises(UnsupportedFormatError, branch.Branch.open, '.')
115
 
        # but open_downlevel will work
116
 
        t = get_transport('.')
117
 
        self.assertEqual(format.open(t), branch.Branch.open_downlevel('.'))
118
 
        # unregister the format
119
 
        branch.BzrBranchFormat.unregister_format(format)
120
 
        # now open_downlevel should fail too.
121
 
        self.assertRaises(UnknownFormatError, branch.Branch.open_downlevel, '.')