/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
2052.3.2 by John Arbash Meinel
Change Copyright .. by Canonical to Copyright ... Canonical
1
# Copyright (C) 2005, 2006 Canonical Ltd
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
2
#
1185.50.44 by John Arbash Meinel
[patch] Robey Pointer: diff -r 1.. should diff against working tree.
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
7
#
1185.50.44 by John Arbash Meinel
[patch] Robey Pointer: diff -r 1.. should diff against working tree.
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
12
#
1185.50.44 by John Arbash Meinel
[patch] Robey Pointer: diff -r 1.. should diff against working tree.
13
# You should have received a copy of the GNU General Public License
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
16
17
18
"""Black-box tests for bzr diff.
19
"""
20
21
import os
1740.2.5 by Aaron Bentley
Merge from bzr.dev
22
import re
1185.50.44 by John Arbash Meinel
[patch] Robey Pointer: diff -r 1.. should diff against working tree.
23
24
import bzrlib
1899.1.2 by John Arbash Meinel
Add a test that we can use an external diff program.
25
from bzrlib import workingtree
1185.50.44 by John Arbash Meinel
[patch] Robey Pointer: diff -r 1.. should diff against working tree.
26
from bzrlib.branch import Branch
1899.1.2 by John Arbash Meinel
Add a test that we can use an external diff program.
27
from bzrlib.tests import TestSkipped
1185.50.44 by John Arbash Meinel
[patch] Robey Pointer: diff -r 1.. should diff against working tree.
28
from bzrlib.tests.blackbox import ExternalBase
29
30
1740.2.5 by Aaron Bentley
Merge from bzr.dev
31
def subst_dates(string):
32
    """Replace date strings with constant values."""
33
    return re.sub(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} [-\+]\d{4}',
34
                  'YYYY-MM-DD HH:MM:SS +ZZZZ', string)
35
36
2172.2.1 by Alexander Belchenko
Remove unnecessary duplication of tests in blackbox/test_diff.py
37
class DiffBase(ExternalBase):
38
    """Base class with common setup method"""
1658.1.9 by Martin Pool
Give an error for bzr diff on an nonexistent file (Malone #3619)
39
1899.1.2 by John Arbash Meinel
Add a test that we can use an external diff program.
40
    def make_example_branch(self):
41
        tree = self.make_branch_and_tree('.')
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
42
        self.build_tree_contents([
2738.1.3 by Daniel Watkins
Fixed whitespace issues.
43
            ('hello', 'foo\n'),
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
44
            ('goodbye', 'baz\n')])
1899.1.2 by John Arbash Meinel
Add a test that we can use an external diff program.
45
        tree.add(['hello'])
46
        tree.commit('setup')
47
        tree.add(['goodbye'])
48
        tree.commit('setup')
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
49
        return tree
1185.50.44 by John Arbash Meinel
[patch] Robey Pointer: diff -r 1.. should diff against working tree.
50
2172.2.1 by Alexander Belchenko
Remove unnecessary duplication of tests in blackbox/test_diff.py
51
52
class TestDiff(DiffBase):
53
1185.50.44 by John Arbash Meinel
[patch] Robey Pointer: diff -r 1.. should diff against working tree.
54
    def test_diff(self):
2738.1.2 by Daniel Watkins
Tests now run on both branches and checkouts.
55
        tree = self.make_example_branch()
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
56
        self.build_tree_contents([('hello', 'hello world!')])
57
        tree.commit(message='fixing hello')
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
58
        output = self.run_bzr('diff -r 2..3', retcode=1)[0]
1185.50.44 by John Arbash Meinel
[patch] Robey Pointer: diff -r 1.. should diff against working tree.
59
        self.assert_('\n+hello world!' in output)
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
60
        output = self.run_bzr('diff -r last:3..last:1',
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
61
                retcode=1)[0]
1185.50.44 by John Arbash Meinel
[patch] Robey Pointer: diff -r 1.. should diff against working tree.
62
        self.assert_('\n+baz' in output)
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
63
        self.build_tree(['moo'])
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
64
        tree.add('moo')
1185.50.44 by John Arbash Meinel
[patch] Robey Pointer: diff -r 1.. should diff against working tree.
65
        os.unlink('moo')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
66
        self.run_bzr('diff')
1185.50.44 by John Arbash Meinel
[patch] Robey Pointer: diff -r 1.. should diff against working tree.
67
1694.2.2 by Martin Pool
Add test for diff --diff-prefix, which was previously untested.
68
    def test_diff_prefix(self):
1694.2.3 by Martin Pool
Add -p0, -p1 options for diff.
69
        """diff --prefix appends to filenames in output"""
70
        self.make_example_branch()
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
71
        self.build_tree_contents([('hello', 'hello world!\n')])
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
72
        out, err = self.run_bzr('diff --prefix old/:new/', retcode=1)
1694.2.3 by Martin Pool
Add -p0, -p1 options for diff.
73
        self.assertEquals(err, '')
1740.2.5 by Aaron Bentley
Merge from bzr.dev
74
        self.assertEqualDiff(subst_dates(out), '''\
1694.2.4 by Martin Pool
When a diff prefix is given, don't show it in === summary lines, only on the diffs themselves.
75
=== modified file 'hello'
1740.2.5 by Aaron Bentley
Merge from bzr.dev
76
--- old/hello\tYYYY-MM-DD HH:MM:SS +ZZZZ
77
+++ new/hello\tYYYY-MM-DD HH:MM:SS +ZZZZ
1694.2.3 by Martin Pool
Add -p0, -p1 options for diff.
78
@@ -1,1 +1,1 @@
79
-foo
80
+hello world!
81
82
''')
83
2324.1.2 by Dmitry Vasiliev
Added test for bzr diff --prefix illegal_value
84
    def test_diff_illegal_prefix_value(self):
85
        # There was an error in error reporting for this option
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
86
        out, err = self.run_bzr('diff --prefix old/', retcode=3)
2324.1.2 by Dmitry Vasiliev
Added test for bzr diff --prefix illegal_value
87
        self.assertContainsRe(err,
88
            '--prefix expects two values separated by a colon')
89
1694.2.3 by Martin Pool
Add -p0, -p1 options for diff.
90
    def test_diff_p1(self):
91
        """diff -p1 produces lkml-style diffs"""
92
        self.make_example_branch()
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
93
        self.build_tree_contents([('hello', 'hello world!\n')])
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
94
        out, err = self.run_bzr('diff -p1', retcode=1)
1694.2.3 by Martin Pool
Add -p0, -p1 options for diff.
95
        self.assertEquals(err, '')
1740.2.5 by Aaron Bentley
Merge from bzr.dev
96
        self.assertEqualDiff(subst_dates(out), '''\
1694.2.4 by Martin Pool
When a diff prefix is given, don't show it in === summary lines, only on the diffs themselves.
97
=== modified file 'hello'
1740.2.5 by Aaron Bentley
Merge from bzr.dev
98
--- old/hello\tYYYY-MM-DD HH:MM:SS +ZZZZ
99
+++ new/hello\tYYYY-MM-DD HH:MM:SS +ZZZZ
1694.2.3 by Martin Pool
Add -p0, -p1 options for diff.
100
@@ -1,1 +1,1 @@
101
-foo
102
+hello world!
103
104
''')
105
106
    def test_diff_p0(self):
107
        """diff -p0 produces diffs with no prefix"""
108
        self.make_example_branch()
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
109
        self.build_tree_contents([('hello', 'hello world!\n')])
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
110
        out, err = self.run_bzr('diff -p0', retcode=1)
1694.2.3 by Martin Pool
Add -p0, -p1 options for diff.
111
        self.assertEquals(err, '')
1740.2.5 by Aaron Bentley
Merge from bzr.dev
112
        self.assertEqualDiff(subst_dates(out), '''\
1694.2.3 by Martin Pool
Add -p0, -p1 options for diff.
113
=== modified file 'hello'
1740.2.5 by Aaron Bentley
Merge from bzr.dev
114
--- hello\tYYYY-MM-DD HH:MM:SS +ZZZZ
115
+++ hello\tYYYY-MM-DD HH:MM:SS +ZZZZ
1694.2.2 by Martin Pool
Add test for diff --diff-prefix, which was previously untested.
116
@@ -1,1 +1,1 @@
117
-foo
118
+hello world!
119
120
''')
121
1658.1.9 by Martin Pool
Give an error for bzr diff on an nonexistent file (Malone #3619)
122
    def test_diff_nonexistent(self):
123
        # Get an error from a file that does not exist at all
124
        # (Malone #3619)
125
        self.make_example_branch()
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
126
        out, err = self.run_bzr('diff does-not-exist', retcode=3)
1658.1.9 by Martin Pool
Give an error for bzr diff on an nonexistent file (Malone #3619)
127
        self.assertContainsRe(err, 'not versioned.*does-not-exist')
128
2197.2.1 by Martin Pool
Refactor cmd_diff
129
    def test_diff_illegal_revision_specifiers(self):
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
130
        out, err = self.run_bzr('diff -r 1..23..123', retcode=3)
2197.2.1 by Martin Pool
Refactor cmd_diff
131
        self.assertContainsRe(err, 'one or two revision specifiers')
132
1658.1.10 by Martin Pool
diff on unversiond files should give an error (Malone #3619)
133
    def test_diff_unversioned(self):
134
        # Get an error when diffing a non-versioned file.
135
        # (Malone #3619)
136
        self.make_example_branch()
137
        self.build_tree(['unversioned-file'])
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
138
        out, err = self.run_bzr('diff unversioned-file', retcode=3)
1658.1.10 by Martin Pool
diff on unversiond files should give an error (Malone #3619)
139
        self.assertContainsRe(err, 'not versioned.*unversioned-file')
140
141
    # TODO: What should diff say for a file deleted in working tree?
1658.1.9 by Martin Pool
Give an error for bzr diff on an nonexistent file (Malone #3619)
142
1551.2.13 by Aaron Bentley
Got diff working properly with checkouts
143
    def example_branches(self):
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
144
        branch1_tree = self.make_branch_and_tree('branch1')
145
        self.build_tree(['branch1/file'], line_endings='binary')
146
        branch1_tree.add('file')
147
        branch1_tree.commit(message='add file')
148
        branch2_tree = branch1_tree.bzrdir.sprout('branch2').open_workingtree()
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
149
        self.build_tree_contents([('branch2/file', 'new content\n')])
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
150
        branch2_tree.commit(message='update file')
151
        return branch1_tree, branch2_tree
1551.2.13 by Aaron Bentley
Got diff working properly with checkouts
152
153
    def test_diff_branches(self):
154
        self.example_branches()
1185.50.44 by John Arbash Meinel
[patch] Robey Pointer: diff -r 1.. should diff against working tree.
155
        # should open branch1 and diff against branch2, 
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
156
        out, err = self.run_bzr('diff -r branch:branch2 branch1',
157
                                retcode=1)
1740.2.5 by Aaron Bentley
Merge from bzr.dev
158
        self.assertEquals('', err)
159
        self.assertEquals("=== modified file 'file'\n"
160
                          "--- file\tYYYY-MM-DD HH:MM:SS +ZZZZ\n"
161
                          "+++ file\tYYYY-MM-DD HH:MM:SS +ZZZZ\n"
162
                          "@@ -1,1 +1,1 @@\n"
163
                          "-new content\n"
164
                          "+contents of branch1/file\n"
165
                          "\n", subst_dates(out))
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
166
        out, err = self.run_bzr('diff branch2 branch1',
1740.2.5 by Aaron Bentley
Merge from bzr.dev
167
                                         retcode=1)
168
        self.assertEquals('', err)
169
        self.assertEqualDiff("=== modified file 'file'\n"
170
                              "--- file\tYYYY-MM-DD HH:MM:SS +ZZZZ\n"
171
                              "+++ file\tYYYY-MM-DD HH:MM:SS +ZZZZ\n"
1185.50.44 by John Arbash Meinel
[patch] Robey Pointer: diff -r 1.. should diff against working tree.
172
                              "@@ -1,1 +1,1 @@\n"
173
                              "-new content\n"
174
                              "+contents of branch1/file\n"
1740.2.5 by Aaron Bentley
Merge from bzr.dev
175
                              "\n", subst_dates(out))
1185.50.44 by John Arbash Meinel
[patch] Robey Pointer: diff -r 1.. should diff against working tree.
176
1732.3.3 by Matthieu Moy
Testcases for revno:N:path
177
    def test_diff_revno_branches(self):
178
        self.example_branches()
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
179
        branch2_tree = workingtree.WorkingTree.open_containing('branch2')[0]
180
        self.build_tree_contents([('branch2/file', 'even newer content')])
181
        branch2_tree.commit(message='update file once more')
1732.3.3 by Matthieu Moy
Testcases for revno:N:path
182
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
183
        out, err = self.run_bzr('diff -r revno:1:branch2..revno:1:branch1',
2581.1.2 by Martin Pool
Remove unnecessary retcode=0 to run_bzr calls
184
                                )
1732.3.3 by Matthieu Moy
Testcases for revno:N:path
185
        self.assertEquals('', err)
186
        self.assertEquals('', out)
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
187
        out, err = self.run_bzr('diff -r revno:2:branch2..revno:1:branch1',
188
                                retcode=1)
1732.3.3 by Matthieu Moy
Testcases for revno:N:path
189
        self.assertEquals('', err)
190
        self.assertEqualDiff("=== modified file 'file'\n"
191
                              "--- file\tYYYY-MM-DD HH:MM:SS +ZZZZ\n"
192
                              "+++ file\tYYYY-MM-DD HH:MM:SS +ZZZZ\n"
193
                              "@@ -1,1 +1,1 @@\n"
194
                              "-new content\n"
195
                              "+contents of branch1/file\n"
196
                              "\n", subst_dates(out))
197
1551.2.13 by Aaron Bentley
Got diff working properly with checkouts
198
    def example_branch2(self):
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
199
        branch1_tree = self.make_branch_and_tree('branch1')
200
        self.build_tree_contents([('branch1/file1', 'original line\n')])
201
        branch1_tree.add('file1')
202
        branch1_tree.commit(message='first commit')
203
        self.build_tree_contents([('branch1/file1', 'repo line\n')])
204
        branch1_tree.commit(message='second commit')
205
        return branch1_tree
1551.2.13 by Aaron Bentley
Got diff working properly with checkouts
206
207
    def test_diff_to_working_tree(self):
208
        self.example_branch2()
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
209
        self.build_tree_contents([('branch1/file1', 'new line')])
210
        output = self.run_bzr('diff -r 1.. branch1', retcode=1)
2598.5.12 by Aaron Bentley
Merge bzr.dev
211
        self.assertContainsRe(output[0], '\n\\-original line\n\\+new line\n')
1551.2.13 by Aaron Bentley
Got diff working properly with checkouts
212
1551.7.19 by Aaron Bentley
Always include working tree when calculating file ids for diff
213
    def test_diff_across_rename(self):
214
        """The working tree path should always be considered for diffing"""
2738.1.2 by Daniel Watkins
Tests now run on both branches and checkouts.
215
        tree = self.make_example_branch()
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
216
        self.run_bzr('diff -r 0..1 hello', retcode=1)
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
217
        tree.rename_one('hello', 'hello1')
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
218
        self.run_bzr('diff hello1', retcode=1)
219
        self.run_bzr('diff -r 0..1 hello1', retcode=1)
1551.7.19 by Aaron Bentley
Always include working tree when calculating file ids for diff
220
1551.2.13 by Aaron Bentley
Got diff working properly with checkouts
221
222
class TestCheckoutDiff(TestDiff):
223
1658.1.9 by Martin Pool
Give an error for bzr diff on an nonexistent file (Malone #3619)
224
    def make_example_branch(self):
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
225
        tree = super(TestCheckoutDiff, self).make_example_branch()
2738.1.2 by Daniel Watkins
Tests now run on both branches and checkouts.
226
        tree = tree.branch.create_checkout('checkout')
1551.2.13 by Aaron Bentley
Got diff working properly with checkouts
227
        os.chdir('checkout')
2738.1.2 by Daniel Watkins
Tests now run on both branches and checkouts.
228
        return tree
1551.2.13 by Aaron Bentley
Got diff working properly with checkouts
229
230
    def example_branch2(self):
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
231
        tree = super(TestCheckoutDiff, self).example_branch2()
1551.2.13 by Aaron Bentley
Got diff working properly with checkouts
232
        os.mkdir('checkouts')
2738.1.2 by Daniel Watkins
Tests now run on both branches and checkouts.
233
        tree = tree.branch.create_checkout('checkouts/branch1')
1551.2.13 by Aaron Bentley
Got diff working properly with checkouts
234
        os.chdir('checkouts')
2738.1.2 by Daniel Watkins
Tests now run on both branches and checkouts.
235
        return tree
1551.2.13 by Aaron Bentley
Got diff working properly with checkouts
236
237
    def example_branches(self):
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
238
        branch1_tree, branch2_tree = super(TestCheckoutDiff, self).example_branches()
1551.2.13 by Aaron Bentley
Got diff working properly with checkouts
239
        os.mkdir('checkouts')
2738.1.2 by Daniel Watkins
Tests now run on both branches and checkouts.
240
        branch1_tree = branch1_tree.branch.create_checkout('checkouts/branch1')
241
        branch2_tree = branch2_tree.branch.create_checkout('checkouts/branch2')
1551.2.13 by Aaron Bentley
Got diff working properly with checkouts
242
        os.chdir('checkouts')
2738.1.2 by Daniel Watkins
Tests now run on both branches and checkouts.
243
        return branch1_tree, branch2_tree
1583.1.1 by Michael Ellerman
Change to -p1 format diffs. Update existing tests to cope, and add some
244
1658.1.9 by Martin Pool
Give an error for bzr diff on an nonexistent file (Malone #3619)
245
2172.2.1 by Alexander Belchenko
Remove unnecessary duplication of tests in blackbox/test_diff.py
246
class TestDiffLabels(DiffBase):
1583.1.1 by Michael Ellerman
Change to -p1 format diffs. Update existing tests to cope, and add some
247
248
    def test_diff_label_removed(self):
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
249
        tree = super(TestDiffLabels, self).make_example_branch()
250
        tree.remove('hello', keep_files=False)
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
251
        diff = self.run_bzr('diff', retcode=1)
1694.2.1 by Martin Pool
Remove 'a/', 'b/' default prefixes on diff output.
252
        self.assertTrue("=== removed file 'hello'" in diff[0])
1583.1.1 by Michael Ellerman
Change to -p1 format diffs. Update existing tests to cope, and add some
253
254
    def test_diff_label_added(self):
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
255
        tree = super(TestDiffLabels, self).make_example_branch()
256
        self.build_tree_contents([('barbar', 'barbar')])
257
        tree.add('barbar')
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
258
        diff = self.run_bzr('diff', retcode=1)
1694.2.1 by Martin Pool
Remove 'a/', 'b/' default prefixes on diff output.
259
        self.assertTrue("=== added file 'barbar'" in diff[0])
1583.1.1 by Michael Ellerman
Change to -p1 format diffs. Update existing tests to cope, and add some
260
261
    def test_diff_label_modified(self):
1658.1.9 by Martin Pool
Give an error for bzr diff on an nonexistent file (Malone #3619)
262
        super(TestDiffLabels, self).make_example_branch()
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
263
        self.build_tree_contents([('hello', 'barbar')])
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
264
        diff = self.run_bzr('diff', retcode=1)
1694.2.1 by Martin Pool
Remove 'a/', 'b/' default prefixes on diff output.
265
        self.assertTrue("=== modified file 'hello'" in diff[0])
1583.1.1 by Michael Ellerman
Change to -p1 format diffs. Update existing tests to cope, and add some
266
267
    def test_diff_label_renamed(self):
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
268
        tree = super(TestDiffLabels, self).make_example_branch()
269
        tree.rename_one('hello', 'gruezi')
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
270
        diff = self.run_bzr('diff', retcode=1)
1694.2.1 by Martin Pool
Remove 'a/', 'b/' default prefixes on diff output.
271
        self.assertTrue("=== renamed file 'hello' => 'gruezi'" in diff[0])
1899.1.2 by John Arbash Meinel
Add a test that we can use an external diff program.
272
273
2172.2.1 by Alexander Belchenko
Remove unnecessary duplication of tests in blackbox/test_diff.py
274
class TestExternalDiff(DiffBase):
1899.1.2 by John Arbash Meinel
Add a test that we can use an external diff program.
275
276
    def test_external_diff(self):
277
        """Test that we can spawn an external diff process"""
278
        # We have to use run_bzr_subprocess, because we need to
279
        # test writing directly to stdout, (there was a bug in
280
        # subprocess.py that we had to workaround).
281
        # However, if 'diff' may not be available
282
        self.make_example_branch()
283
        orig_progress = os.environ.get('BZR_PROGRESS_BAR')
284
        try:
285
            os.environ['BZR_PROGRESS_BAR'] = 'none'
2665.4.1 by Aaron Bentley
teach run_bzr_subprocess to accept either a list of strings or a string
286
            out, err = self.run_bzr_subprocess('diff -r 1 --diff-options -ub',
2052.5.1 by Alexander Belchenko
blackbox.test_diff fix: don't load plugins when in test bzr run as subprocess
287
                                               universal_newlines=True,
1899.1.2 by John Arbash Meinel
Add a test that we can use an external diff program.
288
                                               retcode=None)
289
        finally:
290
            if orig_progress is None:
291
                del os.environ['BZR_PROGRESS_BAR']
292
            else:
293
                os.environ['BZR_PROGRESS_BAR'] = orig_progress
294
            
295
        if 'Diff is not installed on this machine' in err:
296
            raise TestSkipped("No external 'diff' is available")
297
        self.assertEqual('', err)
298
        # We have to skip the stuff in the middle, because it depends
299
        # on time.time()
300
        self.assertStartsWith(out, "=== added file 'goodbye'\n"
301
                                   "--- goodbye\t1970-01-01 00:00:00 +0000\n"
302
                                   "+++ goodbye\t")
303
        self.assertEndsWith(out, "\n@@ -0,0 +1 @@\n"
1899.1.6 by John Arbash Meinel
internal_diff always adds a trailing \n, make sure external_diff does too
304
                                 "+baz\n\n")
2178.4.1 by Alexander Belchenko
Provide tests to illustrate bug #55276 on win32.
305
306
307
class TestDiffOutput(DiffBase):
308
309
    def test_diff_output(self):
2178.4.5 by Alexander Belchenko
Spell-checking (thanks to Aaron)
310
        # check that output doesn't mangle line-endings
2178.4.1 by Alexander Belchenko
Provide tests to illustrate bug #55276 on win32.
311
        self.make_example_branch()
2664.10.1 by Daniel Watkins
tests.blackbox.test_diff now uses internals where appropriate.
312
        self.build_tree_contents([('hello', 'hello world!\n')])
2178.4.1 by Alexander Belchenko
Provide tests to illustrate bug #55276 on win32.
313
        output = self.run_bzr_subprocess('diff', retcode=1)[0]
314
        self.assert_('\n+hello world!\n' in output)