~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Martin Pool
  • Date: 2005-05-09 03:03:55 UTC
  • Revision ID: mbp@sourcefrog.net-20050509030355-ad6ab558d1362959
- Don't give an error if the trace file can't be opened

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, chdir
29
 
from tempfile import TemporaryFile
30
 
import codecs
31
 
 
32
 
import bzrlib.branch
33
 
from bzrlib.builtins import merge
34
 
import bzrlib.bzrdir as bzrdir
35
 
from bzrlib.osutils import pathjoin
36
 
from bzrlib.revisionspec import RevisionSpec
37
 
from bzrlib.status import show_tree_status
38
 
from bzrlib.tests import TestCaseWithTransport
39
 
from bzrlib.workingtree import WorkingTree
40
 
 
41
 
 
42
 
class BranchStatus(TestCaseWithTransport):
43
 
    
44
 
    def test_branch_status(self): 
45
 
        """Test basic branch status"""
46
 
        wt = self.make_branch_and_tree('.')
47
 
        b = wt.branch
48
 
 
49
 
        # status with nothing
50
 
        tof = StringIO()
51
 
        show_tree_status(wt, to_file=tof)
52
 
        self.assertEquals(tof.getvalue(), "")
53
 
 
54
 
        tof = StringIO()
55
 
        self.build_tree(['hello.c', 'bye.c'])
56
 
        wt.add_pending_merge('pending@pending-0-0')
57
 
        show_tree_status(wt, to_file=tof)
58
 
        tof.seek(0)
59
 
        self.assertEquals(tof.readlines(),
60
 
                          ['unknown:\n',
61
 
                           '  bye.c\n',
62
 
                           '  hello.c\n',
63
 
                           'pending merges:\n',
64
 
                           '  pending@pending-0-0\n'
65
 
                           ])
66
 
 
67
 
    def test_branch_status_revisions(self):
68
 
        """Tests branch status with revisions"""
69
 
        wt = self.make_branch_and_tree('.')
70
 
        b = wt.branch
71
 
 
72
 
        tof = StringIO()
73
 
        self.build_tree(['hello.c', 'bye.c'])
74
 
        wt.add('hello.c')
75
 
        wt.add('bye.c')
76
 
        wt.commit('Test message')
77
 
 
78
 
        tof = StringIO()
79
 
        revs =[]
80
 
        revs.append(RevisionSpec(0))
81
 
        
82
 
        show_tree_status(wt, to_file=tof, revision=revs)
83
 
        
84
 
        tof.seek(0)
85
 
        self.assertEquals(tof.readlines(),
86
 
                          ['added:\n',
87
 
                           '  bye.c\n',
88
 
                           '  hello.c\n'])
89
 
 
90
 
        self.build_tree(['more.c'])
91
 
        wt.add('more.c')
92
 
        wt.commit('Another test message')
93
 
        
94
 
        tof = StringIO()
95
 
        revs.append(RevisionSpec(1))
96
 
        
97
 
        show_tree_status(wt, to_file=tof, revision=revs)
98
 
        
99
 
        tof.seek(0)
100
 
        self.assertEquals(tof.readlines(),
101
 
                          ['added:\n',
102
 
                           '  bye.c\n',
103
 
                           '  hello.c\n'])
104
 
 
105
 
    def status_string(self, wt):
106
 
        # use a real file rather than StringIO because it doesn't handle
107
 
        # Unicode very well.
108
 
        tof = codecs.getwriter('utf-8')(TemporaryFile())
109
 
        show_tree_status(wt, to_file=tof)
110
 
        tof.seek(0)
111
 
        return tof.read().decode('utf-8')
112
 
 
113
 
    def test_pending(self):
114
 
        """Pending merges display works, including Unicode"""
115
 
        mkdir("./branch")
116
 
        wt = self.make_branch_and_tree('branch')
117
 
        b = wt.branch
118
 
        wt.commit("Empty commit 1")
119
 
        b_2_dir = b.bzrdir.sprout('./copy')
120
 
        b_2 = b_2_dir.open_branch()
121
 
        wt2 = b_2_dir.open_workingtree()
122
 
        wt.commit(u"\N{TIBETAN DIGIT TWO} Empty commit 2")
123
 
        merge(["./branch", -1], [None, None], this_dir = './copy')
124
 
        message = self.status_string(wt2)
125
 
        self.assert_(message.startswith("pending merges:\n"))
126
 
        self.assert_(message.endswith("Empty commit 2\n")) 
127
 
        wt2.commit("merged")
128
 
        # must be long to make sure we see elipsis at the end
129
 
        wt.commit("Empty commit 3 " + 
130
 
                   "blah blah blah blah " * 10)
131
 
        merge(["./branch", -1], [None, None], this_dir = './copy')
132
 
        message = self.status_string(wt2)
133
 
        self.assert_(message.startswith("pending merges:\n"))
134
 
        self.assert_("Empty commit 3" in message)
135
 
        self.assert_(message.endswith("...\n")) 
136
 
 
137
 
    def test_branch_status_specific_files(self): 
138
 
        """Tests branch status with given specific files"""
139
 
        wt = self.make_branch_and_tree('.')
140
 
        b = wt.branch
141
 
 
142
 
        self.build_tree(['directory/','directory/hello.c', 'bye.c','test.c','dir2/'])
143
 
        wt.add('directory')
144
 
        wt.add('test.c')
145
 
        wt.commit('testing')
146
 
        
147
 
        tof = StringIO()
148
 
        show_tree_status(wt, to_file=tof)
149
 
        tof.seek(0)
150
 
        self.assertEquals(tof.readlines(),
151
 
                          ['unknown:\n',
152
 
                           '  bye.c\n',
153
 
                           '  dir2\n',
154
 
                           '  directory/hello.c\n'
155
 
                           ])
156
 
 
157
 
        tof = StringIO()
158
 
        show_tree_status(wt, specific_files=['bye.c','test.c','absent.c'], 
159
 
                         to_file=tof)
160
 
        tof.seek(0)
161
 
        self.assertEquals(tof.readlines(),
162
 
                          ['unknown:\n',
163
 
                           '  bye.c\n'
164
 
                           ])
165
 
        
166
 
        tof = StringIO()
167
 
        show_tree_status(wt, specific_files=['directory'], to_file=tof)
168
 
        tof.seek(0)
169
 
        self.assertEquals(tof.readlines(),
170
 
                          ['unknown:\n',
171
 
                           '  directory/hello.c\n'
172
 
                           ])
173
 
        tof = StringIO()
174
 
        show_tree_status(wt, specific_files=['dir2'], to_file=tof)
175
 
        tof.seek(0)
176
 
        self.assertEquals(tof.readlines(),
177
 
                          ['unknown:\n',
178
 
                           '  dir2\n'
179
 
                           ])
180
 
 
181
 
class CheckoutStatus(BranchStatus):
182
 
 
183
 
    def setUp(self):
184
 
        super(CheckoutStatus, self).setUp()
185
 
        mkdir('codir')
186
 
        chdir('codir')
187
 
        
188
 
    def make_branch_and_tree(self, relpath):
189
 
        source = self.make_branch(pathjoin('..', relpath))
190
 
        checkout = bzrdir.BzrDirMetaFormat1().initialize(relpath)
191
 
        bzrlib.branch.BranchReferenceFormat().initialize(checkout, source)
192
 
        return checkout.create_workingtree()
193
 
 
194
 
 
195
 
class TestStatus(TestCaseWithTransport):
196
 
 
197
 
    def test_status(self):
198
 
        self.run_bzr("init")
199
 
        self.build_tree(['hello.txt'])
200
 
        result = self.run_bzr("status")[0]
201
 
        self.assert_("unknown:\n  hello.txt\n" in result, result)
202
 
        self.run_bzr("add", "hello.txt")
203
 
        result = self.run_bzr("status")[0]
204
 
        self.assert_("added:\n  hello.txt\n" in result, result)
205
 
        self.run_bzr("commit", "-m", "added")
206
 
        result = self.run_bzr("status", "-r", "0..1")[0]
207
 
        self.assert_("added:\n  hello.txt\n" in result, result)
208
 
        self.build_tree(['world.txt'])
209
 
        result = self.run_bzr("status", "-r", "0")[0]
210
 
        self.assert_("added:\n  hello.txt\n" \
211
 
                     "unknown:\n  world.txt\n" in result, result)
212
 
 
213
 
        result2 = self.run_bzr("status", "-r", "0..")[0]
214
 
        self.assertEquals(result2, result)
215
 
 
216