/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/test_delta.py

[merge] bzr.dev 2294

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
import os
 
18
from StringIO import StringIO
 
19
 
17
20
from bzrlib import (
18
 
    delta,
 
21
    delta as _mod_delta,
19
22
    inventory,
20
23
    tests,
21
24
    )
45
48
        if old_path is not None:
46
49
            inv.add(inventory.InventoryFile(file_id, old_path,
47
50
                                            inv.root.file_id))
48
 
        reporter = delta.ChangeReporter(inv, result_line)
 
51
        reporter = _mod_delta.ChangeReporter(inv, result_line)
49
52
        reporter.report(file_id, path, versioned_change, renamed, modified,
50
53
                         exe_change, kind)
51
54
        self.assertEqualDiff(expected, result[0])
53
56
    def test_rename(self):
54
57
        self.assertReport('R   old => path', renamed=True, old_path='old')
55
58
        self.assertReport('    path')
 
59
        self.assertReport('RN  old => path', renamed=True, old_path='old',
 
60
                          modified='created', kind=(None, 'file'))
56
61
 
57
62
    def test_kind(self):
58
63
        self.assertReport(' K  path => path/', modified='kind changed',
67
72
                          kind=(None, 'directory'))
68
73
        self.assertReport('+   path/', versioned_change='added',
69
74
                          modified='unchanged', kind=(None, 'directory'))
 
75
        self.assertReport('+   path', versioned_change='added',
 
76
                          modified='unchanged', kind=(None, None))
70
77
        self.assertReport('+N  path/', versioned_change='added',
71
78
                          modified='created', kind=(None, 'directory'))
72
79
        self.assertReport('+M  path/', versioned_change='added',
100
107
                           modified='unchanged',
101
108
                           exe_change=False):
102
109
        reporter = InstrumentedReporter()
103
 
        delta.report_changes([(file_id, path, content_change, versioned,
104
 
                               parent_id, name, kind, executable)], reporter)
 
110
        _mod_delta.report_changes([(file_id, path, content_change, versioned,
 
111
            parent_id, name, kind, executable)], reporter)
105
112
        output = reporter.calls[0]
106
113
        self.assertEqual(file_id, output[0])
107
114
        self.assertEqual(path, output[1])
137
144
        self.assertChangesEqual(exe_change=False, modified='kind changed',
138
145
                                executable=(False, True),
139
146
                                kind=('directory', 'file'))
 
147
        self.assertChangesEqual(parent_id=('pid', None))
140
148
 
141
149
        # Now make sure they all work together
142
150
        self.assertChangesEqual(versioned_change='removed',
150
158
                                exe_change=True, versioned=(True, False),
151
159
                                content_change=True, name=('old', 'new'),
152
160
                                executable=(False, True))
 
161
 
 
162
 
 
163
class TestChangesFrom (tests.TestCaseWithTransport):
 
164
 
 
165
    def show_string(self, delta, *args,  **kwargs):
 
166
        to_file = StringIO()
 
167
        delta.show(to_file, *args, **kwargs)
 
168
        return to_file.getvalue()
 
169
 
 
170
    def test_kind_change(self):
 
171
        """Doing a status when a file has changed kind should work"""
 
172
        tree = self.make_branch_and_tree('.')
 
173
        self.build_tree(['filename'])
 
174
        tree.add('filename', 'file-id')
 
175
        tree.commit('added filename')
 
176
        os.unlink('filename')
 
177
        self.build_tree(['filename/'])
 
178
        delta = tree.changes_from(tree.basis_tree())
 
179
        self.assertEqual([('filename', 'file-id', 'file', 'directory')],
 
180
                         delta.kind_changed)
 
181
        self.assertEqual([], delta.added)
 
182
        self.assertEqual([], delta.removed)
 
183
        self.assertEqual([], delta.renamed)
 
184
        self.assertEqual([], delta.modified)
 
185
        self.assertEqual([], delta.unchanged)
 
186
        self.assertTrue(delta.has_changed())
 
187
        self.assertTrue(delta.touches_file_id('file-id'))
 
188
        self.assertEqual('kind changed:\n  filename (file => directory)\n',
 
189
                         self.show_string(delta))
 
190
        other_delta = _mod_delta.TreeDelta()
 
191
        self.assertNotEqual(other_delta, delta)
 
192
        other_delta.kind_changed = [('filename', 'file-id', 'file',
 
193
                                     'symlink')]
 
194
        self.assertNotEqual(other_delta, delta)
 
195
        other_delta.kind_changed = [('filename', 'file-id', 'file',
 
196
                                     'directory')]
 
197
        self.assertEqual(other_delta, delta)
 
198
        self.assertEqualDiff("TreeDelta(added=[], removed=[], renamed=[],"
 
199
            " kind_changed=[(u'filename', 'file-id', 'file', 'directory')],"
 
200
            " modified=[], unchanged=[])", repr(delta))
 
201
        self.assertEqual('K  filename (file => directory) file-id\n',
 
202
                         self.show_string(delta, show_ids=True,
 
203
                         short_status=True))
 
204
 
 
205
        tree.rename_one('filename', 'dirname')
 
206
        delta = tree.changes_from(tree.basis_tree())
 
207
        self.assertEqual([], delta.kind_changed)
 
208
        # This loses the fact that kind changed, remembering it as a
 
209
        # modification
 
210
        self.assertEqual([('filename', 'dirname', 'file-id', 'directory',
 
211
                           True, False)], delta.renamed)
 
212
        self.assertTrue(delta.has_changed())
 
213
        self.assertTrue(delta.touches_file_id('file-id'))