15
15
# along with this program; if not, write to the Free Software
16
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
# Mr. Smoketoomuch: I'm sorry?
19
# Mr. Bounder: You'd better cut down a little then.
20
# Mr. Smoketoomuch: Oh, I see! Smoke too much so I'd better cut down a little
19
23
"""Black-box tests for bzr.
27
31
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
28
32
# Note: Please don't add new tests here, it's too big and bulky. Instead add
29
# them into small suites for the particular function that's tested.
33
# them into small suites in bzrlib.tests.blackbox.test_FOO for the particular
34
# UI command/aspect that is being tested.
32
37
from cStringIO import StringIO
38
43
from bzrlib.branch import Branch
39
44
from bzrlib.clone import copy_branch
40
45
from bzrlib.errors import BzrCommandError
41
from bzrlib.osutils import has_symlinks
42
from bzrlib.selftest import TestCaseInTempDir, BzrTestBase
43
from bzrlib.selftest.HTTPTestUtil import TestCaseWithWebserver
46
class ExternalBase(TestCaseInTempDir):
48
def runbzr(self, args, retcode=0, backtick=False):
49
if isinstance(args, basestring):
53
return self.run_bzr_captured(args, retcode=retcode)[0]
55
return self.run_bzr_captured(args, retcode=retcode)
46
from bzrlib.osutils import has_symlinks, pathjoin
47
from bzrlib.tests.HTTPTestUtil import TestCaseWithWebserver
48
from bzrlib.tests.blackbox import ExternalBase
58
50
class TestCommands(ExternalBase):
223
215
os.rmdir('revertdir')
224
216
self.runbzr('revert')
226
os.symlink('/unlikely/to/exist', 'symlink')
227
self.runbzr('add symlink')
228
self.runbzr('commit -m f')
230
self.runbzr('revert')
231
self.failUnlessExists('symlink')
233
os.symlink('a-different-path', 'symlink')
234
self.runbzr('revert')
235
self.assertEqual('/unlikely/to/exist',
236
os.readlink('symlink'))
219
os.symlink('/unlikely/to/exist', 'symlink')
220
self.runbzr('add symlink')
221
self.runbzr('commit -m f')
223
self.runbzr('revert')
224
self.failUnlessExists('symlink')
226
os.symlink('a-different-path', 'symlink')
227
self.runbzr('revert')
228
self.assertEqual('/unlikely/to/exist',
229
os.readlink('symlink'))
231
self.log("skipping revert symlink tests")
238
233
file('hello', 'wt').write('xyz')
239
234
self.runbzr('commit -m xyz hello')
310
305
self.assertEqual(file('../first.gz/hello', 'rt').read(), 'foo')
311
306
self.runbzr('export ../first.bz2 -r 1')
312
307
self.assertEqual(file('../first.bz2/hello', 'rt').read(), 'foo')
309
from tarfile import TarFile
313
310
self.runbzr('export ../first.tar -r 1')
314
311
self.assert_(os.path.isfile('../first.tar'))
315
from tarfile import TarFile
316
312
tf = TarFile('../first.tar')
317
313
self.assert_('first/hello' in tf.getnames(), tf.getnames())
318
314
self.assertEqual(tf.extractfile('first/hello').read(), 'foo')
324
320
self.assert_(os.path.isfile('../first.tar.bz2'))
325
321
self.runbzr('export ../first.tar.tbz2 -r 1')
326
322
self.assert_(os.path.isfile('../first.tar.tbz2'))
327
324
from bz2 import BZ2File
328
325
tf = TarFile('../first.tar.tbz2',
329
326
fileobj=BZ2File('../first.tar.tbz2', 'r'))
333
330
tf = TarFile('../first2.tar')
334
331
self.assert_('pizza/hello' in tf.getnames(), tf.getnames())
333
from zipfile import ZipFile
334
self.runbzr('export ../first.zip -r 1')
335
self.failUnlessExists('../first.zip')
336
zf = ZipFile('../first.zip')
337
self.assert_('first/hello' in zf.namelist(), zf.namelist())
338
self.assertEqual(zf.read('first/hello'), 'foo')
340
self.runbzr('export ../first2.zip -r 1 --root pizza')
341
zf = ZipFile('../first2.zip')
342
self.assert_('pizza/hello' in zf.namelist(), zf.namelist())
344
self.runbzr('export ../first-zip --format=zip -r 1')
345
zf = ZipFile('../first-zip')
346
self.assert_('first-zip/hello' in zf.namelist(), zf.namelist())
336
348
def test_diff(self):
337
349
self.example_branch()
338
350
file('hello', 'wt').write('hello world!')
468
480
self.assert_(os.path.exists('sub/a.txt.OTHER'))
469
481
self.assert_(os.path.exists('sub/a.txt.BASE'))
472
"""Pull changes from one branch to another."""
476
self.example_branch()
477
self.runbzr('pull', retcode=3)
478
self.runbzr('missing', retcode=3)
479
self.runbzr('missing .')
480
self.runbzr('missing')
482
self.runbzr('pull /', retcode=3)
486
self.runbzr('branch a b')
490
self.runbzr('add subdir')
491
self.runbzr('commit -m blah --unchanged')
494
b = Branch.open('../b')
495
self.assertEquals(a.revision_history(), b.revision_history()[:-1])
496
self.runbzr('pull ../b')
497
self.assertEquals(a.revision_history(), b.revision_history())
498
self.runbzr('commit -m blah2 --unchanged')
500
self.runbzr('commit -m blah3 --unchanged')
502
self.runbzr('pull ../a', retcode=3)
504
self.runbzr('branch b overwriteme')
505
os.chdir('overwriteme')
506
self.runbzr('pull --overwrite ../a')
507
overwritten = Branch.open('.')
508
self.assertEqual(overwritten.revision_history(),
509
a.revision_history())
511
self.runbzr('merge ../b')
512
self.runbzr('commit -m blah4 --unchanged')
513
os.chdir('../b/subdir')
514
self.runbzr('pull ../../a')
515
self.assertEquals(a.revision_history()[-1], b.revision_history()[-1])
516
self.runbzr('commit -m blah5 --unchanged')
517
self.runbzr('commit -m blah6 --unchanged')
519
self.runbzr('pull ../a')
521
self.runbzr('commit -m blah7 --unchanged')
522
self.runbzr('merge ../b')
523
self.runbzr('commit -m blah8 --unchanged')
524
self.runbzr('pull ../b')
525
self.runbzr('pull ../b')
527
483
def test_inventory(self):
528
484
bzr = self.runbzr
529
485
def output_equals(value, *args):
714
670
def test_add_reports(self):
715
671
"""add command prints the names of added files."""
716
672
b = Branch.initialize('.')
717
self.build_tree(['top.txt', 'dir/', 'dir/sub.txt'])
673
self.build_tree(['top.txt', 'dir/', 'dir/sub.txt', 'CVS'])
718
674
out = self.run_bzr_captured(['add'], retcode=0)[0]
719
675
# the ordering is not defined at the moment
720
676
results = sorted(out.rstrip('\n').split('\n'))
721
self.assertEquals(['added dir',
722
'added dir'+os.sep+'sub.txt',
677
self.assertEquals(['If you wish to add some of these files, please'\
678
' add them by name.',
682
'ignored 1 file(s) matching "CVS"'],
684
out = self.run_bzr_captured(['add', '-v'], retcode=0)[0]
685
results = sorted(out.rstrip('\n').split('\n'))
686
self.assertEquals(['If you wish to add some of these files, please'\
687
' add them by name.',
688
'ignored CVS matching "CVS"'],
726
691
def test_add_quiet_is(self):
766
731
self.build_tree(['inertiatic/', 'inertiatic/esp'])
767
732
self.assertEquals(self.capture('unknowns'), 'inertiatic\n')
768
733
self.run_bzr('add', '--no-recurse', 'inertiatic')
769
self.assertEquals(self.capture('unknowns'), 'inertiatic'+os.sep+'esp\n')
734
self.assertEquals(self.capture('unknowns'), 'inertiatic/esp\n')
770
735
self.run_bzr('add', 'inertiatic/esp')
771
736
self.assertEquals(self.capture('unknowns'), '')
944
909
self.runbzr('commit --unchanged -m unchanged')
946
911
os.chdir('../output-branch')
947
# should be a diff as we have not pushed the tree
948
self.runbzr('diff', retcode=1)
949
self.runbzr('revert')
912
# There is no longer a difference as long as we have
913
# access to the working tree
951
914
self.runbzr('diff')
916
# But we should be missing a revision
917
self.runbzr('missing ../my-branch', retcode=1)
952
919
# diverge the branches
953
920
self.runbzr('commit --unchanged -m unchanged')
954
921
os.chdir('../my-branch')
1045
1012
self.assertEquals(capture('root').rstrip(),
1046
os.path.join(self.test_dir, 'branch1'))
1013
pathjoin(self.test_dir, 'branch1'))
1048
1015
progress("status of new file")
1119
1086
runbzr("rename sub1 sub2")
1120
1087
runbzr("move hello.txt sub2")
1121
1088
self.assertEqual(capture("relpath sub2/hello.txt"),
1122
os.path.join("sub2", "hello.txt\n"))
1089
pathjoin("sub2", "hello.txt\n"))
1124
1091
self.assert_(exists("sub2"))
1125
1092
self.assert_(exists("sub2/hello.txt"))
1142
1109
chdir('sub1/sub2')
1143
1110
self.assertEquals(capture('root')[:-1],
1144
os.path.join(self.test_dir, 'branch1'))
1111
pathjoin(self.test_dir, 'branch1'))
1145
1112
runbzr('move ../hello.txt .')
1146
1113
self.assert_(exists('./hello.txt'))
1147
1114
self.assertEquals(capture('relpath hello.txt'),
1148
os.path.join('sub1', 'sub2', 'hello.txt') + '\n')
1149
self.assertEquals(capture('relpath ../../sub1/sub2/hello.txt'), os.path.join('sub1', 'sub2', 'hello.txt\n'))
1115
pathjoin('sub1', 'sub2', 'hello.txt') + '\n')
1116
self.assertEquals(capture('relpath ../../sub1/sub2/hello.txt'), pathjoin('sub1', 'sub2', 'hello.txt\n'))
1150
1117
runbzr(['commit', '-m', 'move to parent directory'])
1152
self.assertEquals(capture('relpath sub2/hello.txt'), os.path.join('sub1', 'sub2', 'hello.txt\n'))
1119
self.assertEquals(capture('relpath sub2/hello.txt'), pathjoin('sub1', 'sub2', 'hello.txt\n'))
1154
1121
runbzr('move sub2/hello.txt .')
1155
1122
self.assert_(exists('hello.txt'))
1319
1286
url = self.get_remote_url('branch/file')
1320
1287
output = self.capture('log %s' % url)
1321
1288
self.assertEqual(8, len(output.split('\n')))
1290
def test_check(self):
1291
self.build_tree(['branch/', 'branch/file'])
1292
branch = Branch.initialize('branch')
1293
branch.working_tree().add(['file'])
1294
branch.working_tree().commit('add file', rev_id='A')
1295
url = self.get_remote_url('branch/')
1296
self.run_bzr('check', url)