1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
# Copyright (C) 2006 Canonical Ltd
# Authors: Robert Collins <robert.collins@canonical.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
"""Tests for the TreeBuilder helper class."""
from bzrlib import errors, tests
from bzrlib.memorytree import MemoryTree
from bzrlib.tests import TestCaseWithTransport
from bzrlib.treebuilder import TreeBuilder
class FakeTree(object):
"""A pretend tree to test the calls made by TreeBuilder."""
def __init__(self):
self._calls = []
def lock_tree_write(self):
self._calls.append("lock_tree_write")
def unlock(self):
self._calls.append("unlock")
class TestFakeTree(TestCaseWithTransport):
def testFakeTree(self):
"""Check that FakeTree works as required for the TreeBuilder tests."""
tree = FakeTree()
self.assertEqual([], tree._calls)
tree.lock_tree_write()
self.assertEqual(["lock_tree_write"], tree._calls)
tree.unlock()
self.assertEqual(["lock_tree_write", "unlock"], tree._calls)
class TestTreeBuilderMemoryTree(tests.TestCaseWithMemoryTransport):
def test_create(self):
builder = TreeBuilder()
def test_start_tree_locks_write(self):
builder = TreeBuilder()
tree = FakeTree()
builder.start_tree(tree)
self.assertEqual(["lock_tree_write"], tree._calls)
def test_start_tree_when_started_fails(self):
builder = TreeBuilder()
tree = FakeTree()
builder.start_tree(tree)
self.assertRaises(errors.AlreadyBuilding, builder.start_tree, tree)
def test_finish_tree_not_started_errors(self):
builder = TreeBuilder()
self.assertRaises(errors.NotBuilding, builder.finish_tree)
def test_finish_tree_unlocks(self):
builder = TreeBuilder()
tree = FakeTree()
builder.start_tree(tree)
builder.finish_tree()
self.assertEqual(["lock_tree_write", "unlock"], tree._calls)
def test_build_tree_not_started_errors(self):
builder = TreeBuilder()
self.assertRaises(errors.NotBuilding, builder.build, "foo")
def test_build_tree(self):
"""Test building works using a MemoryTree."""
branch = self.make_branch('branch')
tree = MemoryTree.create_on_branch(branch)
builder = TreeBuilder()
builder.start_tree(tree)
builder.build(['foo', "bar/", "bar/file"])
self.assertEqual('contents of foo\n',
tree.get_file(tree.path2id('foo')).read())
self.assertEqual('contents of bar/file\n',
tree.get_file(tree.path2id('bar/file')).read())
builder.finish_tree()
|