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