/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: Andrew Bennetts
  • Date: 2010-04-13 04:33:55 UTC
  • mfrom: (5147 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5149.
  • Revision ID: andrew.bennetts@canonical.com-20100413043355-lg3id0uwtju0k3zs
MergeĀ lp:bzr.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2007, 2008 Canonical Ltd
 
1
# Copyright (C) 2007-2010 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
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 (
 
27
    features,
 
28
    per_tree,
 
29
    )
24
30
from bzrlib.mutabletree import MutableTree
25
 
from bzrlib.osutils import has_symlinks
26
31
from bzrlib.tests import SymlinkFeature, TestSkipped
27
 
from bzrlib.tests.tree_implementations import TestCaseWithTree
28
32
from bzrlib.transform import _PreviewTree
29
33
from bzrlib.uncommit import uncommit
30
34
 
33
37
    return tree.iter_entries_by_dir([file_id]).next()[1]
34
38
 
35
39
 
36
 
class TestPreviousHeads(TestCaseWithTree):
 
40
class TestPreviousHeads(per_tree.TestCaseWithTree):
37
41
 
38
42
    def setUp(self):
39
43
        # we want several inventories, that respectively
68
72
    # TODO: test two inventories with the same file revision
69
73
 
70
74
 
71
 
class TestInventory(TestCaseWithTree):
72
 
 
73
 
    def _set_up(self):
 
75
class TestInventoryWithSymlinks(per_tree.TestCaseWithTree):
 
76
 
 
77
    _test_needs_features = [tests.SymlinkFeature]
 
78
 
 
79
    def setUp(self):
 
80
        per_tree.TestCaseWithTree.setUp(self)
74
81
        self.tree = self.get_tree_with_subdirs_and_all_content_types()
75
82
        self.tree.lock_read()
76
83
        self.addCleanup(self.tree.unlock)
77
84
 
78
85
    def test_symlink_target(self):
79
 
        self.requireFeature(SymlinkFeature)
80
 
        self._set_up()
81
86
        if isinstance(self.tree, (MutableTree, _PreviewTree)):
82
87
            raise TestSkipped(
83
88
                'symlinks not accurately represented in working trees and'
86
91
        self.assertEqual(entry.symlink_target, 'link-target')
87
92
 
88
93
    def test_symlink_target_tree(self):
89
 
        self.requireFeature(SymlinkFeature)
90
 
        self._set_up()
91
94
        self.assertEqual('link-target',
92
95
                         self.tree.get_symlink_target('symlink'))
93
96
 
94
97
    def test_kind_symlink(self):
95
 
        self.requireFeature(SymlinkFeature)
96
 
        self._set_up()
97
98
        self.assertEqual('symlink', self.tree.kind('symlink'))
98
99
        self.assertIs(None, self.tree.get_file_size('symlink'))
99
100
 
100
101
    def test_symlink(self):
101
 
        self.requireFeature(SymlinkFeature)
102
 
        self._set_up()
103
102
        entry = get_entry(self.tree, self.tree.path2id('symlink'))
104
103
        self.assertEqual(entry.kind, 'symlink')
105
104
        self.assertEqual(None, entry.text_size)
106
105
 
 
106
 
 
107
class TestInventory(per_tree.TestCaseWithTree):
 
108
 
107
109
    def test_paths2ids_recursive(self):
108
110
        work_tree = self.make_branch_and_tree('tree')
109
111
        self.build_tree(['tree/dir/', 'tree/dir/file'])
124
126
        self.addCleanup(tree.unlock)
125
127
        self.assertEqual(set([]), tree.paths2ids(['file'],
126
128
                         require_versioned=False))
 
129
 
 
130
    def _make_canonical_test_tree(self, commit=True):
 
131
        # make a tree used by all the 'canonical' tests below.
 
132
        work_tree = self.make_branch_and_tree('tree')
 
133
        self.build_tree(['tree/dir/', 'tree/dir/file'])
 
134
        work_tree.add(['dir', 'dir/file'])
 
135
        if commit:
 
136
            work_tree.commit('commit 1')
 
137
        # XXX: this isn't actually guaranteed to return the class we want to
 
138
        # test -- mbp 2010-02-12
 
139
        return work_tree
 
140
 
 
141
    def test_canonical_path(self):
 
142
        work_tree = self._make_canonical_test_tree()
 
143
        self.assertEqual('dir/file',
 
144
                         work_tree.get_canonical_inventory_path('Dir/File'))
 
145
 
 
146
    def test_canonical_path_before_commit(self):
 
147
        work_tree = self._make_canonical_test_tree(False)
 
148
        # note: not committed.
 
149
        self.assertEqual('dir/file',
 
150
                         work_tree.get_canonical_inventory_path('Dir/File'))
 
151
 
 
152
    def test_canonical_path_dir(self):
 
153
        # check it works when asked for just the directory portion.
 
154
        work_tree = self._make_canonical_test_tree()
 
155
        self.assertEqual('dir', work_tree.get_canonical_inventory_path('Dir'))
 
156
 
 
157
    def test_canonical_path_root(self):
 
158
        work_tree = self._make_canonical_test_tree()
 
159
        self.assertEqual('', work_tree.get_canonical_inventory_path(''))
 
160
        self.assertEqual('/', work_tree.get_canonical_inventory_path('/'))
 
161
 
 
162
    def test_canonical_path_invalid_all(self):
 
163
        work_tree = self._make_canonical_test_tree()
 
164
        self.assertEqual('foo/bar',
 
165
                         work_tree.get_canonical_inventory_path('foo/bar'))
 
166
 
 
167
    def test_canonical_invalid_child(self):
 
168
        work_tree = self._make_canonical_test_tree()
 
169
        self.assertEqual('dir/None',
 
170
                         work_tree.get_canonical_inventory_path('Dir/None'))
 
171
 
 
172
    def test_canonical_tree_name_mismatch(self):
 
173
        # see <https://bugs.edge.launchpad.net/bzr/+bug/368931>
 
174
        # some of the trees we want to use can only exist on a disk, not in
 
175
        # memory - therefore we can only test this if the filesystem is
 
176
        # case-sensitive.
 
177
        self.requireFeature(tests.case_sensitive_filesystem_feature)
 
178
        work_tree = self.make_branch_and_tree('.')
 
179
        self.build_tree(['test/', 'test/file', 'Test'])
 
180
        work_tree.add(['test/', 'test/file', 'Test'])
 
181
 
 
182
        test_tree = self._convert_tree(work_tree)
 
183
        test_tree.lock_read()
 
184
        self.addCleanup(test_tree.unlock)
 
185
 
 
186
        self.assertEqual(['test', 'test/file', 'Test', 'test/foo', 'Test/foo'],
 
187
            test_tree.get_canonical_inventory_paths(
 
188
                ['test', 'test/file', 'Test', 'test/foo', 'Test/foo']))