~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_status.py

[merge] Erik Bågfors: add --revision to bzr pull

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2005 by Canonical Ltd
 
2
 
 
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.
 
7
 
 
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.
 
12
 
 
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
 
 
18
"""Tests of status command.
 
19
 
 
20
Most of these depend on the particular formatting used.
 
21
As such they really are blackbox tests even though some of the 
 
22
tests are not using self.capture. If we add tests for the programmatic
 
23
interface later, they will be non blackbox tests.
 
24
"""
 
25
 
 
26
 
 
27
from cStringIO import StringIO
 
28
from os import mkdir
 
29
from tempfile import TemporaryFile
 
30
import codecs
 
31
 
 
32
from bzrlib.builtins import merge
 
33
from bzrlib.revisionspec import RevisionSpec
 
34
from bzrlib.status import show_status
 
35
from bzrlib.tests import TestCaseInTempDir
 
36
from bzrlib.workingtree import WorkingTree
 
37
 
 
38
 
 
39
class BranchStatus(TestCaseInTempDir):
 
40
    
 
41
    def test_branch_status(self): 
 
42
        """Test basic branch status"""
 
43
        wt = WorkingTree.create_standalone('.')
 
44
        b = wt.branch
 
45
 
 
46
        # status with nothing
 
47
        tof = StringIO()
 
48
        show_status(b, to_file=tof)
 
49
        self.assertEquals(tof.getvalue(), "")
 
50
 
 
51
        tof = StringIO()
 
52
        self.build_tree(['hello.c', 'bye.c'])
 
53
        wt.add_pending_merge('pending@pending-0-0')
 
54
        show_status(b, to_file=tof)
 
55
        tof.seek(0)
 
56
        self.assertEquals(tof.readlines(),
 
57
                          ['unknown:\n',
 
58
                           '  bye.c\n',
 
59
                           '  hello.c\n',
 
60
                           'pending merges:\n',
 
61
                           '  pending@pending-0-0\n'
 
62
                           ])
 
63
 
 
64
    def test_branch_status_revisions(self):
 
65
        """Tests branch status with revisions"""
 
66
        wt = WorkingTree.create_standalone('.')
 
67
        b = wt.branch
 
68
 
 
69
        tof = StringIO()
 
70
        self.build_tree(['hello.c', 'bye.c'])
 
71
        wt.add('hello.c')
 
72
        wt.add('bye.c')
 
73
        wt.commit('Test message')
 
74
 
 
75
        tof = StringIO()
 
76
        revs =[]
 
77
        revs.append(RevisionSpec(0))
 
78
        
 
79
        show_status(b, to_file=tof, revision=revs)
 
80
        
 
81
        tof.seek(0)
 
82
        self.assertEquals(tof.readlines(),
 
83
                          ['added:\n',
 
84
                           '  bye.c\n',
 
85
                           '  hello.c\n'])
 
86
 
 
87
        self.build_tree(['more.c'])
 
88
        wt.add('more.c')
 
89
        wt.commit('Another test message')
 
90
        
 
91
        tof = StringIO()
 
92
        revs.append(RevisionSpec(1))
 
93
        
 
94
        show_status(b, to_file=tof, revision=revs)
 
95
        
 
96
        tof.seek(0)
 
97
        self.assertEquals(tof.readlines(),
 
98
                          ['added:\n',
 
99
                           '  bye.c\n',
 
100
                           '  hello.c\n'])
 
101
 
 
102
    def status_string(self, branch):
 
103
        # use a real file rather than StringIO because it doesn't handle
 
104
        # Unicode very well.
 
105
        tof = codecs.getwriter('utf-8')(TemporaryFile())
 
106
        show_status(branch, to_file=tof)
 
107
        tof.seek(0)
 
108
        return tof.read().decode('utf-8')
 
109
 
 
110
    def test_pending(self):
 
111
        """Pending merges display works, including Unicode"""
 
112
        mkdir("./branch")
 
113
        wt = WorkingTree.create_standalone('branch')
 
114
        b = wt.branch
 
115
        wt.commit("Empty commit 1")
 
116
        b_2 = b.clone('./copy')
 
117
        wt.commit(u"\N{TIBETAN DIGIT TWO} Empty commit 2")
 
118
        merge(["./branch", -1], [None, None], this_dir = './copy')
 
119
        message = self.status_string(b_2)
 
120
        self.assert_(message.startswith("pending merges:\n"))
 
121
        self.assert_(message.endswith("Empty commit 2\n")) 
 
122
        b_2.working_tree().commit("merged")
 
123
        # must be long to make sure we see elipsis at the end
 
124
        b.working_tree().commit("Empty commit 3 " + 
 
125
                                "blah blah blah blah " * 10)
 
126
        merge(["./branch", -1], [None, None], this_dir = './copy')
 
127
        message = self.status_string(b_2)
 
128
        self.assert_(message.startswith("pending merges:\n"))
 
129
        self.assert_("Empty commit 3" in message)
 
130
        self.assert_(message.endswith("...\n")) 
 
131
 
 
132
    def test_branch_status_specific_files(self): 
 
133
        """Tests branch status with given specific files"""
 
134
        wt = WorkingTree.create_standalone('.')
 
135
        b = wt.branch
 
136
 
 
137
        self.build_tree(['directory/','directory/hello.c', 'bye.c','test.c','dir2/'])
 
138
        wt.add('directory')
 
139
        wt.add('test.c')
 
140
        wt.commit('testing')
 
141
        
 
142
        tof = StringIO()
 
143
        show_status(b, to_file=tof)
 
144
        tof.seek(0)
 
145
        self.assertEquals(tof.readlines(),
 
146
                          ['unknown:\n',
 
147
                           '  bye.c\n',
 
148
                           '  dir2\n',
 
149
                           '  directory/hello.c\n'
 
150
                           ])
 
151
 
 
152
        tof = StringIO()
 
153
        show_status(b, specific_files=['bye.c','test.c','absent.c'], to_file=tof)
 
154
        tof.seek(0)
 
155
        self.assertEquals(tof.readlines(),
 
156
                          ['unknown:\n',
 
157
                           '  bye.c\n'
 
158
                           ])
 
159
        
 
160
        tof = StringIO()
 
161
        show_status(b, specific_files=['directory'], to_file=tof)
 
162
        tof.seek(0)
 
163
        self.assertEquals(tof.readlines(),
 
164
                          ['unknown:\n',
 
165
                           '  directory/hello.c\n'
 
166
                           ])
 
167
        tof = StringIO()
 
168
        show_status(b, specific_files=['dir2'], to_file=tof)
 
169
        tof.seek(0)
 
170
        self.assertEquals(tof.readlines(),
 
171
                          ['unknown:\n',
 
172
                           '  dir2\n'
 
173
                           ])
 
174
 
 
175
 
 
176
class TestStatus(TestCaseInTempDir):
 
177
 
 
178
    def test_status(self):
 
179
        self.run_bzr("init")
 
180
        self.build_tree(['hello.txt'])
 
181
        result = self.run_bzr("status")[0]
 
182
        self.assert_("unknown:\n  hello.txt\n" in result, result)
 
183
        self.run_bzr("add", "hello.txt")
 
184
        result = self.run_bzr("status")[0]
 
185
        self.assert_("added:\n  hello.txt\n" in result, result)
 
186
        self.run_bzr("commit", "-m", "added")
 
187
        result = self.run_bzr("status", "-r", "0..1")[0]
 
188
        self.assert_("added:\n  hello.txt\n" in result, result)
 
189
        self.build_tree(['world.txt'])
 
190
        result = self.run_bzr("status", "-r", "0")[0]
 
191
        self.assert_("added:\n  hello.txt\n" \
 
192
                     "unknown:\n  world.txt\n" in result, result)
 
193
 
 
194
        result2 = self.run_bzr("status", "-r", "0..")[0]
 
195
        self.assertEquals(result2, result)
 
196
 
 
197