1 # Copyright (C) 2006-2007 Jelmer Vernooij <jelmer@samba.org>
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 """Branching scheme tests."""
19 from bzrlib.errors import NotBranchError, BzrError
21 from bzrlib.tests import TestCase
22 from scheme import (ListBranchingScheme, NoBranchingScheme,
23 BranchingScheme, TrunkBranchingScheme,
24 UnknownBranchingScheme)
26 class BranchingSchemeTest(TestCase):
27 def test_is_branch(self):
28 self.assertRaises(NotImplementedError, BranchingScheme().is_branch, "")
30 def test_is_tag(self):
31 self.assertRaises(NotImplementedError, BranchingScheme().is_tag, "")
33 def test_is_branch_parent(self):
34 self.assertRaises(NotImplementedError,
35 BranchingScheme().is_branch_parent, "")
37 def test_is_tag_parent(self):
38 self.assertRaises(NotImplementedError,
39 BranchingScheme().is_tag_parent, "")
41 def test_unprefix(self):
42 self.assertRaises(NotImplementedError,
43 BranchingScheme().unprefix, "")
45 def test_guess_empty(self):
46 self.assertIsInstance(BranchingScheme.guess_scheme(""),
49 def test_guess_not_convenience(self):
50 self.assertIsInstance(BranchingScheme.guess_scheme("foo"),
53 def test_find_scheme_no(self):
54 self.assertIsInstance(BranchingScheme.find_scheme("none"),
57 def test_find_scheme_invalid(self):
58 self.assertRaises(BzrError, lambda: BranchingScheme.find_scheme("foo"))
60 def test_find_scheme_trunk(self):
61 scheme = BranchingScheme.find_scheme("trunk")
62 self.assertIsInstance(scheme, TrunkBranchingScheme)
63 self.assertEqual(0, scheme.level)
65 def test_find_scheme_trunk_0(self):
66 scheme = BranchingScheme.find_scheme("trunk0")
67 self.assertIsInstance(scheme, TrunkBranchingScheme)
68 self.assertEqual(0, scheme.level)
70 def test_find_scheme_trunk_2(self):
71 scheme = BranchingScheme.find_scheme("trunk2")
72 self.assertIsInstance(scheme, TrunkBranchingScheme)
73 self.assertEqual(2, scheme.level)
75 def test_find_scheme_trunk_invalid(self):
76 self.assertRaises(BzrError,
77 lambda: BranchingScheme.find_scheme("trunkinvalid"))
79 def test_unknownscheme(self):
80 e = UnknownBranchingScheme("foo")
81 self.assertEquals("Branching scheme could not be found: foo", str(e))
84 class NoScheme(TestCase):
86 self.assertEqual("none", NoBranchingScheme().__str__())
88 def test_is_branch_empty(self):
89 self.assertTrue(NoBranchingScheme().is_branch(""))
91 def test_is_branch_slash(self):
92 self.assertTrue(NoBranchingScheme().is_branch("/"))
94 def test_is_branch_dir_slash(self):
95 self.assertFalse(NoBranchingScheme().is_branch("/foo"))
97 def test_is_branch_dir_slash_nested(self):
98 self.assertFalse(NoBranchingScheme().is_branch("/foo/foo"))
100 def test_is_branch_dir(self):
101 self.assertFalse(NoBranchingScheme().is_branch("foo/bar"))
103 def test_is_branch_dir_doubleslash(self):
104 self.assertFalse(NoBranchingScheme().is_branch("//foo/bar"))
106 def test_is_tag_empty(self):
107 self.assertFalse(NoBranchingScheme().is_tag(""))
109 def test_is_tag_slash(self):
110 self.assertFalse(NoBranchingScheme().is_tag("/"))
112 def test_unprefix(self):
113 self.assertEqual(NoBranchingScheme().unprefix(""), ("", ""))
115 def test_unprefix_slash(self):
116 self.assertEqual(NoBranchingScheme().unprefix("/"), ("", ""))
118 def test_unprefix_nested(self):
119 self.assertEqual(NoBranchingScheme().unprefix("foo/foo"), ("", "foo/foo"))
121 def test_unprefix_slash_nested(self):
122 self.assertEqual(NoBranchingScheme().unprefix("/foo/foo"), ("", "foo/foo"))
124 def test_is_branch_parent_root(self):
125 self.assertFalse(NoBranchingScheme().is_branch_parent(""))
127 def test_is_branch_parent_other(self):
128 self.assertFalse(NoBranchingScheme().is_branch_parent("trunk/foo"))
130 def test_is_tag_parent_root(self):
131 self.assertFalse(NoBranchingScheme().is_tag_parent(""))
133 def test_is_tag_parent_other(self):
134 self.assertFalse(NoBranchingScheme().is_tag_parent("trunk/foo"))
137 class ListScheme(TestCase):
139 self.scheme = ListBranchingScheme(["foo", "bar/bloe"])
141 def test_is_tag_empty(self):
142 self.assertFalse(self.scheme.is_tag(""))
144 def test_is_tag_sub(self):
145 self.assertFalse(self.scheme.is_tag("foo"))
147 def test_is_tag_tag(self):
148 self.assertFalse(self.scheme.is_tag("tags/foo"))
150 def test_is_branch_empty(self):
151 self.assertFalse(self.scheme.is_branch(""))
153 def test_is_branch_slash(self):
154 self.assertFalse(self.scheme.is_branch("/"))
156 def test_is_branch_slashsub(self):
157 self.assertTrue(self.scheme.is_branch("/foo"))
159 def test_is_branch_sub(self):
160 self.assertTrue(self.scheme.is_branch("foo"))
162 def test_is_branch_sub_sub_slash(self):
163 self.assertFalse(self.scheme.is_branch("/foo/foo"))
165 def test_is_branch_sub_sub(self):
166 self.assertFalse(self.scheme.is_branch("foo/bar"))
168 def test_is_branch_unknown(self):
169 self.assertFalse(self.scheme.is_branch("foobla"))
171 def test_is_branch_doubleslash(self):
172 self.assertTrue(self.scheme.is_branch("//foo/"))
174 def test_is_branch_nested(self):
175 self.assertTrue(self.scheme.is_branch("bar/bloe"))
177 def test_unprefix_notbranch_empty(self):
178 self.assertRaises(NotBranchError, self.scheme.unprefix, "")
180 def test_unprefix_notbranch_slash(self):
181 self.assertRaises(NotBranchError, self.scheme.unprefix, "/")
183 def test_unprefix_notbranch_unknown(self):
184 self.assertRaises(NotBranchError, self.scheme.unprefix, "blie/bloe/bla")
186 def test_unprefix_branch_slash(self):
187 self.assertEqual(self.scheme.unprefix("/foo"), ("foo", ""))
189 def test_unprefix_branch(self):
190 self.assertEqual(self.scheme.unprefix("foo"), ("foo", ""))
192 def test_unprefix_nested_slash(self):
193 self.assertEqual(self.scheme.unprefix("/foo/foo"), ("foo", "foo"))
195 def test_unprefix_nested(self):
196 self.assertEqual(self.scheme.unprefix("foo/bar"), ("foo", "bar"))
198 def test_unprefix_double_nested(self):
199 self.assertEqual(self.scheme.unprefix("foo/bar/bla"), ("foo", "bar/bla"))
201 def test_unprefix_double_slash(self):
202 self.assertEqual(self.scheme.unprefix("//foo/"), ("foo", ""))
204 def test_unprefix_nested_branch(self):
205 self.assertEqual(self.scheme.unprefix("bar/bloe"), ("bar/bloe", ""))
207 class TrunkScheme(TestCase):
208 def test_is_branch_empty(self):
209 self.assertFalse(TrunkBranchingScheme().is_branch(""))
211 def test_is_branch_slash(self):
212 self.assertFalse(TrunkBranchingScheme().is_branch("/"))
214 def test_is_branch_unknown_slash(self):
215 self.assertFalse(TrunkBranchingScheme().is_branch("/foo"))
217 def test_is_branch_unknown(self):
218 self.assertFalse(TrunkBranchingScheme().is_branch("foo"))
220 def test_is_branch_unknown_nested_slash(self):
221 self.assertFalse(TrunkBranchingScheme().is_branch("/foo/foo"))
223 def test_is_branch_unknown_nested(self):
224 self.assertFalse(TrunkBranchingScheme().is_branch("foo/bar"))
226 def test_is_branch_unknown2(self):
227 self.assertFalse(TrunkBranchingScheme().is_branch("foobla"))
229 def test_is_branch_trunk(self):
230 self.assertTrue(TrunkBranchingScheme().is_branch("/trunk/"))
232 def test_is_branch_tag(self):
233 self.assertFalse(TrunkBranchingScheme().is_branch("tags/foo"))
235 def test_is_branch_trunk_slashes(self):
236 self.assertTrue(TrunkBranchingScheme().is_branch("////trunk"))
238 def test_is_branch_branch(self):
239 self.assertTrue(TrunkBranchingScheme().is_branch("/branches/foo"))
241 def test_is_branch_typo(self):
242 self.assertFalse(TrunkBranchingScheme().is_branch("/branche/foo"))
244 def test_is_branch_missing_slash(self):
245 self.assertFalse(TrunkBranchingScheme().is_branch("/branchesfoo"))
247 def test_is_branch_branch_slash(self):
248 self.assertTrue(TrunkBranchingScheme().is_branch("/branches/foo/"))
250 def test_is_branch_trunk_missing_slash(self):
251 self.assertFalse(TrunkBranchingScheme().is_branch("/trunkfoo"))
253 def test_is_branch_trunk_file(self):
254 self.assertFalse(TrunkBranchingScheme().is_branch("/trunk/foo"))
256 def test_is_branch_branches(self):
257 self.assertFalse(TrunkBranchingScheme().is_branch("/branches"))
259 def test_is_tag_empty(self):
260 self.assertFalse(TrunkBranchingScheme().is_tag(""))
262 def test_is_tag_sub(self):
263 self.assertFalse(TrunkBranchingScheme().is_tag("foo"))
265 def test_is_tag_tag(self):
266 self.assertTrue(TrunkBranchingScheme().is_tag("tags/foo"))
268 def test_is_tag_tag_slash(self):
269 self.assertTrue(TrunkBranchingScheme().is_tag("tags/branches/"))
271 def test_is_tag_nested(self):
272 self.assertFalse(TrunkBranchingScheme().is_tag("tags/foo/bla"))
274 def test_is_branch_level(self):
275 scheme = TrunkBranchingScheme(2)
276 self.assertFalse(scheme.is_branch("/trunk/"))
277 self.assertFalse(scheme.is_branch("/foo/trunk"))
278 self.assertTrue(scheme.is_branch("/foo/bar/trunk"))
279 self.assertFalse(scheme.is_branch("/branches/trunk"))
280 self.assertTrue(scheme.is_branch("/bar/branches/trunk"))
282 def test_unprefix_empty(self):
283 self.assertRaises(NotBranchError, TrunkBranchingScheme().unprefix, "")
285 def test_unprefix_topdir(self):
286 self.assertRaises(NotBranchError, TrunkBranchingScheme().unprefix, "branches")
288 def test_unprefix_slash(self):
289 self.assertRaises(NotBranchError, TrunkBranchingScheme().unprefix, "/")
291 def test_unprefix_unknown_sub(self):
292 self.assertRaises(NotBranchError, TrunkBranchingScheme().unprefix, "blie/bloe/bla")
294 def test_unprefix_unknown(self):
295 self.assertRaises(NotBranchError, TrunkBranchingScheme().unprefix, "aa")
297 def test_unprefix_slash_branch(self):
298 self.assertEqual(TrunkBranchingScheme().unprefix("/trunk"), ("trunk", ""))
300 def test_unprefix_nested_branch_sub(self):
301 self.assertEqual(TrunkBranchingScheme().unprefix("branches/ver1/foo"), ("branches/ver1", "foo"))
303 def test_unprefix_nested_tag_sub(self):
304 self.assertEqual(TrunkBranchingScheme().unprefix("tags/ver1"), ("tags/ver1", ""))
306 def test_unprefix_doubleslash_branch(self):
307 self.assertEqual(TrunkBranchingScheme().unprefix("//trunk/foo"), ("trunk", "foo"))
309 def test_unprefix_slash_tag(self):
310 self.assertEqual(TrunkBranchingScheme().unprefix("/tags/ver2/foo/bar"), ("tags/ver2", "foo/bar"))
312 def test_unprefix_level(self):
313 self.assertRaises(NotBranchError, TrunkBranchingScheme(1).unprefix, "trunk")
315 def test_unprefix_level_wrong_level(self):
316 self.assertRaises(NotBranchError, TrunkBranchingScheme(1).unprefix, "/branches/foo")
318 def test_unprefix_level_wrong_level_nested(self):
319 self.assertRaises(NotBranchError, TrunkBranchingScheme(1).unprefix, "branches/ver1/foo")
321 def test_unprefix_level_correct_branch(self):
322 self.assertEqual(TrunkBranchingScheme(1).unprefix("/foo/trunk"), ("foo/trunk", ""))
324 def test_unprefix_level_correct_nested(self):
325 self.assertEqual(TrunkBranchingScheme(1).unprefix("data/tags/ver1"), ("data/tags/ver1", ""))
327 def test_guess_trunk_zero(self):
328 scheme = BranchingScheme.guess_scheme("trunk")
329 self.assertIsInstance(scheme, TrunkBranchingScheme)
330 self.assertEqual(0, scheme.level)
332 def test_guess_trunk_branch_sub(self):
333 scheme = BranchingScheme.guess_scheme("branches/foo/bar")
334 self.assertIsInstance(scheme, TrunkBranchingScheme)
335 self.assertEqual(0, scheme.level)
337 def test_guess_trunk_level(self):
338 scheme = BranchingScheme.guess_scheme("test/branches/foo/bar")
339 self.assertIsInstance(scheme, TrunkBranchingScheme)
340 self.assertEqual(1, scheme.level)
342 def test_guess_trunk_level_sub(self):
343 scheme = BranchingScheme.guess_scheme("test/bar/branches/foo/bar")
344 self.assertIsInstance(scheme, TrunkBranchingScheme)
345 self.assertEqual(2, scheme.level)
347 def test_guess_level_detection(self):
348 scheme = BranchingScheme.guess_scheme("branches/trunk")
349 self.assertIsInstance(scheme, TrunkBranchingScheme)
350 self.assertEqual(0, scheme.level)
353 self.assertEqual("trunk0", TrunkBranchingScheme().__str__())
356 self.assertEqual("trunk1", TrunkBranchingScheme(1).__str__())
358 def test_is_branch_parent_root(self):
359 self.assertTrue(TrunkBranchingScheme().is_branch_parent(""))
361 def test_is_tag_parent_root(self):
362 self.assertFalse(TrunkBranchingScheme().is_tag_parent(""))
364 def test_is_branch_parent_branches(self):
365 self.assertTrue(TrunkBranchingScheme().is_branch_parent("branches"))
367 def test_is_tagparent_branches(self):
368 self.assertFalse(TrunkBranchingScheme().is_tag_parent("branches"))
370 def test_is_tagparent_tags(self):
371 self.assertTrue(TrunkBranchingScheme().is_tag_parent("tags"))
373 def test_is_branch_parent_tags(self):
374 self.assertFalse(TrunkBranchingScheme().is_branch_parent("tags"))
376 def test_is_branch_parent_trunk(self):
377 self.assertFalse(TrunkBranchingScheme().is_branch_parent("trunk"))
379 def test_is_branch_parent_level(self):
380 self.assertTrue(TrunkBranchingScheme(1).is_branch_parent("anything"))
382 def test_is_tag_parent_level(self):
383 self.assertFalse(TrunkBranchingScheme(1).is_tag_parent("anything"))
385 def test_is_branch_parent_level_root(self):
386 self.assertTrue(TrunkBranchingScheme(1).is_branch_parent(""))
388 def test_is_branch_parent_level_strange(self):
389 self.assertFalse(TrunkBranchingScheme(1).is_branch_parent("trunk/foo"))
391 def test_is_branch_parent_level_inside(self):
392 self.assertFalse(TrunkBranchingScheme(1).is_branch_parent("foo/trunk/foo"))
394 def test_is_branch_parent_level_branches(self):
395 self.assertTrue(TrunkBranchingScheme(1).is_branch_parent("anything/branches"))
397 def test_is_tag_parent_level_tags(self):
398 self.assertTrue(TrunkBranchingScheme(1).is_tag_parent("anything/tags"))
400 def test_is_branch_parent_other(self):
401 self.assertFalse(TrunkBranchingScheme().is_branch_parent("trunk/foo"))