/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,
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
47
        revision=None, short=False, pending=True):
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
        """
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
53
        output_string = self.status_string(working_tree, revision, short,
54
                pending)
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
    
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
57
    def status_string(self, wt, revision=None, short=False, pending=True):
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())
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
61
        show_tree_status(wt, to_file=tof, revision=revision, short=short,
62
                show_pending=pending)
1927.2.3 by Robert Collins
review comment application - paired with Martin.
63
        tof.seek(0)
64
        return tof.read().decode('utf-8')
65
1836.1.16 by John Arbash Meinel
Cleanup some tests which don't expect .bazaar/ to show up. Some still fail.
66
    def test_branch_status(self):
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
67
        """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.
68
        wt = self.make_branch_and_tree('.')
1927.2.3 by Robert Collins
review comment application - paired with Martin.
69
70
        # status with no commits or files - it must
71
        # work and show no output. We do this with no
72
        # commits to be sure that it's not going to fail
73
        # as a corner case.
74
        self.assertStatus([], wt)
75
76
        self.build_tree(['hello.c', 'bye.c'])
77
        self.assertStatus([
78
                'unknown:\n',
79
                '  bye.c\n',
80
                '  hello.c\n',
81
            ],
82
            wt)
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
83
        self.assertStatus([
1551.10.7 by Aaron Bentley
Use new-style output for status
84
                '?   bye.c\n',
85
                '?   hello.c\n',
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
86
            ],
87
            wt, short=True)
1927.2.3 by Robert Collins
review comment application - paired with Martin.
88
89
        # 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.
90
        wt.commit('create a parent to allow testing merge output')
915 by Martin Pool
- add simple test case for bzr status
91
1908.6.7 by Robert Collins
Remove all users of set_pending_merges and add_pending_merge except tests that they work correctly.
92
        wt.add_parent_tree_id('pending@pending-0-0')
1927.2.3 by Robert Collins
review comment application - paired with Martin.
93
        self.assertStatus([
94
                'unknown:\n',
95
                '  bye.c\n',
96
                '  hello.c\n',
97
                'pending merges:\n',
3377.3.41 by John Arbash Meinel
Fix up a couple of the tests
98
                '  (ghost) pending@pending-0-0\n',
1927.2.3 by Robert Collins
review comment application - paired with Martin.
99
            ],
100
            wt)
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
101
        self.assertStatus([
1551.10.7 by Aaron Bentley
Use new-style output for status
102
                '?   bye.c\n',
103
                '?   hello.c\n',
3377.3.41 by John Arbash Meinel
Fix up a couple of the tests
104
                'P   (ghost) pending@pending-0-0\n',
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
105
            ],
106
            wt, short=True)
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
107
        self.assertStatus([
108
                'unknown:\n',
109
                '  bye.c\n',
110
                '  hello.c\n',
111
            ],
112
            wt, pending=False)
113
        self.assertStatus([
114
                '?   bye.c\n',
115
                '?   hello.c\n',
116
            ],
117
            wt, short=True, pending=False)
915 by Martin Pool
- add simple test case for bzr status
118
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
119
    def test_branch_status_revisions(self):
120
        """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.
121
        wt = self.make_branch_and_tree('.')
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
122
123
        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.
124
        wt.add('hello.c')
125
        wt.add('bye.c')
126
        wt.commit('Test message')
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
127
1948.4.36 by John Arbash Meinel
[merge] bzr.dev 1978
128
        revs = [RevisionSpec.from_string('0')]
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.1.35 by Robert Collins
Heikki Paajanen's status -r patch
136
137
        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.
138
        wt.add('more.c')
139
        wt.commit('Another test message')
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
140
        
1948.4.33 by John Arbash Meinel
Switch from get_revision_spec() to RevisionSpec.from_string() (as advised by Martin)
141
        revs.append(RevisionSpec.from_string('1'))
1927.2.3 by Robert Collins
review comment application - paired with Martin.
142
        self.assertStatus([
143
                'added:\n',
144
                '  bye.c\n',
145
                '  hello.c\n',
146
            ],
147
            wt,
148
            revision=revs)
1185.12.27 by Aaron Bentley
Use line log for pending merges
149
150
    def test_pending(self):
1185.33.71 by Martin Pool
Status tests include unicode character.
151
        """Pending merges display works, including Unicode"""
1185.12.27 by Aaron Bentley
Use line log for pending merges
152
        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.
153
        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.
154
        b = wt.branch
155
        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.
156
        b_2_dir = b.bzrdir.sprout('./copy')
157
        b_2 = b_2_dir.open_branch()
158
        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.
159
        wt.commit(u"\N{TIBETAN DIGIT TWO} Empty commit 2")
1551.15.70 by Aaron Bentley
Avoid using builtins.merge
160
        wt2.merge_from_branch(wt.branch)
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
161
        message = self.status_string(wt2)
2296.1.1 by Martin Pool
Make tests for truncation of status output more robust on wide terminals.
162
        self.assertStartsWith(message, "pending merges:\n")
163
        self.assertEndsWith(message, "Empty commit 2\n")
1534.4.36 by Robert Collins
Finish deprecating Branch.working_tree()
164
        wt2.commit("merged")
1185.16.88 by mbp at sourcefrog
Make commit message long enough in test for pending merges
165
        # 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.
166
        wt.commit("Empty commit 3 " +
167
                   "blah blah blah blah " * 100)
1551.15.70 by Aaron Bentley
Avoid using builtins.merge
168
        wt2.merge_from_branch(wt.branch)
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
169
        message = self.status_string(wt2)
2296.1.1 by Martin Pool
Make tests for truncation of status output more robust on wide terminals.
170
        self.assertStartsWith(message, "pending merges:\n")
1185.16.145 by Martin Pool
Remove all assert statements from test cases.
171
        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.
172
        self.assertEndsWith(message, "...\n")
1185.12.27 by Aaron Bentley
Use line log for pending merges
173
2255.7.97 by Robert Collins
Teach delta.report_changes about unversioned files, removing all inventory access during status --short.
174
    def test_tree_status_ignores(self):
175
        """Tests branch status with ignores"""
176
        wt = self.make_branch_and_tree('.')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
177
        self.run_bzr('ignore *~')
2255.7.97 by Robert Collins
Teach delta.report_changes about unversioned files, removing all inventory access during status --short.
178
        wt.commit('commit .bzrignore')
179
        self.build_tree(['foo.c', 'foo.c~'])
180
        self.assertStatus([
181
                'unknown:\n',
182
                '  foo.c\n',
183
                ],
184
                wt)
185
        self.assertStatus([
186
                '?   foo.c\n',
187
                ],
188
                wt, short=True)
189
190
    def test_tree_status_specific_files(self):
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
191
        """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.
192
        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.
193
        b = wt.branch
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
194
195
        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.
196
        wt.add('directory')
197
        wt.add('test.c')
198
        wt.commit('testing')
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
199
        
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
200
        self.assertStatus([
201
                'unknown:\n',
202
                '  bye.c\n',
2255.7.91 by Robert Collins
Move unknown detection in long status into the delta creation, saving a tree-scan.
203
                '  dir2/\n',
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
204
                '  directory/hello.c\n'
205
                ],
206
                wt)
207
208
        self.assertStatus([
1551.10.7 by Aaron Bentley
Use new-style output for status
209
                '?   bye.c\n',
2255.7.97 by Robert Collins
Teach delta.report_changes about unversioned files, removing all inventory access during status --short.
210
                '?   dir2/\n',
1551.10.7 by Aaron Bentley
Use new-style output for status
211
                '?   directory/hello.c\n'
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
212
                ],
213
                wt, short=True)
214
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
215
        tof = StringIO()
1662.1.13 by Martin Pool
Fix up blackbox test for error on status of nonexistent files
216
        self.assertRaises(errors.PathsDoNotExist,
217
                          show_tree_status,
218
                          wt, specific_files=['bye.c','test.c','absent.c'], 
219
                          to_file=tof)
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
220
        
221
        tof = StringIO()
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
222
        show_tree_status(wt, specific_files=['directory'], 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',
226
                           '  directory/hello.c\n'
227
                           ])
228
        tof = StringIO()
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
229
        show_tree_status(wt, specific_files=['directory'], to_file=tof,
230
                         short=True)
231
        tof.seek(0)
1551.10.7 by Aaron Bentley
Use new-style output for status
232
        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.
233
234
        tof = StringIO()
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
235
        show_tree_status(wt, specific_files=['dir2'], to_file=tof)
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
236
        tof.seek(0)
237
        self.assertEquals(tof.readlines(),
238
                          ['unknown:\n',
2255.7.91 by Robert Collins
Move unknown detection in long status into the delta creation, saving a tree-scan.
239
                           '  dir2/\n'
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
240
                           ])
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
241
        tof = StringIO()
242
        show_tree_status(wt, specific_files=['dir2'], to_file=tof, short=True)
243
        tof.seek(0)
2255.7.97 by Robert Collins
Teach delta.report_changes about unversioned files, removing all inventory access during status --short.
244
        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)
245
2748.2.1 by Lukáš Lalinsky
Return ConflictsList() instead of [] from Tree.conflicts.
246
        tof = StringIO()
247
        revs = [RevisionSpec.from_string('0'), RevisionSpec.from_string('1')]
2761.1.2 by Aaron Bentley
Fix line wrapping
248
        show_tree_status(wt, specific_files=['test.c'], to_file=tof,
249
                         short=True, revision=revs)
2748.2.1 by Lukáš Lalinsky
Return ConflictsList() instead of [] from Tree.conflicts.
250
        tof.seek(0)
251
        self.assertEquals(tof.readlines(), ['+N  test.c\n'])
252
1551.15.58 by Aaron Bentley
Status honours selected paths for conflicts (#127606)
253
    def test_specific_files_conflicts(self):
254
        tree = self.make_branch_and_tree('.')
255
        self.build_tree(['dir2/'])
256
        tree.add('dir2')
257
        tree.commit('added dir2')
258
        tree.set_conflicts(conflicts.ConflictList(
259
            [conflicts.ContentsConflict('foo')]))
260
        tof = StringIO()
261
        show_tree_status(tree, specific_files=['dir2'], to_file=tof)
262
        self.assertEqualDiff('', tof.getvalue())
263
        tree.set_conflicts(conflicts.ConflictList(
264
            [conflicts.ContentsConflict('dir2')]))
265
        tof = StringIO()
266
        show_tree_status(tree, specific_files=['dir2'], to_file=tof)
267
        self.assertEqualDiff('conflicts:\n  Contents conflict in dir2\n',
268
                             tof.getvalue())
269
270
        tree.set_conflicts(conflicts.ConflictList(
271
            [conflicts.ContentsConflict('dir2/file1')]))
272
        tof = StringIO()
273
        show_tree_status(tree, specific_files=['dir2'], to_file=tof)
274
        self.assertEqualDiff('conflicts:\n  Contents conflict in dir2/file1\n',
275
                             tof.getvalue())
276
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
277
    def test_status_nonexistent_file(self):
278
        # files that don't exist in either the basis tree or working tree
279
        # should give an error
280
        wt = self.make_branch_and_tree('.')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
281
        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)
282
        self.assertContainsRe(err, r'do not exist.*does-not-exist')
283
2091.4.2 by wang
add tests for "diff" and "status"
284
    def test_status_out_of_date(self):
285
        """Simulate status of out-of-date tree after remote push"""
286
        tree = self.make_branch_and_tree('.')
287
        self.build_tree_contents([('a', 'foo\n')])
288
        tree.lock_write()
289
        try:
290
            tree.add(['a'])
291
            tree.commit('add test file')
292
            # simulate what happens after a remote push
293
            tree.set_last_revision("0")
294
        finally:
2408.1.7 by Alexander Belchenko
Fix blackbox test_status_out_of_date: unlock WT before next command running
295
            # before run another commands we should unlock tree
2091.4.2 by wang
add tests for "diff" and "status"
296
            tree.unlock()
2408.1.7 by Alexander Belchenko
Fix blackbox test_status_out_of_date: unlock WT before next command running
297
        out, err = self.run_bzr('status')
298
        self.assertEqual("working tree is out of date, run 'bzr update'\n",
299
                         err)
2091.4.2 by wang
add tests for "diff" and "status"
300
3655.3.1 by Lukáš Lalinský
Fix `bzr st -rbranch:PATH_TO_BRANCH`
301
    def test_status_write_lock(self):
3732.1.1 by Ian Clatworthy
fix bzr st -rbranch:path-to-branch (Lukas Lalinsky)
302
        """Test that status works without fetching history and
3655.3.1 by Lukáš Lalinský
Fix `bzr st -rbranch:PATH_TO_BRANCH`
303
        having a write lock.
304
305
        See https://bugs.launchpad.net/bzr/+bug/149270
306
        """
307
        mkdir('branch1')
308
        wt = self.make_branch_and_tree('branch1')
309
        b = wt.branch
310
        wt.commit('Empty commit 1')
311
        wt2 = b.bzrdir.sprout('branch2').open_workingtree()
3732.1.1 by Ian Clatworthy
fix bzr st -rbranch:path-to-branch (Lukas Lalinsky)
312
        wt2.commit('Empty commit 2')
3655.3.1 by Lukáš Lalinský
Fix `bzr st -rbranch:PATH_TO_BRANCH`
313
        out, err = self.run_bzr('status branch1 -rbranch:branch2')
314
        self.assertEqual('', out)
315
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
316
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
317
class CheckoutStatus(BranchStatus):
1551.2.12 by Aaron Bentley
whitespace fixups
318
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
319
    def setUp(self):
320
        super(CheckoutStatus, self).setUp()
321
        mkdir('codir')
322
        chdir('codir')
323
        
324
    def make_branch_and_tree(self, relpath):
325
        source = self.make_branch(pathjoin('..', relpath))
326
        checkout = bzrdir.BzrDirMetaFormat1().initialize(relpath)
327
        bzrlib.branch.BranchReferenceFormat().initialize(checkout, source)
328
        return checkout.create_workingtree()
329
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
330
1534.4.54 by Robert Collins
Merge from integration.
331
class TestStatus(TestCaseWithTransport):
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
332
2318.2.1 by Kent Gibson
Apply status versioned patch
333
    def test_status_plain(self):
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
334
        tree = self.make_branch_and_tree('.')
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
335
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
336
        self.build_tree(['hello.txt'])
337
        result = self.run_bzr("status")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
338
        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.
339
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
340
        tree.add("hello.txt")
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
341
        result = self.run_bzr("status")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
342
        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.
343
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
344
        tree.commit(message="added")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
345
        result = self.run_bzr("status -r 0..1")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
346
        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.
347
2745.4.3 by Lukáš Lalinsky
Change -C to -c.
348
        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)
349
        self.assertContainsRe(result, "added:\n  hello.txt\n")
350
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
351
        self.build_tree(['world.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
352
        result = self.run_bzr("status -r 0")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
353
        self.assertContainsRe(result, "added:\n  hello.txt\n" \
354
                                      "unknown:\n  world.txt\n")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
355
        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)
356
        self.assertEquals(result2, result)
2318.2.1 by Kent Gibson
Apply status versioned patch
357
358
    def test_status_short(self):
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
359
        tree = self.make_branch_and_tree('.')
2318.2.1 by Kent Gibson
Apply status versioned patch
360
361
        self.build_tree(['hello.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
362
        result = self.run_bzr("status --short")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
363
        self.assertContainsRe(result, "[?]   hello.txt\n")
364
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
365
        tree.add("hello.txt")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
366
        result = self.run_bzr("status --short")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
367
        self.assertContainsRe(result, "[+]N  hello.txt\n")
368
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
369
        tree.commit(message="added")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
370
        result = self.run_bzr("status --short -r 0..1")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
371
        self.assertContainsRe(result, "[+]N  hello.txt\n")
372
373
        self.build_tree(['world.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
374
        result = self.run_bzr("status --short -r 0")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
375
        self.assertContainsRe(result, "[+]N  hello.txt\n" \
376
                                      "[?]   world.txt\n")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
377
        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.
378
        self.assertEquals(result2, result)
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
379
2318.2.1 by Kent Gibson
Apply status versioned patch
380
    def test_status_versioned(self):
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
381
        tree = self.make_branch_and_tree('.')
2318.2.1 by Kent Gibson
Apply status versioned patch
382
383
        self.build_tree(['hello.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
384
        result = self.run_bzr("status --versioned")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
385
        self.assertNotContainsRe(result, "unknown:\n  hello.txt\n")
386
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
387
        tree.add("hello.txt")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
388
        result = self.run_bzr("status --versioned")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
389
        self.assertContainsRe(result, "added:\n  hello.txt\n")
390
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
391
        tree.commit("added")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
392
        result = self.run_bzr("status --versioned -r 0..1")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
393
        self.assertContainsRe(result, "added:\n  hello.txt\n")
394
395
        self.build_tree(['world.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
396
        result = self.run_bzr("status --versioned -r 0")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
397
        self.assertContainsRe(result, "added:\n  hello.txt\n")
398
        self.assertNotContainsRe(result, "unknown:\n  world.txt\n")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
399
        result2 = self.run_bzr("status --versioned -r 0..")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
400
        self.assertEquals(result2, result)
401
2663.1.7 by Daniel Watkins
Capitalised short names.
402
    def test_status_SV(self):
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
403
        tree = self.make_branch_and_tree('.')
404
405
        self.build_tree(['hello.txt'])
2663.1.7 by Daniel Watkins
Capitalised short names.
406
        result = self.run_bzr("status -SV")[0]
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
407
        self.assertNotContainsRe(result, "hello.txt")
408
409
        tree.add("hello.txt")
2663.1.7 by Daniel Watkins
Capitalised short names.
410
        result = self.run_bzr("status -SV")[0]
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
411
        self.assertContainsRe(result, "[+]N  hello.txt\n")
412
413
        tree.commit(message="added")
2663.1.7 by Daniel Watkins
Capitalised short names.
414
        result = self.run_bzr("status -SV -r 0..1")[0]
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
415
        self.assertContainsRe(result, "[+]N  hello.txt\n")
416
417
        self.build_tree(['world.txt'])
2663.1.7 by Daniel Watkins
Capitalised short names.
418
        result = self.run_bzr("status -SV -r 0")[0]
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
419
        self.assertContainsRe(result, "[+]N  hello.txt\n")
420
2663.1.7 by Daniel Watkins
Capitalised short names.
421
        result2 = self.run_bzr("status -SV -r 0..")[0]
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
422
        self.assertEquals(result2, result)
423
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
424
    def assertStatusContains(self, pattern):
425
        """Run status, and assert it contains the given pattern"""
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
426
        result = self.run_bzr("status --short")[0]
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
427
        self.assertContainsRe(result, pattern)
428
429
    def test_kind_change_short(self):
430
        tree = self.make_branch_and_tree('.')
431
        self.build_tree(['file'])
432
        tree.add('file')
433
        tree.commit('added file')
434
        unlink('file')
435
        self.build_tree(['file/'])
436
        self.assertStatusContains('K  file => file/')
437
        tree.rename_one('file', 'directory')
438
        self.assertStatusContains('RK  file => directory/')
439
        rmdir('directory')
440
        self.assertStatusContains('RD  file => directory')
441
2745.4.1 by Lukáš Lalinsky
New option -C/--change for diff and status to show changes in one revision. (#56299)
442
    def test_status_illegal_revision_specifiers(self):
443
        out, err = self.run_bzr('status -r 1..23..123', retcode=3)
444
        self.assertContainsRe(err, 'one or two revision specifiers')
445
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
446
    def test_status_no_pending(self):
447
        a_tree = self.make_branch_and_tree('a')
448
        self.build_tree(['a/a'])
449
        a_tree.add('a')
450
        a_tree.commit('a')
451
        b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
452
        self.build_tree(['b/b'])
453
        b_tree.add('b')
454
        b_tree.commit('b')
455
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
456
        self.run_bzr('merge ../b', working_dir='a')
457
        out, err = self.run_bzr('status --no-pending', working_dir='a')
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
458
        self.assertEquals(out, "added:\n  b\n")
459
3636.1.1 by Robert Collins
Stop passing specific_file lists to show_tree_status when the specific
460
    def test_pending_specific_files(self):
461
        """With a specific file list, pending merges are not shown."""
462
        tree = self.make_branch_and_tree('tree')
463
        self.build_tree_contents([('tree/a', 'content of a\n')])
464
        tree.add('a')
465
        r1_id = tree.commit('one')
466
        alt = tree.bzrdir.sprout('alt').open_workingtree()
467
        self.build_tree_contents([('alt/a', 'content of a\nfrom alt\n')])
468
        alt_id = alt.commit('alt')
469
        tree.merge_from_branch(alt.branch)
3655.2.1 by Lukáš Lalinský
Fix test_pending_specific_files
470
        output = self.make_utf8_encoded_stringio()
3636.1.1 by Robert Collins
Stop passing specific_file lists to show_tree_status when the specific
471
        show_tree_status(tree, to_file=output)
472
        self.assertContainsRe(output.getvalue(), 'pending merges:')
473
        out, err = self.run_bzr('status tree/a')
474
        self.assertNotContainsRe(out, 'pending merges:')
475
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
476
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
477
class TestStatusEncodings(TestCaseWithTransport):
478
    
479
    def setUp(self):
480
        TestCaseWithTransport.setUp(self)
481
        self.user_encoding = bzrlib.user_encoding
482
        self.stdout = sys.stdout
483
484
    def tearDown(self):
485
        bzrlib.user_encoding = self.user_encoding
486
        sys.stdout = self.stdout
487
        TestCaseWithTransport.tearDown(self)
488
489
    def make_uncommitted_tree(self):
490
        """Build a branch with uncommitted unicode named changes in the cwd."""
491
        working_tree = self.make_branch_and_tree(u'.')
492
        filename = u'hell\u00d8'
493
        try:
494
            self.build_tree_contents([(filename, 'contents of hello')])
495
        except UnicodeEncodeError:
496
            raise TestSkipped("can't build unicode working tree in "
497
                "filesystem encoding %s" % sys.getfilesystemencoding())
498
        working_tree.add(filename)
499
        return working_tree
500
501
    def test_stdout_ascii(self):
502
        sys.stdout = StringIO()
503
        bzrlib.user_encoding = 'ascii'
504
        working_tree = self.make_uncommitted_tree()
505
        stdout, stderr = self.run_bzr("status")
506
507
        self.assertEquals(stdout, """\
508
added:
509
  hell?
510
""")
511
512
    def test_stdout_latin1(self):
513
        sys.stdout = StringIO()
514
        bzrlib.user_encoding = 'latin-1'
515
        working_tree = self.make_uncommitted_tree()
516
        stdout, stderr = self.run_bzr('status')
517
518
        self.assertEquals(stdout, u"""\
519
added:
520
  hell\u00d8
521
""".encode('latin-1'))
522