/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
2748.2.1 by Lukáš Lalinsky
Return ConflictsList() instead of [] from Tree.conflicts.
233
        tof = StringIO()
234
        revs = [RevisionSpec.from_string('0'), RevisionSpec.from_string('1')]
2761.1.2 by Aaron Bentley
Fix line wrapping
235
        show_tree_status(wt, specific_files=['test.c'], to_file=tof,
236
                         short=True, revision=revs)
2748.2.1 by Lukáš Lalinsky
Return ConflictsList() instead of [] from Tree.conflicts.
237
        tof.seek(0)
238
        self.assertEquals(tof.readlines(), ['+N  test.c\n'])
239
1551.15.58 by Aaron Bentley
Status honours selected paths for conflicts (#127606)
240
    def test_specific_files_conflicts(self):
241
        tree = self.make_branch_and_tree('.')
242
        self.build_tree(['dir2/'])
243
        tree.add('dir2')
244
        tree.commit('added dir2')
245
        tree.set_conflicts(conflicts.ConflictList(
246
            [conflicts.ContentsConflict('foo')]))
247
        tof = StringIO()
248
        show_tree_status(tree, specific_files=['dir2'], to_file=tof)
249
        self.assertEqualDiff('', tof.getvalue())
250
        tree.set_conflicts(conflicts.ConflictList(
251
            [conflicts.ContentsConflict('dir2')]))
252
        tof = StringIO()
253
        show_tree_status(tree, specific_files=['dir2'], to_file=tof)
254
        self.assertEqualDiff('conflicts:\n  Contents conflict in dir2\n',
255
                             tof.getvalue())
256
257
        tree.set_conflicts(conflicts.ConflictList(
258
            [conflicts.ContentsConflict('dir2/file1')]))
259
        tof = StringIO()
260
        show_tree_status(tree, specific_files=['dir2'], to_file=tof)
261
        self.assertEqualDiff('conflicts:\n  Contents conflict in dir2/file1\n',
262
                             tof.getvalue())
263
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
264
    def test_status_nonexistent_file(self):
265
        # files that don't exist in either the basis tree or working tree
266
        # should give an error
267
        wt = self.make_branch_and_tree('.')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
268
        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)
269
        self.assertContainsRe(err, r'do not exist.*does-not-exist')
270
2091.4.2 by wang
add tests for "diff" and "status"
271
    def test_status_out_of_date(self):
272
        """Simulate status of out-of-date tree after remote push"""
273
        tree = self.make_branch_and_tree('.')
274
        self.build_tree_contents([('a', 'foo\n')])
275
        tree.lock_write()
276
        try:
277
            tree.add(['a'])
278
            tree.commit('add test file')
279
            # simulate what happens after a remote push
280
            tree.set_last_revision("0")
281
        finally:
2408.1.7 by Alexander Belchenko
Fix blackbox test_status_out_of_date: unlock WT before next command running
282
            # before run another commands we should unlock tree
2091.4.2 by wang
add tests for "diff" and "status"
283
            tree.unlock()
2408.1.7 by Alexander Belchenko
Fix blackbox test_status_out_of_date: unlock WT before next command running
284
        out, err = self.run_bzr('status')
285
        self.assertEqual("working tree is out of date, run 'bzr update'\n",
286
                         err)
2091.4.2 by wang
add tests for "diff" and "status"
287
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
288
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
289
class CheckoutStatus(BranchStatus):
1551.2.12 by Aaron Bentley
whitespace fixups
290
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
291
    def setUp(self):
292
        super(CheckoutStatus, self).setUp()
293
        mkdir('codir')
294
        chdir('codir')
295
        
296
    def make_branch_and_tree(self, relpath):
297
        source = self.make_branch(pathjoin('..', relpath))
298
        checkout = bzrdir.BzrDirMetaFormat1().initialize(relpath)
299
        bzrlib.branch.BranchReferenceFormat().initialize(checkout, source)
300
        return checkout.create_workingtree()
301
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
302
1534.4.54 by Robert Collins
Merge from integration.
303
class TestStatus(TestCaseWithTransport):
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
304
2318.2.1 by Kent Gibson
Apply status versioned patch
305
    def test_status_plain(self):
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
306
        tree = self.make_branch_and_tree('.')
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
307
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
308
        self.build_tree(['hello.txt'])
309
        result = self.run_bzr("status")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
310
        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.
311
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
312
        tree.add("hello.txt")
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
313
        result = self.run_bzr("status")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
314
        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.
315
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
316
        tree.commit(message="added")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
317
        result = self.run_bzr("status -r 0..1")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
318
        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.
319
2745.4.3 by Lukáš Lalinsky
Change -C to -c.
320
        result = self.run_bzr("status -c 1")[0]
2745.4.1 by Lukáš Lalinsky
New option -C/--change for diff and status to show changes in one revision. (#56299)
321
        self.assertContainsRe(result, "added:\n  hello.txt\n")
322
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
323
        self.build_tree(['world.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
324
        result = self.run_bzr("status -r 0")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
325
        self.assertContainsRe(result, "added:\n  hello.txt\n" \
326
                                      "unknown:\n  world.txt\n")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
327
        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)
328
        self.assertEquals(result2, result)
2318.2.1 by Kent Gibson
Apply status versioned patch
329
330
    def test_status_short(self):
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
331
        tree = self.make_branch_and_tree('.')
2318.2.1 by Kent Gibson
Apply status versioned patch
332
333
        self.build_tree(['hello.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
334
        result = self.run_bzr("status --short")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
335
        self.assertContainsRe(result, "[?]   hello.txt\n")
336
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
337
        tree.add("hello.txt")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
338
        result = self.run_bzr("status --short")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
339
        self.assertContainsRe(result, "[+]N  hello.txt\n")
340
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
341
        tree.commit(message="added")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
342
        result = self.run_bzr("status --short -r 0..1")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
343
        self.assertContainsRe(result, "[+]N  hello.txt\n")
344
345
        self.build_tree(['world.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
346
        result = self.run_bzr("status --short -r 0")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
347
        self.assertContainsRe(result, "[+]N  hello.txt\n" \
348
                                      "[?]   world.txt\n")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
349
        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.
350
        self.assertEquals(result2, result)
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
351
2318.2.1 by Kent Gibson
Apply status versioned patch
352
    def test_status_versioned(self):
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
353
        tree = self.make_branch_and_tree('.')
2318.2.1 by Kent Gibson
Apply status versioned patch
354
355
        self.build_tree(['hello.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
356
        result = self.run_bzr("status --versioned")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
357
        self.assertNotContainsRe(result, "unknown:\n  hello.txt\n")
358
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
359
        tree.add("hello.txt")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
360
        result = self.run_bzr("status --versioned")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
361
        self.assertContainsRe(result, "added:\n  hello.txt\n")
362
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
363
        tree.commit("added")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
364
        result = self.run_bzr("status --versioned -r 0..1")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
365
        self.assertContainsRe(result, "added:\n  hello.txt\n")
366
367
        self.build_tree(['world.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
368
        result = self.run_bzr("status --versioned -r 0")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
369
        self.assertContainsRe(result, "added:\n  hello.txt\n")
370
        self.assertNotContainsRe(result, "unknown:\n  world.txt\n")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
371
        result2 = self.run_bzr("status --versioned -r 0..")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
372
        self.assertEquals(result2, result)
373
2663.1.7 by Daniel Watkins
Capitalised short names.
374
    def test_status_SV(self):
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
375
        tree = self.make_branch_and_tree('.')
376
377
        self.build_tree(['hello.txt'])
2663.1.7 by Daniel Watkins
Capitalised short names.
378
        result = self.run_bzr("status -SV")[0]
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
379
        self.assertNotContainsRe(result, "hello.txt")
380
381
        tree.add("hello.txt")
2663.1.7 by Daniel Watkins
Capitalised short names.
382
        result = self.run_bzr("status -SV")[0]
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
383
        self.assertContainsRe(result, "[+]N  hello.txt\n")
384
385
        tree.commit(message="added")
2663.1.7 by Daniel Watkins
Capitalised short names.
386
        result = self.run_bzr("status -SV -r 0..1")[0]
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
387
        self.assertContainsRe(result, "[+]N  hello.txt\n")
388
389
        self.build_tree(['world.txt'])
2663.1.7 by Daniel Watkins
Capitalised short names.
390
        result = self.run_bzr("status -SV -r 0")[0]
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
391
        self.assertContainsRe(result, "[+]N  hello.txt\n")
392
2663.1.7 by Daniel Watkins
Capitalised short names.
393
        result2 = self.run_bzr("status -SV -r 0..")[0]
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
394
        self.assertEquals(result2, result)
395
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
396
    def assertStatusContains(self, pattern):
397
        """Run status, and assert it contains the given pattern"""
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
398
        result = self.run_bzr("status --short")[0]
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
399
        self.assertContainsRe(result, pattern)
400
401
    def test_kind_change_short(self):
402
        tree = self.make_branch_and_tree('.')
403
        self.build_tree(['file'])
404
        tree.add('file')
405
        tree.commit('added file')
406
        unlink('file')
407
        self.build_tree(['file/'])
408
        self.assertStatusContains('K  file => file/')
409
        tree.rename_one('file', 'directory')
410
        self.assertStatusContains('RK  file => directory/')
411
        rmdir('directory')
412
        self.assertStatusContains('RD  file => directory')
413
2745.4.1 by Lukáš Lalinsky
New option -C/--change for diff and status to show changes in one revision. (#56299)
414
    def test_status_illegal_revision_specifiers(self):
415
        out, err = self.run_bzr('status -r 1..23..123', retcode=3)
416
        self.assertContainsRe(err, 'one or two revision specifiers')
417
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
418
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
419
class TestStatusEncodings(TestCaseWithTransport):
420
    
421
    def setUp(self):
422
        TestCaseWithTransport.setUp(self)
423
        self.user_encoding = bzrlib.user_encoding
424
        self.stdout = sys.stdout
425
426
    def tearDown(self):
427
        bzrlib.user_encoding = self.user_encoding
428
        sys.stdout = self.stdout
429
        TestCaseWithTransport.tearDown(self)
430
431
    def make_uncommitted_tree(self):
432
        """Build a branch with uncommitted unicode named changes in the cwd."""
433
        working_tree = self.make_branch_and_tree(u'.')
434
        filename = u'hell\u00d8'
435
        try:
436
            self.build_tree_contents([(filename, 'contents of hello')])
437
        except UnicodeEncodeError:
438
            raise TestSkipped("can't build unicode working tree in "
439
                "filesystem encoding %s" % sys.getfilesystemencoding())
440
        working_tree.add(filename)
441
        return working_tree
442
443
    def test_stdout_ascii(self):
444
        sys.stdout = StringIO()
445
        bzrlib.user_encoding = 'ascii'
446
        working_tree = self.make_uncommitted_tree()
447
        stdout, stderr = self.run_bzr("status")
448
449
        self.assertEquals(stdout, """\
450
added:
451
  hell?
452
""")
453
454
    def test_stdout_latin1(self):
455
        sys.stdout = StringIO()
456
        bzrlib.user_encoding = 'latin-1'
457
        working_tree = self.make_uncommitted_tree()
458
        stdout, stderr = self.run_bzr('status')
459
460
        self.assertEquals(stdout, u"""\
461
added:
462
  hell\u00d8
463
""".encode('latin-1'))
464