/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
720 by Martin Pool
- start moving external tests into the testsuite framework
1
# Copyright (C) 2005 by Canonical Ltd
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
2
# -*- coding: utf-8 -*-
720 by Martin Pool
- start moving external tests into the testsuite framework
3
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
8
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
18
19
"""Black-box tests for bzr.
20
21
These check that it behaves properly when it's invoked through the regular
1403 by Robert Collins
merge from martin
22
command-line interface. This doesn't actually run a new interpreter but 
1393.1.45 by Martin Pool
doc
23
rather starts again from the run_bzr function.
720 by Martin Pool
- start moving external tests into the testsuite framework
24
"""
25
1393.1.45 by Martin Pool
doc
26
1185.1.25 by Robert Collins
merge David Clymer's patch for TestCaseInTestDir.runcmd
27
from cStringIO import StringIO
1185.1.41 by Robert Collins
massive patch from Alexander Belchenko - many PEP8 fixes, removes unused function uuid
28
import os
1185.10.1 by Aaron Bentley
Added --basis option to bzr branch
29
import shutil
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
30
import sys
974.1.71 by Aaron Bentley
Added test for pull
31
import os
1161 by Martin Pool
- add test that 'bzr add' reports the files as they're added
32
1141 by Martin Pool
- rename FunctionalTest to TestCaseInTempDir
33
from bzrlib.selftest import TestCaseInTempDir, BzrTestBase
1161 by Martin Pool
- add test that 'bzr add' reports the files as they're added
34
from bzrlib.branch import Branch
1399.1.4 by Robert Collins
move diff and symlink conditionals into inventory.py from diff.py
35
from bzrlib.osutils import has_symlinks
1400.1.1 by Robert Collins
implement a basic test for the ui branch command from http servers
36
from bzrlib.selftest.HTTPTestUtil import TestCaseWithWebserver
1161 by Martin Pool
- add test that 'bzr add' reports the files as they're added
37
898 by Martin Pool
- add new runbzr method for external tests
38
1141 by Martin Pool
- rename FunctionalTest to TestCaseInTempDir
39
class ExternalBase(TestCaseInTempDir):
1185.1.31 by Robert Collins
Change the use of run_bzr to run_bzr_captured in blackbox tests - inspired by David Clymers patch to change run_bzr usage to runbzr
40
1185.3.23 by Martin Pool
- run some previously external tests in process
41
    def runbzr(self, args, retcode=0, backtick=False):
898 by Martin Pool
- add new runbzr method for external tests
42
        if isinstance(args, basestring):
43
            args = args.split()
1074 by Martin Pool
- check for email address in BRANCH_ROOT/.bzr/email, so you can
44
45
        if backtick:
1185.3.23 by Martin Pool
- run some previously external tests in process
46
            return self.run_bzr_captured(args, retcode=retcode)[0]
1074 by Martin Pool
- check for email address in BRANCH_ROOT/.bzr/email, so you can
47
        else:
1185.3.23 by Martin Pool
- run some previously external tests in process
48
            return self.run_bzr_captured(args, retcode=retcode)
904 by Martin Pool
- more selftest external-command fixes
49
1142 by Martin Pool
- remove dead code from blackbox tests (pychecker)
50
1102 by Martin Pool
- merge test refactoring from robertc
51
class TestCommands(ExternalBase):
52
53
    def test_help_commands(self):
898 by Martin Pool
- add new runbzr method for external tests
54
        self.runbzr('--help')
55
        self.runbzr('help')
56
        self.runbzr('help commands')
57
        self.runbzr('help help')
58
        self.runbzr('commit -h')
727 by Martin Pool
- move more code to run external commands from testbzr to selftest
59
1102 by Martin Pool
- merge test refactoring from robertc
60
    def test_init_branch(self):
898 by Martin Pool
- add new runbzr method for external tests
61
        self.runbzr(['init'])
732 by Martin Pool
- move more tests into bzr selftest
62
1102 by Martin Pool
- merge test refactoring from robertc
63
    def test_whoami(self):
732 by Martin Pool
- move more tests into bzr selftest
64
        # this should always identify something, if only "john@localhost"
898 by Martin Pool
- add new runbzr method for external tests
65
        self.runbzr("whoami")
66
        self.runbzr("whoami --email")
1074 by Martin Pool
- check for email address in BRANCH_ROOT/.bzr/email, so you can
67
68
        self.assertEquals(self.runbzr("whoami --email",
69
                                      backtick=True).count('@'), 1)
70
        
1102 by Martin Pool
- merge test refactoring from robertc
71
    def test_whoami_branch(self):
72
        """branch specific user identity works."""
1074 by Martin Pool
- check for email address in BRANCH_ROOT/.bzr/email, so you can
73
        self.runbzr('init')
74
        f = file('.bzr/email', 'wt')
75
        f.write('Branch Identity <branch@identi.ty>')
76
        f.close()
1185.6.1 by John Arbash Meinel
Updated the whomai test to handle BZREMAIL
77
        bzr_email = os.environ.get('BZREMAIL')
78
        if bzr_email is not None:
79
            del os.environ['BZREMAIL']
1074 by Martin Pool
- check for email address in BRANCH_ROOT/.bzr/email, so you can
80
        whoami = self.runbzr("whoami",backtick=True)
81
        whoami_email = self.runbzr("whoami --email",backtick=True)
82
        self.assertTrue(whoami.startswith('Branch Identity <branch@identi.ty>'))
83
        self.assertTrue(whoami_email.startswith('branch@identi.ty'))
1185.6.1 by John Arbash Meinel
Updated the whomai test to handle BZREMAIL
84
        # Verify that the environment variable overrides the value 
85
        # in the file
86
        os.environ['BZREMAIL'] = 'Different ID <other@environ.ment>'
87
        whoami = self.runbzr("whoami",backtick=True)
88
        whoami_email = self.runbzr("whoami --email",backtick=True)
89
        self.assertTrue(whoami.startswith('Different ID <other@environ.ment>'))
90
        self.assertTrue(whoami_email.startswith('other@environ.ment'))
91
        if bzr_email is not None:
92
            os.environ['BZREMAIL'] = bzr_email
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
93
1102 by Martin Pool
- merge test refactoring from robertc
94
    def test_invalid_commands(self):
898 by Martin Pool
- add new runbzr method for external tests
95
        self.runbzr("pants", retcode=1)
96
        self.runbzr("--pants off", retcode=1)
97
        self.runbzr("diff --message foo", retcode=1)
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
98
1102 by Martin Pool
- merge test refactoring from robertc
99
    def test_empty_commit(self):
898 by Martin Pool
- add new runbzr method for external tests
100
        self.runbzr("init")
885 by Martin Pool
- commit command refuses unless something is changed or --unchanged is given
101
        self.build_tree(['hello.txt'])
898 by Martin Pool
- add new runbzr method for external tests
102
        self.runbzr("commit -m empty", retcode=1)
103
        self.runbzr("add hello.txt")
104
        self.runbzr("commit -m added")
885 by Martin Pool
- commit command refuses unless something is changed or --unchanged is given
105
1102 by Martin Pool
- merge test refactoring from robertc
106
    def test_ignore_patterns(self):
906 by Martin Pool
- split out black-box ignore commands
107
        from bzrlib.branch import Branch
108
        
1185.11.5 by John Arbash Meinel
Merged up-to-date against mainline, still broken.
109
        b = Branch.initialize('.')
906 by Martin Pool
- split out black-box ignore commands
110
        self.assertEquals(list(b.unknowns()), [])
111
112
        file('foo.tmp', 'wt').write('tmp files are ignored')
113
        self.assertEquals(list(b.unknowns()), [])
1185.3.26 by Martin Pool
- remove remaining external executions of bzr
114
        assert self.capture('unknowns') == ''
906 by Martin Pool
- split out black-box ignore commands
115
116
        file('foo.c', 'wt').write('int main() {}')
117
        self.assertEquals(list(b.unknowns()), ['foo.c'])
1185.3.26 by Martin Pool
- remove remaining external executions of bzr
118
        assert self.capture('unknowns') == 'foo.c\n'
906 by Martin Pool
- split out black-box ignore commands
119
120
        self.runbzr(['add', 'foo.c'])
1185.3.26 by Martin Pool
- remove remaining external executions of bzr
121
        assert self.capture('unknowns') == ''
906 by Martin Pool
- split out black-box ignore commands
122
123
        # 'ignore' works when creating the .bzignore file
124
        file('foo.blah', 'wt').write('blah')
125
        self.assertEquals(list(b.unknowns()), ['foo.blah'])
126
        self.runbzr('ignore *.blah')
127
        self.assertEquals(list(b.unknowns()), [])
1185.1.41 by Robert Collins
massive patch from Alexander Belchenko - many PEP8 fixes, removes unused function uuid
128
        assert file('.bzrignore', 'rU').read() == '*.blah\n'
906 by Martin Pool
- split out black-box ignore commands
129
130
        # 'ignore' works when then .bzrignore file already exists
131
        file('garh', 'wt').write('garh')
132
        self.assertEquals(list(b.unknowns()), ['garh'])
1185.3.26 by Martin Pool
- remove remaining external executions of bzr
133
        assert self.capture('unknowns') == 'garh\n'
906 by Martin Pool
- split out black-box ignore commands
134
        self.runbzr('ignore garh')
135
        self.assertEquals(list(b.unknowns()), [])
1185.1.41 by Robert Collins
massive patch from Alexander Belchenko - many PEP8 fixes, removes unused function uuid
136
        assert file('.bzrignore', 'rU').read() == '*.blah\ngarh\n'
1102 by Martin Pool
- merge test refactoring from robertc
137
138
    def test_revert(self):
139
        self.runbzr('init')
140
141
        file('hello', 'wt').write('foo')
142
        self.runbzr('add hello')
143
        self.runbzr('commit -m setup hello')
144
145
        file('goodbye', 'wt').write('baz')
146
        self.runbzr('add goodbye')
147
        self.runbzr('commit -m setup goodbye')
1092.2.18 by Robert Collins
merge from symlink branch
148
1102 by Martin Pool
- merge test refactoring from robertc
149
        file('hello', 'wt').write('bar')
150
        file('goodbye', 'wt').write('qux')
151
        self.runbzr('revert hello')
152
        self.check_file_contents('hello', 'foo')
153
        self.check_file_contents('goodbye', 'qux')
154
        self.runbzr('revert')
155
        self.check_file_contents('goodbye', 'baz')
156
157
        os.mkdir('revertdir')
158
        self.runbzr('add revertdir')
159
        self.runbzr('commit -m f')
160
        os.rmdir('revertdir')
161
        self.runbzr('revert')
162
1092.2.18 by Robert Collins
merge from symlink branch
163
        os.symlink('/unlikely/to/exist', 'symlink')
164
        self.runbzr('add symlink')
165
        self.runbzr('commit -m f')
166
        os.unlink('symlink')
167
        self.runbzr('revert')
168
        
1185.5.8 by John Arbash Meinel
Fixed bzr revert with the new RevisionSpec code.
169
        file('hello', 'wt').write('xyz')
170
        self.runbzr('commit -m xyz hello')
171
        self.runbzr('revert -r 1 hello')
172
        self.check_file_contents('hello', 'foo')
173
        self.runbzr('revert hello')
174
        self.check_file_contents('hello', 'xyz')
1185.8.5 by Aaron Bentley
Fixed non-tree-root bug in branch, revert, merge
175
        os.chdir('revertdir')
176
        self.runbzr('revert')
177
        os.chdir('..')
178
1185.5.8 by John Arbash Meinel
Fixed bzr revert with the new RevisionSpec code.
179
1185.1.8 by Robert Collins
David Clymers patch to use rename rather than mv for two argument non-directory target bzr mv calls.
180
    def test_mv_modes(self):
1102 by Martin Pool
- merge test refactoring from robertc
181
        """Test two modes of operation for mv"""
182
        from bzrlib.branch import Branch
1185.11.5 by John Arbash Meinel
Merged up-to-date against mainline, still broken.
183
        b = Branch.initialize('.')
1102 by Martin Pool
- merge test refactoring from robertc
184
        self.build_tree(['a', 'c', 'subdir/'])
1185.1.31 by Robert Collins
Change the use of run_bzr to run_bzr_captured in blackbox tests - inspired by David Clymers patch to change run_bzr usage to runbzr
185
        self.run_bzr_captured(['add', self.test_dir])
186
        self.run_bzr_captured(['mv', 'a', 'b'])
187
        self.run_bzr_captured(['mv', 'b', 'subdir'])
188
        self.run_bzr_captured(['mv', 'subdir/b', 'a'])
189
        self.run_bzr_captured(['mv', 'a', 'c', 'subdir'])
190
        self.run_bzr_captured(['mv', 'subdir/a', 'subdir/newa'])
1102 by Martin Pool
- merge test refactoring from robertc
191
192
    def test_main_version(self):
193
        """Check output from version command and master option is reasonable"""
194
        # output is intentionally passed through to stdout so that we
195
        # can see the version being tested
196
        output = self.runbzr('version', backtick=1)
197
        self.log('bzr version output:')
198
        self.log(output)
199
        self.assert_(output.startswith('bzr (bazaar-ng) '))
200
        self.assertNotEqual(output.index('Canonical'), -1)
201
        # make sure --version is consistent
202
        tmp_output = self.runbzr('--version', backtick=1)
203
        self.log('bzr --version output:')
204
        self.log(tmp_output)
205
        self.assertEquals(output, tmp_output)
906 by Martin Pool
- split out black-box ignore commands
206
1092.1.39 by Robert Collins
merge from mpool
207
    def example_branch(test):
208
        test.runbzr('init')
209
        file('hello', 'wt').write('foo')
210
        test.runbzr('add hello')
211
        test.runbzr('commit -m setup hello')
212
        file('goodbye', 'wt').write('baz')
213
        test.runbzr('add goodbye')
214
        test.runbzr('commit -m setup goodbye')
215
1185.12.1 by Aaron Bentley
Fixed export
216
    def test_export(self):
217
        os.mkdir('branch')
218
        os.chdir('branch')
219
        self.example_branch()
220
        self.runbzr('export ../latest')
221
        self.assertEqual(file('../latest/goodbye', 'rt').read(), 'baz')
222
        self.runbzr('export ../first -r 1')
223
        assert not os.path.exists('../first/goodbye')
224
        self.assertEqual(file('../first/hello', 'rt').read(), 'foo')
225
        self.runbzr('export ../first.gz -r 1')
226
        self.assertEqual(file('../first.gz/hello', 'rt').read(), 'foo')
227
        self.runbzr('export ../first.bz2 -r 1')
228
        self.assertEqual(file('../first.bz2/hello', 'rt').read(), 'foo')
229
        self.runbzr('export ../first.tar -r 1')
230
        assert os.path.isfile('../first.tar')
231
        from tarfile import TarFile
232
        tf = TarFile('../first.tar')
233
        assert 'first/hello' in tf.getnames(), tf.getnames()
234
        self.assertEqual(tf.extractfile('first/hello').read(), 'foo')
235
        self.runbzr('export ../first.tar.gz -r 1')
236
        assert os.path.isfile('../first.tar.gz')
237
        self.runbzr('export ../first.tbz2 -r 1')
238
        assert os.path.isfile('../first.tbz2')
239
        self.runbzr('export ../first.tar.bz2 -r 1')
240
        assert os.path.isfile('../first.tar.bz2')
241
        self.runbzr('export ../first.tar.tbz2 -r 1')
242
        assert os.path.isfile('../first.tar.tbz2')
243
        from bz2 import BZ2File
244
        tf = TarFile('../first.tar.tbz2', 
245
                     fileobj=BZ2File('../first.tar.tbz2', 'r'))
246
        assert 'first.tar/hello' in tf.getnames(), tf.getnames()
247
        self.assertEqual(tf.extractfile('first.tar/hello').read(), 'foo')
248
        self.runbzr('export ../first2.tar -r 1 --root pizza')
249
        tf = TarFile('../first2.tar')
250
        assert 'pizza/hello' in tf.getnames(), tf.getnames()
251
1185.4.1 by Lalo Martins
blackbox tests for diff
252
    def test_diff(self):
253
        self.example_branch()
254
        file('hello', 'wt').write('hello world!')
255
        self.runbzr('commit -m fixing hello')
256
        output = self.runbzr('diff -r 2..3', backtick=1)
257
        self.assert_('\n+hello world!' in output)
258
        output = self.runbzr('diff -r last:3..last:1', backtick=1)
259
        self.assert_('\n+baz' in output)
260
1185.8.4 by Aaron Bentley
Fixed branch -r
261
    def test_branch(self):
262
        """Branch from one branch to another."""
263
        os.mkdir('a')
264
        os.chdir('a')
265
        self.example_branch()
266
        os.chdir('..')
267
        self.runbzr('branch a b')
268
        self.runbzr('branch a c -r 1')
1185.10.1 by Aaron Bentley
Added --basis option to bzr branch
269
        os.chdir('b')
270
        self.runbzr('commit -m foo --unchanged')
271
        os.chdir('..')
1391 by Robert Collins
merge from integration
272
        # naughty - abstraction violations RBC 20050928  
1393 by Robert Collins
reenable remotebranch tests
273
        print "test_branch used to delete the stores, how is this meant to work ?"
274
        #shutil.rmtree('a/.bzr/revision-store')
275
        #shutil.rmtree('a/.bzr/inventory-store', ignore_errors=True)
276
        #shutil.rmtree('a/.bzr/text-store', ignore_errors=True)
1185.10.1 by Aaron Bentley
Added --basis option to bzr branch
277
        self.runbzr('branch a d --basis b')
1185.8.4 by Aaron Bentley
Fixed branch -r
278
1092.1.39 by Robert Collins
merge from mpool
279
    def test_merge(self):
280
        from bzrlib.branch import Branch
1139 by Martin Pool
- merge in merge improvements and additional tests
281
        
1092.1.39 by Robert Collins
merge from mpool
282
        os.mkdir('a')
283
        os.chdir('a')
284
        self.example_branch()
285
        os.chdir('..')
286
        self.runbzr('branch a b')
287
        os.chdir('b')
288
        file('goodbye', 'wt').write('quux')
289
        self.runbzr(['commit',  '-m',  "more u's are always good"])
290
291
        os.chdir('../a')
292
        file('hello', 'wt').write('quuux')
293
        # We can't merge when there are in-tree changes
294
        self.runbzr('merge ../b', retcode=1)
295
        self.runbzr(['commit', '-m', "Like an epidemic of u's"])
296
        self.runbzr('merge ../b')
297
        self.check_file_contents('goodbye', 'quux')
298
        # Merging a branch pulls its revision into the tree
1185.11.5 by John Arbash Meinel
Merged up-to-date against mainline, still broken.
299
        a = Branch.open('.')
300
        b = Branch.open('../b')
1241 by Martin Pool
- rename last_patch to last_revision
301
        a.get_revision_xml(b.last_revision())
1139 by Martin Pool
- merge in merge improvements and additional tests
302
        self.log('pending merges: %s', a.pending_merges())
1241 by Martin Pool
- rename last_patch to last_revision
303
        #        assert a.pending_merges() == [b.last_revision()], "Assertion %s %s" \
304
        #        % (a.pending_merges(), b.last_revision())
1161 by Martin Pool
- add test that 'bzr add' reports the files as they're added
305
1185.10.8 by Aaron Bentley
Conflict handling where OTHER is deleted
306
    def test_merge_with_missing_file(self):
307
        """Merge handles missing file conflicts"""
308
        os.mkdir('a')
309
        os.chdir('a')
310
        os.mkdir('sub')
311
        print >> file('sub/a.txt', 'wb'), "hello"
1185.10.10 by Aaron Bentley
Handled modified files missing from THIS
312
        print >> file('b.txt', 'wb'), "hello"
313
        print >> file('sub/c.txt', 'wb'), "hello"
1185.10.8 by Aaron Bentley
Conflict handling where OTHER is deleted
314
        self.runbzr('init')
315
        self.runbzr('add')
316
        self.runbzr(('commit', '-m', 'added a'))
317
        self.runbzr('branch . ../b')
318
        print >> file('sub/a.txt', 'ab'), "there"
1185.10.10 by Aaron Bentley
Handled modified files missing from THIS
319
        print >> file('b.txt', 'ab'), "there"
320
        print >> file('sub/c.txt', 'ab'), "there"
1185.10.8 by Aaron Bentley
Conflict handling where OTHER is deleted
321
        self.runbzr(('commit', '-m', 'Added there'))
322
        os.unlink('sub/a.txt')
1185.10.10 by Aaron Bentley
Handled modified files missing from THIS
323
        os.unlink('sub/c.txt')
1185.10.8 by Aaron Bentley
Conflict handling where OTHER is deleted
324
        os.rmdir('sub')
1185.10.10 by Aaron Bentley
Handled modified files missing from THIS
325
        os.unlink('b.txt')
1185.10.8 by Aaron Bentley
Conflict handling where OTHER is deleted
326
        self.runbzr(('commit', '-m', 'Removed a.txt'))
327
        os.chdir('../b')
328
        print >> file('sub/a.txt', 'ab'), "something"
1185.10.10 by Aaron Bentley
Handled modified files missing from THIS
329
        print >> file('b.txt', 'ab'), "something"
330
        print >> file('sub/c.txt', 'ab'), "something"
1185.10.8 by Aaron Bentley
Conflict handling where OTHER is deleted
331
        self.runbzr(('commit', '-m', 'Modified a.txt'))
332
        self.runbzr('merge ../a/')
333
        assert os.path.exists('sub/a.txt.THIS')
334
        assert os.path.exists('sub/a.txt.BASE')
1185.10.10 by Aaron Bentley
Handled modified files missing from THIS
335
        os.chdir('../a')
336
        self.runbzr('merge ../b/')
337
        assert os.path.exists('sub/a.txt.OTHER')
338
        assert os.path.exists('sub/a.txt.BASE')
1185.10.8 by Aaron Bentley
Conflict handling where OTHER is deleted
339
974.1.71 by Aaron Bentley
Added test for pull
340
    def test_pull(self):
341
        """Pull changes from one branch to another."""
342
        os.mkdir('a')
343
        os.chdir('a')
344
345
        self.example_branch()
974.1.79 by Aaron Bentley
Fixed issues with pull not having a default location after branch
346
        self.runbzr('pull', retcode=1)
347
        self.runbzr('missing', retcode=1)
348
        self.runbzr('missing .')
349
        self.runbzr('missing')
350
        self.runbzr('pull')
351
        self.runbzr('pull /', retcode=1)
352
        self.runbzr('pull')
353
974.1.71 by Aaron Bentley
Added test for pull
354
        os.chdir('..')
355
        self.runbzr('branch a b')
356
        os.chdir('b')
974.1.79 by Aaron Bentley
Fixed issues with pull not having a default location after branch
357
        self.runbzr('pull')
1185.8.5 by Aaron Bentley
Fixed non-tree-root bug in branch, revert, merge
358
        os.mkdir('subdir')
359
        self.runbzr('add subdir')
974.1.71 by Aaron Bentley
Added test for pull
360
        self.runbzr('commit -m blah --unchanged')
361
        os.chdir('../a')
1185.11.5 by John Arbash Meinel
Merged up-to-date against mainline, still broken.
362
        a = Branch.open('.')
363
        b = Branch.open('../b')
974.1.71 by Aaron Bentley
Added test for pull
364
        assert a.revision_history() == b.revision_history()[:-1]
365
        self.runbzr('pull ../b')
366
        assert a.revision_history() == b.revision_history()
367
        self.runbzr('commit -m blah2 --unchanged')
368
        os.chdir('../b')
369
        self.runbzr('commit -m blah3 --unchanged')
370
        self.runbzr('pull ../a', retcode=1)
1390 by Robert Collins
pair programming worx... merge integration and weave
371
        print "DECIDE IF PULL CAN CONVERGE, blackbox.py"
1391 by Robert Collins
merge from integration
372
        return
974.1.74 by Aaron Bentley
Made pull work after remote branch has merged latest revision
373
        os.chdir('../a')
374
        self.runbzr('merge ../b')
375
        self.runbzr('commit -m blah4 --unchanged')
1185.8.5 by Aaron Bentley
Fixed non-tree-root bug in branch, revert, merge
376
        os.chdir('../b/subdir')
377
        self.runbzr('pull ../../a')
974.1.74 by Aaron Bentley
Made pull work after remote branch has merged latest revision
378
        assert a.revision_history()[-1] == b.revision_history()[-1]
1185.10.7 by Aaron Bentley
Fixed bug where pull throws DivergedBranches if branch is newer than upstream
379
        self.runbzr('commit -m blah5 --unchanged')
380
        self.runbzr('commit -m blah6 --unchanged')
381
        os.chdir('..')
382
        self.runbzr('pull ../a')
383
        os.chdir('../a')
384
        self.runbzr('commit -m blah7 --unchanged')
385
        self.runbzr('merge ../b')
386
        self.runbzr('commit -m blah8 --unchanged')
387
        self.runbzr('pull ../b')
388
        self.runbzr('pull ../b')
974.1.74 by Aaron Bentley
Made pull work after remote branch has merged latest revision
389
        
1161 by Martin Pool
- add test that 'bzr add' reports the files as they're added
390
    def test_add_reports(self):
391
        """add command prints the names of added files."""
1185.11.5 by John Arbash Meinel
Merged up-to-date against mainline, still broken.
392
        b = Branch.initialize('.')
1161 by Martin Pool
- add test that 'bzr add' reports the files as they're added
393
        self.build_tree(['top.txt', 'dir/', 'dir/sub.txt'])
1185.1.31 by Robert Collins
Change the use of run_bzr to run_bzr_captured in blackbox tests - inspired by David Clymers patch to change run_bzr usage to runbzr
394
        out = self.run_bzr_captured(['add'], retcode = 0)[0]
1161 by Martin Pool
- add test that 'bzr add' reports the files as they're added
395
        # the ordering is not defined at the moment
1185.1.31 by Robert Collins
Change the use of run_bzr to run_bzr_captured in blackbox tests - inspired by David Clymers patch to change run_bzr usage to runbzr
396
        results = sorted(out.rstrip('\n').split('\n'))
1161 by Martin Pool
- add test that 'bzr add' reports the files as they're added
397
        self.assertEquals(['added dir',
1185.1.41 by Robert Collins
massive patch from Alexander Belchenko - many PEP8 fixes, removes unused function uuid
398
                           'added dir'+os.sep+'sub.txt',
1161 by Martin Pool
- add test that 'bzr add' reports the files as they're added
399
                           'added top.txt',],
400
                          results)
401
1185.3.20 by Martin Pool
- run_bzr_captured also includes logged errors in
402
    def test_unknown_command(self):
403
        """Handling of unknown command."""
404
        out, err = self.run_bzr_captured(['fluffy-badger'],
405
                                         retcode=1)
406
        self.assertEquals(out, '')
407
        err.index('unknown command')
1393.1.45 by Martin Pool
doc
408
1185.3.20 by Martin Pool
- run_bzr_captured also includes logged errors in
409
1092.2.6 by Robert Collins
symlink support updated to work
410
def listdir_sorted(dir):
411
    L = os.listdir(dir)
412
    L.sort()
413
    return L
414
1092.2.12 by Robert Collins
merge from HEAD
415
904 by Martin Pool
- more selftest external-command fixes
416
class OldTests(ExternalBase):
1092.1.39 by Robert Collins
merge from mpool
417
    """old tests moved from ./testbzr."""
418
1102 by Martin Pool
- merge test refactoring from robertc
419
    def test_bzr(self):
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
420
        from os import chdir, mkdir
421
        from os.path import exists
422
904 by Martin Pool
- more selftest external-command fixes
423
        runbzr = self.runbzr
1185.3.26 by Martin Pool
- remove remaining external executions of bzr
424
        capture = self.capture
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
425
        progress = self.log
426
427
        progress("basic branch creation")
904 by Martin Pool
- more selftest external-command fixes
428
        mkdir('branch1')
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
429
        chdir('branch1')
898 by Martin Pool
- add new runbzr method for external tests
430
        runbzr('init')
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
431
1185.3.25 by Martin Pool
- run blackbox tests in-process
432
        self.assertEquals(capture('root').rstrip(),
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
433
                          os.path.join(self.test_dir, 'branch1'))
434
435
        progress("status of new file")
436
437
        f = file('test.txt', 'wt')
438
        f.write('hello world!\n')
439
        f.close()
440
1185.3.25 by Martin Pool
- run blackbox tests in-process
441
        self.assertEquals(capture('unknowns'), 'test.txt\n')
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
442
1185.3.25 by Martin Pool
- run blackbox tests in-process
443
        out = capture("status")
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
444
        assert out == 'unknown:\n  test.txt\n'
445
1185.3.25 by Martin Pool
- run blackbox tests in-process
446
        out = capture("status --all")
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
447
        assert out == "unknown:\n  test.txt\n"
448
1185.3.25 by Martin Pool
- run blackbox tests in-process
449
        out = capture("status test.txt --all")
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
450
        assert out == "unknown:\n  test.txt\n"
451
452
        f = file('test2.txt', 'wt')
453
        f.write('goodbye cruel world...\n')
454
        f.close()
455
1185.3.25 by Martin Pool
- run blackbox tests in-process
456
        out = capture("status test.txt")
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
457
        assert out == "unknown:\n  test.txt\n"
458
1185.3.25 by Martin Pool
- run blackbox tests in-process
459
        out = capture("status")
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
460
        assert out == ("unknown:\n"
461
                       "  test.txt\n"
462
                       "  test2.txt\n")
463
464
        os.unlink('test2.txt')
465
466
        progress("command aliases")
1185.3.25 by Martin Pool
- run blackbox tests in-process
467
        out = capture("st --all")
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
468
        assert out == ("unknown:\n"
469
                       "  test.txt\n")
470
1185.3.25 by Martin Pool
- run blackbox tests in-process
471
        out = capture("stat")
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
472
        assert out == ("unknown:\n"
473
                       "  test.txt\n")
474
475
        progress("command help")
898 by Martin Pool
- add new runbzr method for external tests
476
        runbzr("help st")
477
        runbzr("help")
478
        runbzr("help commands")
479
        runbzr("help slartibartfast", 1)
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
480
1185.3.25 by Martin Pool
- run blackbox tests in-process
481
        out = capture("help ci")
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
482
        out.index('aliases: ')
483
484
        progress("can't rename unversioned file")
898 by Martin Pool
- add new runbzr method for external tests
485
        runbzr("rename test.txt new-test.txt", 1)
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
486
487
        progress("adding a file")
488
898 by Martin Pool
- add new runbzr method for external tests
489
        runbzr("add test.txt")
1185.3.25 by Martin Pool
- run blackbox tests in-process
490
        assert capture("unknowns") == ''
491
        assert capture("status --all") == ("added:\n"
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
492
                                                "  test.txt\n")
493
494
        progress("rename newly-added file")
898 by Martin Pool
- add new runbzr method for external tests
495
        runbzr("rename test.txt hello.txt")
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
496
        assert os.path.exists("hello.txt")
497
        assert not os.path.exists("test.txt")
498
1185.3.25 by Martin Pool
- run blackbox tests in-process
499
        assert capture("revno") == '0\n'
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
500
501
        progress("add first revision")
904 by Martin Pool
- more selftest external-command fixes
502
        runbzr(['commit', '-m', 'add first revision'])
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
503
504
        progress("more complex renames")
505
        os.mkdir("sub1")
898 by Martin Pool
- add new runbzr method for external tests
506
        runbzr("rename hello.txt sub1", 1)
507
        runbzr("rename hello.txt sub1/hello.txt", 1)
508
        runbzr("move hello.txt sub1", 1)
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
509
898 by Martin Pool
- add new runbzr method for external tests
510
        runbzr("add sub1")
511
        runbzr("rename sub1 sub2")
512
        runbzr("move hello.txt sub2")
1185.3.25 by Martin Pool
- run blackbox tests in-process
513
        assert capture("relpath sub2/hello.txt") == os.path.join("sub2", "hello.txt\n")
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
514
515
        assert exists("sub2")
516
        assert exists("sub2/hello.txt")
517
        assert not exists("sub1")
518
        assert not exists("hello.txt")
519
898 by Martin Pool
- add new runbzr method for external tests
520
        runbzr(['commit', '-m', 'commit with some things moved to subdirs'])
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
521
522
        mkdir("sub1")
898 by Martin Pool
- add new runbzr method for external tests
523
        runbzr('add sub1')
524
        runbzr('move sub2/hello.txt sub1')
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
525
        assert not exists('sub2/hello.txt')
526
        assert exists('sub1/hello.txt')
898 by Martin Pool
- add new runbzr method for external tests
527
        runbzr('move sub2 sub1')
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
528
        assert not exists('sub2')
529
        assert exists('sub1/sub2')
530
898 by Martin Pool
- add new runbzr method for external tests
531
        runbzr(['commit', '-m', 'rename nested subdirectories'])
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
532
533
        chdir('sub1/sub2')
1185.3.25 by Martin Pool
- run blackbox tests in-process
534
        self.assertEquals(capture('root')[:-1],
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
535
                          os.path.join(self.test_dir, 'branch1'))
898 by Martin Pool
- add new runbzr method for external tests
536
        runbzr('move ../hello.txt .')
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
537
        assert exists('./hello.txt')
1185.3.25 by Martin Pool
- run blackbox tests in-process
538
        self.assertEquals(capture('relpath hello.txt'),
539
                          os.path.join('sub1', 'sub2', 'hello.txt') + '\n')
540
        assert capture('relpath ../../sub1/sub2/hello.txt') == os.path.join('sub1', 'sub2', 'hello.txt\n')
898 by Martin Pool
- add new runbzr method for external tests
541
        runbzr(['commit', '-m', 'move to parent directory'])
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
542
        chdir('..')
1185.3.25 by Martin Pool
- run blackbox tests in-process
543
        assert capture('relpath sub2/hello.txt') == os.path.join('sub1', 'sub2', 'hello.txt\n')
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
544
898 by Martin Pool
- add new runbzr method for external tests
545
        runbzr('move sub2/hello.txt .')
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
546
        assert exists('hello.txt')
547
548
        f = file('hello.txt', 'wt')
549
        f.write('some nice new content\n')
550
        f.close()
551
552
        f = file('msg.tmp', 'wt')
553
        f.write('this is my new commit\n')
554
        f.close()
555
898 by Martin Pool
- add new runbzr method for external tests
556
        runbzr('commit -F msg.tmp')
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
557
1185.3.25 by Martin Pool
- run blackbox tests in-process
558
        assert capture('revno') == '5\n'
898 by Martin Pool
- add new runbzr method for external tests
559
        runbzr('export -r 5 export-5.tmp')
560
        runbzr('export export.tmp')
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
561
898 by Martin Pool
- add new runbzr method for external tests
562
        runbzr('log')
563
        runbzr('log -v')
909.1.5 by Aaron Bentley
Fixed log -v (mostly)
564
        runbzr('log -v --forward')
565
        runbzr('log -m', retcode=1)
1185.3.25 by Martin Pool
- run blackbox tests in-process
566
        log_out = capture('log -m commit')
909.1.5 by Aaron Bentley
Fixed log -v (mostly)
567
        assert "this is my new commit" in log_out
568
        assert "rename nested" not in log_out
569
        assert 'revision-id' not in log_out
1185.3.25 by Martin Pool
- run blackbox tests in-process
570
        assert 'revision-id' in capture('log --show-ids -m commit')
736 by Martin Pool
- move old blackbox code from testbzr into bzrlib.selftest.blackbox
571
572
573
        progress("file with spaces in name")
574
        mkdir('sub directory')
575
        file('sub directory/file with spaces ', 'wt').write('see how this works\n')
898 by Martin Pool
- add new runbzr method for external tests
576
        runbzr('add .')
577
        runbzr('diff')
578
        runbzr('commit -m add-spaces')
579
        runbzr('check')
580
581
        runbzr('log')
582
        runbzr('log --forward')
583
584
        runbzr('info')
1092.1.35 by Robert Collins
merge from mpool up to rev 1110
585
1092.2.6 by Robert Collins
symlink support updated to work
586
        if has_symlinks():
587
            progress("symlinks")
588
            mkdir('symlinks')
589
            chdir('symlinks')
590
            runbzr('init')
591
            os.symlink("NOWHERE1", "link1")
592
            runbzr('add link1')
1092.3.4 by Robert Collins
update symlink branch to integration
593
            assert self.capture('unknowns') == ''
1092.2.6 by Robert Collins
symlink support updated to work
594
            runbzr(['commit', '-m', '1: added symlink link1'])
595
    
596
            mkdir('d1')
597
            runbzr('add d1')
1092.3.4 by Robert Collins
update symlink branch to integration
598
            assert self.capture('unknowns') == ''
1092.2.6 by Robert Collins
symlink support updated to work
599
            os.symlink("NOWHERE2", "d1/link2")
1092.3.4 by Robert Collins
update symlink branch to integration
600
            assert self.capture('unknowns') == 'd1/link2\n'
1092.2.6 by Robert Collins
symlink support updated to work
601
            # is d1/link2 found when adding d1
602
            runbzr('add d1')
1092.3.4 by Robert Collins
update symlink branch to integration
603
            assert self.capture('unknowns') == ''
1092.2.6 by Robert Collins
symlink support updated to work
604
            os.symlink("NOWHERE3", "d1/link3")
1092.3.4 by Robert Collins
update symlink branch to integration
605
            assert self.capture('unknowns') == 'd1/link3\n'
1092.2.6 by Robert Collins
symlink support updated to work
606
            runbzr(['commit', '-m', '2: added dir, symlink'])
607
    
608
            runbzr('rename d1 d2')
609
            runbzr('move d2/link2 .')
610
            runbzr('move link1 d2')
611
            assert os.readlink("./link2") == "NOWHERE2"
612
            assert os.readlink("d2/link1") == "NOWHERE1"
613
            runbzr('add d2/link3')
614
            runbzr('diff')
615
            runbzr(['commit', '-m', '3: rename of dir, move symlinks, add link3'])
616
    
617
            os.unlink("link2")
618
            os.symlink("TARGET 2", "link2")
619
            os.unlink("d2/link1")
620
            os.symlink("TARGET 1", "d2/link1")
621
            runbzr('diff')
1092.3.4 by Robert Collins
update symlink branch to integration
622
            assert self.capture("relpath d2/link1") == "d2/link1\n"
1092.2.6 by Robert Collins
symlink support updated to work
623
            runbzr(['commit', '-m', '4: retarget of two links'])
624
    
625
            runbzr('remove d2/link1')
1092.3.4 by Robert Collins
update symlink branch to integration
626
            assert self.capture('unknowns') == 'd2/link1\n'
1092.2.20 by Robert Collins
symlink and weaves, whaddya know
627
            runbzr(['commit', '-m', '5: remove d2/link1'])
1092.2.6 by Robert Collins
symlink support updated to work
628
    
629
            os.mkdir("d1")
630
            runbzr('add d1')
631
            runbzr('rename d2/link3 d1/link3new')
1092.3.4 by Robert Collins
update symlink branch to integration
632
            assert self.capture('unknowns') == 'd2/link1\n'
1092.2.6 by Robert Collins
symlink support updated to work
633
            runbzr(['commit', '-m', '6: remove d2/link1, move/rename link3'])
634
            
635
            runbzr(['check'])
636
            
637
            runbzr(['export', '-r', '1', 'exp1.tmp'])
638
            chdir("exp1.tmp")
639
            assert listdir_sorted(".") == [ "link1" ]
640
            assert os.readlink("link1") == "NOWHERE1"
641
            chdir("..")
642
            
643
            runbzr(['export', '-r', '2', 'exp2.tmp'])
644
            chdir("exp2.tmp")
645
            assert listdir_sorted(".") == [ "d1", "link1" ]
646
            chdir("..")
647
            
648
            runbzr(['export', '-r', '3', 'exp3.tmp'])
649
            chdir("exp3.tmp")
650
            assert listdir_sorted(".") == [ "d2", "link2" ]
651
            assert listdir_sorted("d2") == [ "link1", "link3" ]
652
            assert os.readlink("d2/link1") == "NOWHERE1"
653
            assert os.readlink("link2")    == "NOWHERE2"
654
            chdir("..")
655
            
656
            runbzr(['export', '-r', '4', 'exp4.tmp'])
657
            chdir("exp4.tmp")
658
            assert listdir_sorted(".") == [ "d2", "link2" ]
659
            assert os.readlink("d2/link1") == "TARGET 1"
660
            assert os.readlink("link2")    == "TARGET 2"
661
            assert listdir_sorted("d2") == [ "link1", "link3" ]
662
            chdir("..")
663
            
664
            runbzr(['export', '-r', '5', 'exp5.tmp'])
665
            chdir("exp5.tmp")
666
            assert listdir_sorted(".") == [ "d2", "link2" ]
667
            assert os.path.islink("link2")
668
            assert listdir_sorted("d2")== [ "link3" ]
669
            chdir("..")
670
            
671
            runbzr(['export', '-r', '6', 'exp6.tmp'])
672
            chdir("exp6.tmp")
673
            assert listdir_sorted(".") == [ "d1", "d2", "link2" ]
674
            assert listdir_sorted("d1") == [ "link3new" ]
675
            assert listdir_sorted("d2") == []
676
            assert os.readlink("d1/link3new") == "NOWHERE3"
677
            chdir("..")
678
        else:
679
            progress("skipping symlink tests")
1400.1.1 by Robert Collins
implement a basic test for the ui branch command from http servers
680
681
682
class HttpTests(TestCaseWithWebserver):
683
    """Test bzr ui commands against remote branches."""
684
685
    def test_branch(self):
686
        os.mkdir('from')
687
        branch = Branch.initialize('from')
688
        branch.commit('empty commit for nonsense', allow_pointless=True)
689
        url = self.get_remote_url('from')
690
        self.run_bzr('branch', url, 'to')
691
        branch = Branch.open('to')
692
        self.assertEqual(1, len(branch.revision_history()))