~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_inv.py

Rather use assertRaises in test_changes_from_with_require_versioned

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006, 2007 Canonical Ltd
 
1
# Copyright (C) 2005, 2006 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
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
 
 
18
17
from bzrlib import errors, inventory, osutils
19
18
from bzrlib.inventory import (Inventory, ROOT_ID, InventoryFile,
20
19
    InventoryDirectory, InventoryEntry, TreeReference)
 
20
from bzrlib.osutils import (pathjoin, is_inside_any, 
 
21
    is_inside_or_parent_of_any)
21
22
from bzrlib.tests import TestCase
22
23
 
23
24
 
 
25
class TestInventory(TestCase):
 
26
 
 
27
    def test_add_path(self):
 
28
 
 
29
        inv = Inventory(root_id=None)
 
30
        self.assertIs(None, inv.root)
 
31
        ie = inv.add_path("", "directory", "my-root")
 
32
        self.assertEqual("my-root", ie.file_id)
 
33
        self.assertIs(ie, inv.root)
 
34
 
 
35
    def test_is_within(self):
 
36
 
 
37
        SRC_FOO_C = pathjoin('src', 'foo.c')
 
38
        for dirs, fn in [(['src', 'doc'], SRC_FOO_C),
 
39
                         (['src'], SRC_FOO_C),
 
40
                         (['src'], 'src'),
 
41
                         ]:
 
42
            self.assert_(is_inside_any(dirs, fn))
 
43
            
 
44
        for dirs, fn in [(['src'], 'srccontrol'),
 
45
                         (['src'], 'srccontrol/foo')]:
 
46
            self.assertFalse(is_inside_any(dirs, fn))
 
47
 
 
48
    def test_is_within_or_parent(self):
 
49
        for dirs, fn in [(['src', 'doc'], 'src/foo.c'),
 
50
                         (['src'], 'src/foo.c'),
 
51
                         (['src/bar.c'], 'src'),
 
52
                         (['src/bar.c', 'bla/foo.c'], 'src'),
 
53
                         (['src'], 'src'),
 
54
                         ]:
 
55
            self.assert_(is_inside_or_parent_of_any(dirs, fn))
 
56
            
 
57
        for dirs, fn in [(['src'], 'srccontrol'),
 
58
                         (['srccontrol/foo.c'], 'src'),
 
59
                         (['src'], 'srccontrol/foo')]:
 
60
            self.assertFalse(is_inside_or_parent_of_any(dirs, fn))
 
61
 
 
62
    def test_ids(self):
 
63
        """Test detection of files within selected directories."""
 
64
        inv = Inventory()
 
65
        
 
66
        for args in [('src', 'directory', 'src-id'), 
 
67
                     ('doc', 'directory', 'doc-id'), 
 
68
                     ('src/hello.c', 'file'),
 
69
                     ('src/bye.c', 'file', 'bye-id'),
 
70
                     ('Makefile', 'file')]:
 
71
            inv.add_path(*args)
 
72
            
 
73
        self.assertEqual(inv.path2id('src'), 'src-id')
 
74
        self.assertEqual(inv.path2id('src/bye.c'), 'bye-id')
 
75
        
 
76
        self.assert_('src-id' in inv)
 
77
 
 
78
    def test_non_directory_children(self):
 
79
        """Test path2id when a parent directory has no children"""
 
80
        inv = inventory.Inventory('tree_root')
 
81
        inv.add(inventory.InventoryFile('file-id','file', 
 
82
                                        parent_id='tree_root'))
 
83
        inv.add(inventory.InventoryLink('link-id','link', 
 
84
                                        parent_id='tree_root'))
 
85
        self.assertIs(None, inv.path2id('file/subfile'))
 
86
        self.assertIs(None, inv.path2id('link/subfile'))
 
87
 
 
88
    def test_iter_entries(self):
 
89
        inv = Inventory()
 
90
        
 
91
        for args in [('src', 'directory', 'src-id'), 
 
92
                     ('doc', 'directory', 'doc-id'), 
 
93
                     ('src/hello.c', 'file', 'hello-id'),
 
94
                     ('src/bye.c', 'file', 'bye-id'),
 
95
                     ('Makefile', 'file', 'makefile-id')]:
 
96
            inv.add_path(*args)
 
97
 
 
98
        self.assertEqual([
 
99
            ('', ROOT_ID),
 
100
            ('Makefile', 'makefile-id'),
 
101
            ('doc', 'doc-id'),
 
102
            ('src', 'src-id'),
 
103
            ('src/bye.c', 'bye-id'),
 
104
            ('src/hello.c', 'hello-id'),
 
105
            ], [(path, ie.file_id) for path, ie in inv.iter_entries()])
 
106
            
 
107
    def test_iter_entries_by_dir(self):
 
108
        inv = Inventory()
 
109
        
 
110
        for args in [('src', 'directory', 'src-id'), 
 
111
                     ('doc', 'directory', 'doc-id'), 
 
112
                     ('src/hello.c', 'file', 'hello-id'),
 
113
                     ('src/bye.c', 'file', 'bye-id'),
 
114
                     ('zz', 'file', 'zz-id'),
 
115
                     ('src/sub/', 'directory', 'sub-id'),
 
116
                     ('src/zz.c', 'file', 'zzc-id'),
 
117
                     ('src/sub/a', 'file', 'a-id'),
 
118
                     ('Makefile', 'file', 'makefile-id')]:
 
119
            inv.add_path(*args)
 
120
 
 
121
        self.assertEqual([
 
122
            ('', ROOT_ID),
 
123
            ('Makefile', 'makefile-id'),
 
124
            ('doc', 'doc-id'),
 
125
            ('src', 'src-id'),
 
126
            ('zz', 'zz-id'),
 
127
            ('src/bye.c', 'bye-id'),
 
128
            ('src/hello.c', 'hello-id'),
 
129
            ('src/sub', 'sub-id'),
 
130
            ('src/zz.c', 'zzc-id'),
 
131
            ('src/sub/a', 'a-id'),
 
132
            ], [(path, ie.file_id) for path, ie in inv.iter_entries_by_dir()])
 
133
            
 
134
        self.assertEqual([
 
135
            ('', ROOT_ID),
 
136
            ('Makefile', 'makefile-id'),
 
137
            ('doc', 'doc-id'),
 
138
            ('src', 'src-id'),
 
139
            ('zz', 'zz-id'),
 
140
            ('src/bye.c', 'bye-id'),
 
141
            ('src/hello.c', 'hello-id'),
 
142
            ('src/sub', 'sub-id'),
 
143
            ('src/zz.c', 'zzc-id'),
 
144
            ('src/sub/a', 'a-id'),
 
145
            ], [(path, ie.file_id) for path, ie in inv.iter_entries_by_dir(
 
146
                specific_file_ids=('a-id', 'zzc-id', 'doc-id', ROOT_ID,
 
147
                'hello-id', 'bye-id', 'zz-id', 'src-id', 'makefile-id', 
 
148
                'sub-id'))])
 
149
 
 
150
        self.assertEqual([
 
151
            ('Makefile', 'makefile-id'),
 
152
            ('doc', 'doc-id'),
 
153
            ('zz', 'zz-id'),
 
154
            ('src/bye.c', 'bye-id'),
 
155
            ('src/hello.c', 'hello-id'),
 
156
            ('src/zz.c', 'zzc-id'),
 
157
            ('src/sub/a', 'a-id'),
 
158
            ], [(path, ie.file_id) for path, ie in inv.iter_entries_by_dir(
 
159
                specific_file_ids=('a-id', 'zzc-id', 'doc-id',
 
160
                'hello-id', 'bye-id', 'zz-id', 'makefile-id'))])
 
161
 
 
162
        self.assertEqual([
 
163
            ('Makefile', 'makefile-id'),
 
164
            ('src/bye.c', 'bye-id'),
 
165
            ], [(path, ie.file_id) for path, ie in inv.iter_entries_by_dir(
 
166
                specific_file_ids=('bye-id', 'makefile-id'))])
 
167
 
 
168
        self.assertEqual([
 
169
            ('Makefile', 'makefile-id'),
 
170
            ('src/bye.c', 'bye-id'),
 
171
            ], [(path, ie.file_id) for path, ie in inv.iter_entries_by_dir(
 
172
                specific_file_ids=('bye-id', 'makefile-id'))])
 
173
 
 
174
        self.assertEqual([
 
175
            ('src/bye.c', 'bye-id'),
 
176
            ], [(path, ie.file_id) for path, ie in inv.iter_entries_by_dir(
 
177
                specific_file_ids=('bye-id',))])
 
178
 
 
179
    def test_add_recursive(self):
 
180
        parent = InventoryDirectory('src-id', 'src', ROOT_ID)
 
181
        child = InventoryFile('hello-id', 'hello.c', 'src-id')
 
182
        parent.children[child.file_id] = child
 
183
        inv = Inventory()
 
184
        inv.add(parent)
 
185
        self.assertEqual('src/hello.c', inv.id2path('hello-id'))
 
186
 
 
187
 
24
188
class TestInventoryEntry(TestCase):
25
189
 
26
190
    def test_file_kind_character(self):
166
330
    def assertChangeDescription(self, expected_change, old_ie, new_ie):
167
331
        change = InventoryEntry.describe_change(old_ie, new_ie)
168
332
        self.assertEqual(expected_change, change)
 
333
 
 
334
 
 
335
class TestIsRoot(TestCase):
 
336
    """Ensure our root-checking code is accurate."""
 
337
 
 
338
    def test_is_root(self):
 
339
        inv = Inventory('TREE_ROOT')
 
340
        self.assertTrue(inv.is_root('TREE_ROOT'))
 
341
        self.assertFalse(inv.is_root('booga'))
 
342
        inv.root.file_id = 'booga'
 
343
        self.assertFalse(inv.is_root('TREE_ROOT'))
 
344
        self.assertTrue(inv.is_root('booga'))
 
345
        # works properly even if no root is set
 
346
        inv.root = None
 
347
        self.assertFalse(inv.is_root('TREE_ROOT'))
 
348
        self.assertFalse(inv.is_root('booga'))
 
349
 
 
350
 
 
351
class TestTreeReference(TestCase):
 
352
    
 
353
    def test_create(self):
 
354
        inv = Inventory('tree-root-123')
 
355
        inv.add(TreeReference('nested-id', 'nested', parent_id='tree-root-123',
 
356
                              revision='rev', reference_revision='rev2'))
 
357
 
 
358
 
 
359
class TestEncoding(TestCase):
 
360
 
 
361
    def test_error_encoding(self):
 
362
        inv = Inventory('tree-root')
 
363
        inv.add(InventoryFile('a-id', u'\u1234', 'tree-root'))
 
364
        try:
 
365
            inv.add(InventoryFile('b-id', u'\u1234', 'tree-root'))
 
366
        except errors.BzrError, e:
 
367
            self.assertContainsRe(str(e), u'\u1234'.encode('utf-8'))
 
368
        else:
 
369
            self.fail('BzrError not raised')