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