/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/per_tree/test_inv.py

  • Committer: Martin Pool
  • Date: 2009-12-14 06:06:59 UTC
  • mfrom: (4889 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4891.
  • Revision ID: mbp@sourcefrog.net-20091214060659-1ucv8hpnky0cbnaj
merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
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
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
"""Tests for interface conformance of inventories of trees."""
18
18
 
20
20
from cStringIO import StringIO
21
21
import os
22
22
 
23
 
from bzrlib.diff import internal_diff
 
23
from bzrlib import (
 
24
    tests,
 
25
    )
 
26
from bzrlib.tests import per_tree
24
27
from bzrlib.mutabletree import MutableTree
25
 
from bzrlib.osutils import has_symlinks
26
28
from bzrlib.tests import SymlinkFeature, TestSkipped
27
 
from bzrlib.tests.tree_implementations import TestCaseWithTree
28
29
from bzrlib.transform import _PreviewTree
29
30
from bzrlib.uncommit import uncommit
30
31
 
33
34
    return tree.iter_entries_by_dir([file_id]).next()[1]
34
35
 
35
36
 
36
 
class TestPreviousHeads(TestCaseWithTree):
 
37
class TestPreviousHeads(per_tree.TestCaseWithTree):
37
38
 
38
39
    def setUp(self):
39
40
        # we want several inventories, that respectively
64
65
        self.tree.lock_read()
65
66
        self.addCleanup(self.tree.unlock)
66
67
        self.file_active = get_entry(self.tree, 'fileid')
67
 
        self.weave = self.branch.repository.weave_store.get_weave('fileid',
68
 
            self.branch.repository.get_transaction())
69
68
 
70
69
    # TODO: test two inventories with the same file revision
71
70
 
72
71
 
73
 
class TestInventory(TestCaseWithTree):
74
 
 
75
 
    def _set_up(self):
 
72
class TestInventoryWithSymlinks(per_tree.TestCaseWithTree):
 
73
 
 
74
    _test_needs_features = [tests.SymlinkFeature]
 
75
 
 
76
    def setUp(self):
 
77
        per_tree.TestCaseWithTree.setUp(self)
76
78
        self.tree = self.get_tree_with_subdirs_and_all_content_types()
77
79
        self.tree.lock_read()
78
80
        self.addCleanup(self.tree.unlock)
79
81
 
80
82
    def test_symlink_target(self):
81
 
        self.requireFeature(SymlinkFeature)
82
 
        self._set_up()
83
83
        if isinstance(self.tree, (MutableTree, _PreviewTree)):
84
84
            raise TestSkipped(
85
85
                'symlinks not accurately represented in working trees and'
88
88
        self.assertEqual(entry.symlink_target, 'link-target')
89
89
 
90
90
    def test_symlink_target_tree(self):
91
 
        self.requireFeature(SymlinkFeature)
92
 
        self._set_up()
93
91
        self.assertEqual('link-target',
94
92
                         self.tree.get_symlink_target('symlink'))
95
93
 
96
94
    def test_kind_symlink(self):
97
 
        self.requireFeature(SymlinkFeature)
98
 
        self._set_up()
99
95
        self.assertEqual('symlink', self.tree.kind('symlink'))
100
96
        self.assertIs(None, self.tree.get_file_size('symlink'))
101
97
 
102
98
    def test_symlink(self):
103
 
        self.requireFeature(SymlinkFeature)
104
 
        self._set_up()
105
99
        entry = get_entry(self.tree, self.tree.path2id('symlink'))
106
100
        self.assertEqual(entry.kind, 'symlink')
107
101
        self.assertEqual(None, entry.text_size)
 
102
 
 
103
 
 
104
class TestInventory(per_tree.TestCaseWithTree):
 
105
 
 
106
    def test_paths2ids_recursive(self):
 
107
        work_tree = self.make_branch_and_tree('tree')
 
108
        self.build_tree(['tree/dir/', 'tree/dir/file'])
 
109
        work_tree.add(['dir', 'dir/file'], ['dir-id', 'file-id'])
 
110
        tree = self._convert_tree(work_tree)
 
111
        tree.lock_read()
 
112
        self.addCleanup(tree.unlock)
 
113
        self.assertEqual(set(['dir-id', 'file-id']), tree.paths2ids(['dir']))
 
114
 
 
115
    def test_paths2ids_forget_old(self):
 
116
        work_tree = self.make_branch_and_tree('tree')
 
117
        self.build_tree(['tree/file'])
 
118
        work_tree.add('file', 'first-id')
 
119
        work_tree.commit('commit old state')
 
120
        work_tree.remove('file')
 
121
        tree = self._convert_tree(work_tree)
 
122
        tree.lock_read()
 
123
        self.addCleanup(tree.unlock)
 
124
        self.assertEqual(set([]), tree.paths2ids(['file'],
 
125
                         require_versioned=False))
 
126
 
 
127
    def _make_canonical_test_tree(self, commit=True):
 
128
        # make a tree used by all the 'canonical' tests below.
 
129
        work_tree = self.make_branch_and_tree('tree')
 
130
        self.build_tree(['tree/dir/', 'tree/dir/file'])
 
131
        work_tree.add(['dir', 'dir/file'])
 
132
        if commit:
 
133
            work_tree.commit('commit 1')
 
134
        return work_tree
 
135
 
 
136
    def test_canonical_path(self):
 
137
        work_tree = self._make_canonical_test_tree()
 
138
        self.assertEqual('dir/file',
 
139
                         work_tree.get_canonical_inventory_path('Dir/File'))
 
140
 
 
141
    def test_canonical_path_before_commit(self):
 
142
        work_tree = self._make_canonical_test_tree(False)
 
143
        # note: not committed.
 
144
        self.assertEqual('dir/file',
 
145
                         work_tree.get_canonical_inventory_path('Dir/File'))
 
146
 
 
147
    def test_canonical_path_dir(self):
 
148
        # check it works when asked for just the directory portion.
 
149
        work_tree = self._make_canonical_test_tree()
 
150
        self.assertEqual('dir', work_tree.get_canonical_inventory_path('Dir'))
 
151
 
 
152
    def test_canonical_path_root(self):
 
153
        work_tree = self._make_canonical_test_tree()
 
154
        self.assertEqual('', work_tree.get_canonical_inventory_path(''))
 
155
        self.assertEqual('/', work_tree.get_canonical_inventory_path('/'))
 
156
 
 
157
    def test_canonical_path_invalid_all(self):
 
158
        work_tree = self._make_canonical_test_tree()
 
159
        self.assertEqual('foo/bar',
 
160
                         work_tree.get_canonical_inventory_path('foo/bar'))
 
161
 
 
162
    def test_canonical_invalid_child(self):
 
163
        work_tree = self._make_canonical_test_tree()
 
164
        self.assertEqual('dir/None',
 
165
                         work_tree.get_canonical_inventory_path('Dir/None'))