/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
#
915 by Martin Pool
- add simple test case for bzr status
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
#
915 by Martin Pool
- add simple test case for bzr status
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
#
915 by Martin Pool
- add simple test case for bzr status
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
"""Tests of status command.
18
19
Most of these depend on the particular formatting used.
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
20
As such they really are blackbox tests even though some of the 
21
tests are not using self.capture. If we add tests for the programmatic
22
interface later, they will be non blackbox tests.
915 by Martin Pool
- add simple test case for bzr status
23
"""
24
1185.33.71 by Martin Pool
Status tests include unicode character.
25
from cStringIO import StringIO
1685.1.80 by Wouter van Heyst
more code cleanup
26
import codecs
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
27
from os import mkdir, chdir, rmdir, unlink
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
28
import sys
1185.33.71 by Martin Pool
Status tests include unicode character.
29
from tempfile import TemporaryFile
30
1987.1.2 by John Arbash Meinel
Remove the unneeded _set_user_ignores(['./.bazaar']) now that home has moved
31
from bzrlib import bzrdir, errors
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
32
import bzrlib.branch
1534.4.28 by Robert Collins
first cut at merge from integration.
33
from bzrlib.builtins import merge
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
34
from bzrlib.osutils import pathjoin
1948.4.33 by John Arbash Meinel
Switch from get_revision_spec() to RevisionSpec.from_string() (as advised by Martin)
35
from bzrlib.revisionspec import RevisionSpec
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
36
from bzrlib.status import show_tree_status
1685.1.75 by Wouter van Heyst
more tests handle LANG=C
37
from bzrlib.tests import TestCaseWithTransport, TestSkipped
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
38
from bzrlib.workingtree import WorkingTree
39
915 by Martin Pool
- add simple test case for bzr status
40
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
41
class BranchStatus(TestCaseWithTransport):
1102 by Martin Pool
- merge test refactoring from robertc
42
    
2255.7.60 by Robert Collins
Make the assertStatus blackbox helper clearer.
43
    def assertStatus(self, expected_lines, working_tree,
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
44
        revision=None, short=False):
1927.2.3 by Robert Collins
review comment application - paired with Martin.
45
        """Run status in working_tree and look for output.
46
        
2255.7.60 by Robert Collins
Make the assertStatus blackbox helper clearer.
47
        :param expected_lines: The lines to look for.
1927.2.3 by Robert Collins
review comment application - paired with Martin.
48
        :param working_tree: The tree to run status in.
49
        """
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
50
        output_string = self.status_string(working_tree, revision, short)
2255.7.60 by Robert Collins
Make the assertStatus blackbox helper clearer.
51
        self.assertEqual(expected_lines, output_string.splitlines(True))
1927.2.3 by Robert Collins
review comment application - paired with Martin.
52
    
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
53
    def status_string(self, wt, revision=None, short=False):
1927.2.3 by Robert Collins
review comment application - paired with Martin.
54
        # use a real file rather than StringIO because it doesn't handle
55
        # Unicode very well.
56
        tof = codecs.getwriter('utf-8')(TemporaryFile())
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
57
        show_tree_status(wt, to_file=tof, revision=revision, short=short)
1927.2.3 by Robert Collins
review comment application - paired with Martin.
58
        tof.seek(0)
59
        return tof.read().decode('utf-8')
60
1836.1.16 by John Arbash Meinel
Cleanup some tests which don't expect .bazaar/ to show up. Some still fail.
61
    def test_branch_status(self):
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
62
        """Test basic branch status"""
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
63
        wt = self.make_branch_and_tree('.')
1927.2.3 by Robert Collins
review comment application - paired with Martin.
64
65
        # status with no commits or files - it must
66
        # work and show no output. We do this with no
67
        # commits to be sure that it's not going to fail
68
        # as a corner case.
69
        self.assertStatus([], wt)
70
71
        self.build_tree(['hello.c', 'bye.c'])
72
        self.assertStatus([
73
                'unknown:\n',
74
                '  bye.c\n',
75
                '  hello.c\n',
76
            ],
77
            wt)
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
78
        self.assertStatus([
1551.10.7 by Aaron Bentley
Use new-style output for status
79
                '?   bye.c\n',
80
                '?   hello.c\n',
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
81
            ],
82
            wt, short=True)
1927.2.3 by Robert Collins
review comment application - paired with Martin.
83
84
        # add a commit to allow showing pending merges.
1927.2.1 by Robert Collins
Alter set_pending_merges to shove the left most merge into the trees last-revision if that is not set. Related bugfixes include basis_tree handling ghosts, de-duping the merges with the last-revision and update changing where and how it adds its pending merge.
85
        wt.commit('create a parent to allow testing merge output')
915 by Martin Pool
- add simple test case for bzr status
86
1908.6.7 by Robert Collins
Remove all users of set_pending_merges and add_pending_merge except tests that they work correctly.
87
        wt.add_parent_tree_id('pending@pending-0-0')
1927.2.3 by Robert Collins
review comment application - paired with Martin.
88
        self.assertStatus([
89
                'unknown:\n',
90
                '  bye.c\n',
91
                '  hello.c\n',
92
                'pending merges:\n',
93
                '  pending@pending-0-0\n',
94
            ],
95
            wt)
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
96
        self.assertStatus([
1551.10.7 by Aaron Bentley
Use new-style output for status
97
                '?   bye.c\n',
98
                '?   hello.c\n',
99
                'P   pending@pending-0-0\n',
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
100
            ],
101
            wt, short=True)
915 by Martin Pool
- add simple test case for bzr status
102
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
103
    def test_branch_status_revisions(self):
104
        """Tests branch status with revisions"""
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
105
        wt = self.make_branch_and_tree('.')
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
106
107
        self.build_tree(['hello.c', 'bye.c'])
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
108
        wt.add('hello.c')
109
        wt.add('bye.c')
110
        wt.commit('Test message')
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
111
1948.4.36 by John Arbash Meinel
[merge] bzr.dev 1978
112
        revs = [RevisionSpec.from_string('0')]
1927.2.3 by Robert Collins
review comment application - paired with Martin.
113
        self.assertStatus([
114
                'added:\n',
115
                '  bye.c\n',
116
                '  hello.c\n'
117
            ],
118
            wt,
119
            revision=revs)
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
120
121
        self.build_tree(['more.c'])
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
122
        wt.add('more.c')
123
        wt.commit('Another test message')
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
124
        
1948.4.33 by John Arbash Meinel
Switch from get_revision_spec() to RevisionSpec.from_string() (as advised by Martin)
125
        revs.append(RevisionSpec.from_string('1'))
1927.2.3 by Robert Collins
review comment application - paired with Martin.
126
        self.assertStatus([
127
                'added:\n',
128
                '  bye.c\n',
129
                '  hello.c\n',
130
            ],
131
            wt,
132
            revision=revs)
1185.12.27 by Aaron Bentley
Use line log for pending merges
133
134
    def test_pending(self):
1185.33.71 by Martin Pool
Status tests include unicode character.
135
        """Pending merges display works, including Unicode"""
1185.12.27 by Aaron Bentley
Use line log for pending merges
136
        mkdir("./branch")
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
137
        wt = self.make_branch_and_tree('branch')
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
138
        b = wt.branch
139
        wt.commit("Empty commit 1")
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
140
        b_2_dir = b.bzrdir.sprout('./copy')
141
        b_2 = b_2_dir.open_branch()
142
        wt2 = b_2_dir.open_workingtree()
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
143
        wt.commit(u"\N{TIBETAN DIGIT TWO} Empty commit 2")
1185.12.27 by Aaron Bentley
Use line log for pending merges
144
        merge(["./branch", -1], [None, None], this_dir = './copy')
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
145
        message = self.status_string(wt2)
2296.1.1 by Martin Pool
Make tests for truncation of status output more robust on wide terminals.
146
        self.assertStartsWith(message, "pending merges:\n")
147
        self.assertEndsWith(message, "Empty commit 2\n")
1534.4.36 by Robert Collins
Finish deprecating Branch.working_tree()
148
        wt2.commit("merged")
1185.16.88 by mbp at sourcefrog
Make commit message long enough in test for pending merges
149
        # must be long to make sure we see elipsis at the end
2296.1.1 by Martin Pool
Make tests for truncation of status output more robust on wide terminals.
150
        wt.commit("Empty commit 3 " +
151
                   "blah blah blah blah " * 100)
1185.12.27 by Aaron Bentley
Use line log for pending merges
152
        merge(["./branch", -1], [None, None], this_dir = './copy')
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
153
        message = self.status_string(wt2)
2296.1.1 by Martin Pool
Make tests for truncation of status output more robust on wide terminals.
154
        self.assertStartsWith(message, "pending merges:\n")
1185.16.145 by Martin Pool
Remove all assert statements from test cases.
155
        self.assert_("Empty commit 3" in message)
2296.1.1 by Martin Pool
Make tests for truncation of status output more robust on wide terminals.
156
        self.assertEndsWith(message, "...\n")
1185.12.27 by Aaron Bentley
Use line log for pending merges
157
2255.7.97 by Robert Collins
Teach delta.report_changes about unversioned files, removing all inventory access during status --short.
158
    def test_tree_status_ignores(self):
159
        """Tests branch status with ignores"""
160
        wt = self.make_branch_and_tree('.')
161
        self.run_bzr('ignore', '*~')
162
        wt.commit('commit .bzrignore')
163
        self.build_tree(['foo.c', 'foo.c~'])
164
        self.assertStatus([
165
                'unknown:\n',
166
                '  foo.c\n',
167
                ],
168
                wt)
169
        self.assertStatus([
170
                '?   foo.c\n',
171
                ],
172
                wt, short=True)
173
174
    def test_tree_status_specific_files(self):
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
175
        """Tests branch status with given specific files"""
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
176
        wt = self.make_branch_and_tree('.')
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
177
        b = wt.branch
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
178
179
        self.build_tree(['directory/','directory/hello.c', 'bye.c','test.c','dir2/'])
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
180
        wt.add('directory')
181
        wt.add('test.c')
182
        wt.commit('testing')
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
183
        
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
184
        self.assertStatus([
185
                'unknown:\n',
186
                '  bye.c\n',
2255.7.91 by Robert Collins
Move unknown detection in long status into the delta creation, saving a tree-scan.
187
                '  dir2/\n',
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
188
                '  directory/hello.c\n'
189
                ],
190
                wt)
191
192
        self.assertStatus([
1551.10.7 by Aaron Bentley
Use new-style output for status
193
                '?   bye.c\n',
2255.7.97 by Robert Collins
Teach delta.report_changes about unversioned files, removing all inventory access during status --short.
194
                '?   dir2/\n',
1551.10.7 by Aaron Bentley
Use new-style output for status
195
                '?   directory/hello.c\n'
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
196
                ],
197
                wt, short=True)
198
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
199
        tof = StringIO()
1662.1.13 by Martin Pool
Fix up blackbox test for error on status of nonexistent files
200
        self.assertRaises(errors.PathsDoNotExist,
201
                          show_tree_status,
202
                          wt, specific_files=['bye.c','test.c','absent.c'], 
203
                          to_file=tof)
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
204
        
205
        tof = StringIO()
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
206
        show_tree_status(wt, specific_files=['directory'], to_file=tof)
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
207
        tof.seek(0)
208
        self.assertEquals(tof.readlines(),
209
                          ['unknown:\n',
210
                           '  directory/hello.c\n'
211
                           ])
212
        tof = StringIO()
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
213
        show_tree_status(wt, specific_files=['directory'], to_file=tof,
214
                         short=True)
215
        tof.seek(0)
1551.10.7 by Aaron Bentley
Use new-style output for status
216
        self.assertEquals(tof.readlines(), ['?   directory/hello.c\n'])
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
217
218
        tof = StringIO()
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
219
        show_tree_status(wt, specific_files=['dir2'], to_file=tof)
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
220
        tof.seek(0)
221
        self.assertEquals(tof.readlines(),
222
                          ['unknown:\n',
2255.7.91 by Robert Collins
Move unknown detection in long status into the delta creation, saving a tree-scan.
223
                           '  dir2/\n'
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
224
                           ])
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
225
        tof = StringIO()
226
        show_tree_status(wt, specific_files=['dir2'], to_file=tof, short=True)
227
        tof.seek(0)
2255.7.97 by Robert Collins
Teach delta.report_changes about unversioned files, removing all inventory access during status --short.
228
        self.assertEquals(tof.readlines(), ['?   dir2/\n'])
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
229
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
230
    def test_status_nonexistent_file(self):
231
        # files that don't exist in either the basis tree or working tree
232
        # should give an error
233
        wt = self.make_branch_and_tree('.')
234
        out, err = self.run_bzr('status', 'does-not-exist', retcode=3)
235
        self.assertContainsRe(err, r'do not exist.*does-not-exist')
236
2091.4.2 by wang
add tests for "diff" and "status"
237
    def test_status_out_of_date(self):
238
        """Simulate status of out-of-date tree after remote push"""
239
        tree = self.make_branch_and_tree('.')
240
        self.build_tree_contents([('a', 'foo\n')])
241
        tree.lock_write()
242
        try:
243
            tree.add(['a'])
244
            tree.commit('add test file')
245
            # simulate what happens after a remote push
246
            tree.set_last_revision("0")
247
            out, err = self.run_bzr('status')
248
            self.assertEqual("working tree is out of date, run 'bzr update'\n",
249
                             err)
250
        finally:
251
            tree.unlock()
252
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
253
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
254
class CheckoutStatus(BranchStatus):
1551.2.12 by Aaron Bentley
whitespace fixups
255
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
256
    def setUp(self):
257
        super(CheckoutStatus, self).setUp()
258
        mkdir('codir')
259
        chdir('codir')
260
        
261
    def make_branch_and_tree(self, relpath):
262
        source = self.make_branch(pathjoin('..', relpath))
263
        checkout = bzrdir.BzrDirMetaFormat1().initialize(relpath)
264
        bzrlib.branch.BranchReferenceFormat().initialize(checkout, source)
265
        return checkout.create_workingtree()
266
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
267
1534.4.54 by Robert Collins
Merge from integration.
268
class TestStatus(TestCaseWithTransport):
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
269
270
    def test_status(self):
271
        self.run_bzr("init")
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
272
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
273
        self.build_tree(['hello.txt'])
274
        result = self.run_bzr("status")[0]
275
        self.assert_("unknown:\n  hello.txt\n" in result, result)
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
276
        result = self.run_bzr("status","--short")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
277
        self.assertContainsRe(result, "[?]   hello.txt\n")
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
278
1185.50.70 by John Arbash Meinel
Found a bug in my test_status.py cleanup
279
        self.run_bzr("add", "hello.txt")
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
280
        result = self.run_bzr("status")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
281
        self.assertContainsRe(result, "added:\n  hello.txt\n")
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
282
        result = self.run_bzr("status","--short")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
283
        self.assertContainsRe(result, "[+]N  hello.txt\n")
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
284
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
285
        self.run_bzr("commit", "-m", "added")
286
        result = self.run_bzr("status", "-r", "0..1")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
287
        self.assertContainsRe(result, "added:\n  hello.txt\n")
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
288
        result = self.run_bzr("status", "--short", "-r", "0..1")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
289
        self.assertContainsRe(result, "[+]N  hello.txt\n")
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
290
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
291
        self.build_tree(['world.txt'])
292
        result = self.run_bzr("status", "-r", "0")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
293
        self.assertContainsRe(result, "added:\n  hello.txt\n" \
294
                                      "unknown:\n  world.txt\n")
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
295
        result2 = self.run_bzr("status", "-r", "0..")[0]
296
        self.assertEquals(result2, result)
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
297
        result = self.run_bzr("status", "--short", "-r", "0")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
298
        self.assertContainsRe(result, "[+]N  hello.txt\n" \
299
                                      "[?]   world.txt\n")
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
300
        result2 = self.run_bzr("status", "--short", "-r", "0..")[0]
301
        self.assertEquals(result2, result)
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
302
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
303
    def assertStatusContains(self, pattern):
304
        """Run status, and assert it contains the given pattern"""
305
        result = self.run_bzr("status", "--short")[0]
306
        self.assertContainsRe(result, pattern)
307
308
    def test_kind_change_short(self):
309
        tree = self.make_branch_and_tree('.')
310
        self.build_tree(['file'])
311
        tree.add('file')
312
        tree.commit('added file')
313
        unlink('file')
314
        self.build_tree(['file/'])
315
        self.assertStatusContains('K  file => file/')
316
        tree.rename_one('file', 'directory')
317
        self.assertStatusContains('RK  file => directory/')
318
        rmdir('directory')
319
        self.assertStatusContains('RD  file => directory')
320
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
321
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
322
class TestStatusEncodings(TestCaseWithTransport):
323
    
324
    def setUp(self):
325
        TestCaseWithTransport.setUp(self)
326
        self.user_encoding = bzrlib.user_encoding
327
        self.stdout = sys.stdout
328
329
    def tearDown(self):
330
        bzrlib.user_encoding = self.user_encoding
331
        sys.stdout = self.stdout
332
        TestCaseWithTransport.tearDown(self)
333
334
    def make_uncommitted_tree(self):
335
        """Build a branch with uncommitted unicode named changes in the cwd."""
336
        working_tree = self.make_branch_and_tree(u'.')
337
        filename = u'hell\u00d8'
338
        try:
339
            self.build_tree_contents([(filename, 'contents of hello')])
340
        except UnicodeEncodeError:
341
            raise TestSkipped("can't build unicode working tree in "
342
                "filesystem encoding %s" % sys.getfilesystemencoding())
343
        working_tree.add(filename)
344
        return working_tree
345
346
    def test_stdout_ascii(self):
347
        sys.stdout = StringIO()
348
        bzrlib.user_encoding = 'ascii'
349
        working_tree = self.make_uncommitted_tree()
350
        stdout, stderr = self.run_bzr("status")
351
352
        self.assertEquals(stdout, """\
353
added:
354
  hell?
355
""")
356
357
    def test_stdout_latin1(self):
358
        sys.stdout = StringIO()
359
        bzrlib.user_encoding = 'latin-1'
360
        working_tree = self.make_uncommitted_tree()
361
        stdout, stderr = self.run_bzr('status')
362
363
        self.assertEquals(stdout, u"""\
364
added:
365
  hell\u00d8
366
""".encode('latin-1'))
367