1
# (C) 2005 Canonical Ltd
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.
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.
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
17
"""Tests for the Branch facility that are not interface tests.
19
For interface tests see test_branch_implementations.py.
21
For concrete class tests see this file, and for meta-branch tests
25
from StringIO import StringIO
27
import bzrlib.branch as branch
28
from bzrlib.errors import (NotBranchError,
30
UnsupportedFormatError,
33
from bzrlib.tests import TestCase, TestCaseInTempDir
34
from bzrlib.transport import get_transport
36
class TestDefaultFormat(TestCase):
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)
43
return "a branch %s" % url
44
branch.Branch.set_default_initializer(recorder)
46
b = branch.Branch.initialize("memory:/")
47
self.assertEqual("a branch memory:/", b)
49
branch.Branch.set_default_initializer(old_initializer)
50
self.assertEqual(old_initializer, branch.Branch.get_default_initializer())
53
class SampleBranchFormat(branch.BzrBranchFormat):
56
this format is initializable, unsupported to aid in testing the
57
open and open_downlevel routines.
60
def get_format_string(self):
61
"""See BzrBranchFormat.get_format_string()."""
62
return "Sample branch format."
64
def initialize(self, url):
65
"""Format 4 branches cannot be created."""
66
t = get_transport(url)
68
t.put('.bzr/branch-format', StringIO(self.get_format_string()))
71
def is_supported(self):
74
def open(self, transport):
75
return "opened branch."
78
class TestBzrBranchFormat(TestCaseInTempDir):
79
"""Tests for the BzrBranchFormat facility."""
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")
94
def test_find_format_not_branch(self):
95
self.assertRaises(NotBranchError,
96
branch.BzrBranchFormat.find_format,
99
def test_find_format_unknown_format(self):
100
t = get_transport('.')
102
t.put('.bzr/branch-format', StringIO())
103
self.assertRaises(UnknownFormatError,
104
branch.BzrBranchFormat.find_format,
107
def test_register_unregister_format(self):
108
format = SampleBranchFormat()
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, '.')