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