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