~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/selftest/teststatus.py

  • Committer: Martin Pool
  • Date: 2005-08-12 15:41:44 UTC
  • Revision ID: mbp@sourcefrog.net-20050812154144-bc98570a78b8f633
- merge in deferred revfile work

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
"""Tests of status command.
19
19
 
20
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
21
"""
25
22
 
26
23
 
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
 
24
from bzrlib.selftest import InTempDir
 
25
 
 
26
class BranchStatus(InTempDir):
 
27
    def runTest(self): 
 
28
        """Basic 'bzr mkdir' operation"""
 
29
        from cStringIO import StringIO
 
30
        from bzrlib.status import show_status
 
31
        from bzrlib.branch import Branch
 
32
        
 
33
        b = Branch('.', init=True)
48
34
 
49
35
        # status with nothing
50
36
        tof = StringIO()
51
 
        show_tree_status(wt, to_file=tof)
 
37
        show_status(b, to_file=tof)
52
38
        self.assertEquals(tof.getvalue(), "")
53
39
 
54
40
        tof = StringIO()
55
41
        self.build_tree(['hello.c', 'bye.c'])
56
 
        wt.add_pending_merge('pending@pending-0-0')
57
 
        show_tree_status(wt, to_file=tof)
 
42
        show_status(b, to_file=tof)
58
43
        tof.seek(0)
59
44
        self.assertEquals(tof.readlines(),
60
45
                          ['unknown:\n',
61
46
                           '  bye.c\n',
62
47
                           '  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
 
    def test_status_nonexistent_file(self):
182
 
        # files that don't exist in either the basis tree or working tree
183
 
        # should give an error
184
 
        wt = self.make_branch_and_tree('.')
185
 
        out, err = self.run_bzr('status', 'does-not-exist', retcode=3)
186
 
        self.assertContainsRe(err, r'do not exist.*does-not-exist')
187
 
 
188
 
 
189
 
class CheckoutStatus(BranchStatus):
190
 
 
191
 
    def setUp(self):
192
 
        super(CheckoutStatus, self).setUp()
193
 
        mkdir('codir')
194
 
        chdir('codir')
195
 
        
196
 
    def make_branch_and_tree(self, relpath):
197
 
        source = self.make_branch(pathjoin('..', relpath))
198
 
        checkout = bzrdir.BzrDirMetaFormat1().initialize(relpath)
199
 
        bzrlib.branch.BranchReferenceFormat().initialize(checkout, source)
200
 
        return checkout.create_workingtree()
201
 
 
202
 
 
203
 
class TestStatus(TestCaseWithTransport):
204
 
 
205
 
    def test_status(self):
206
 
        self.run_bzr("init")
207
 
        self.build_tree(['hello.txt'])
208
 
        result = self.run_bzr("status")[0]
209
 
        self.assert_("unknown:\n  hello.txt\n" in result, result)
210
 
        self.run_bzr("add", "hello.txt")
211
 
        result = self.run_bzr("status")[0]
212
 
        self.assert_("added:\n  hello.txt\n" in result, result)
213
 
        self.run_bzr("commit", "-m", "added")
214
 
        result = self.run_bzr("status", "-r", "0..1")[0]
215
 
        self.assert_("added:\n  hello.txt\n" in result, result)
216
 
        self.build_tree(['world.txt'])
217
 
        result = self.run_bzr("status", "-r", "0")[0]
218
 
        self.assert_("added:\n  hello.txt\n" \
219
 
                     "unknown:\n  world.txt\n" in result, result)
220
 
 
221
 
        result2 = self.run_bzr("status", "-r", "0..")[0]
222
 
        self.assertEquals(result2, result)
223
 
 
 
48
                           ])
224
49