~bzr-pqm/bzr/bzr.dev

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