22
23
This always runs bzr as an external process to try to catch bugs
23
24
related to argument processing, startup, etc.
28
testbzr [-p PYTHON] [BZR]
30
By default this tests the copy of bzr found in the same directory as
31
testbzr, or the first one found on the $PATH. A copy of bzr may be
32
given on the command line to override this, for example when applying
33
a new test suite to an old copy of bzr or vice versa.
35
testbzr normally invokes bzr using the same version of python as it
36
would normally use to run -- that is, the system default python,
37
unless that is older than 2.3. The -p option allows specification of
38
a different Python interpreter, such as when testing that bzr still
25
41
This replaces the previous test.sh which was not very portable."""
27
43
import sys, os, traceback
115
140
if os.path.exists(TESTDIR):
116
141
shutil.rmtree(TESTDIR)
143
start_dir = os.getcwd()
119
146
logfile = open(LOGFILENAME, 'wt', buffering=1)
150
from getopt import getopt
151
opts, args = getopt(sys.argv[1:], 'p:')
153
for option, value in opts:
155
OVERRIDE_PYTHON = value
158
mypath = os.path.abspath(sys.argv[0])
159
print '%-30s %s' % ('running tests from', mypath)
166
BZRPATH = os.path.join(os.path.split(mypath)[0], 'bzr')
168
print '%-30s %s' % ('against bzr', BZRPATH)
169
print '%-30s %s' % ('in directory', os.getcwd())
170
print '%-30s %s' % ('with python', (OVERRIDE_PYTHON or '(default)'))
172
print backtick('bzr version')
123
174
runcmd(['mkdir', TESTDIR])
176
test_root = os.getcwd()
126
178
progress("introductory commands")
127
179
runcmd("bzr version")
154
212
assert out == 'test.txt\n'
156
214
out = backtick("bzr status")
157
assert out == '''? test.txt\n'''
215
assert out == 'unknown:\n test.txt\n'
159
217
out = backtick("bzr status --all")
160
assert out == "? test.txt\n"
218
assert out == "unknown:\n test.txt\n"
220
out = backtick("bzr status test.txt --all")
221
assert out == "unknown:\n test.txt\n"
223
f = file('test2.txt', 'wt')
224
f.write('goodbye cruel world...\n')
227
out = backtick("bzr status test.txt")
228
assert out == "unknown:\n test.txt\n"
230
out = backtick("bzr status")
231
assert out == ("unknown:\n"
235
os.unlink('test2.txt')
162
237
progress("command aliases")
163
238
out = backtick("bzr st --all")
164
assert out == "? test.txt\n"
239
assert out == ("unknown:\n"
165
242
out = backtick("bzr stat")
166
assert out == "? test.txt\n"
243
assert out == ("unknown:\n"
168
246
progress("command help")
169
247
runcmd("bzr help st")
222
302
runcmd(['bzr', 'commit', '-m', 'rename nested subdirectories'])
305
assert backtick('bzr root')[:-1] == os.path.join(test_root, 'branch1')
225
306
runcmd('bzr move ../hello.txt .')
226
307
assert exists('./hello.txt')
308
assert backtick('bzr relpath hello.txt') == os.path.join('sub1', 'sub2', 'hello.txt\n')
309
assert backtick('bzr relpath ../../sub1/sub2/hello.txt') == os.path.join('sub1', 'sub2', 'hello.txt\n')
227
310
runcmd(['bzr', 'commit', '-m', 'move to parent directory'])
312
assert backtick('bzr relpath sub2/hello.txt') == os.path.join('sub1', 'sub2', 'hello.txt\n')
230
314
runcmd('bzr move sub2/hello.txt .')
231
315
assert exists('hello.txt')
317
f = file('hello.txt', 'wt')
318
f.write('some nice new content\n')
321
f = file('msg.tmp', 'wt')
322
f.write('this is my new commit\n')
325
runcmd('bzr commit -F msg.tmp')
327
assert backtick('bzr revno') == '5\n'
328
runcmd('bzr export -r 5 export-5.tmp')
329
runcmd('bzr export export.tmp')
336
progress("file with spaces in name")
337
mkdir('sub directory')
338
file('sub directory/file with spaces ', 'wt').write('see how this works\n')
341
runcmd('bzr commit -m add-spaces')
345
runcmd('bzr log --forward')
357
# Can't create a branch if it already exists
358
runcmd('bzr branch branch1', retcode=1)
359
# Can't create a branch if its parent doesn't exist
360
runcmd('bzr branch /unlikely/to/exist', retcode=1)
361
runcmd('bzr branch branch1 branch2')
365
runcmd('bzr pull', retcode=1)
366
runcmd('bzr pull ../branch2')
369
runcmd('bzr commit -m empty')
373
runcmd('bzr commit -m empty')
375
runcmd('bzr commit -m empty')
376
runcmd('bzr pull', retcode=1)
379
progress('status after remove')
380
mkdir('status-after-remove')
381
# see mail from William Dodé, 2005-05-25
382
# $ bzr init; touch a; bzr add a; bzr commit -m "add a"
383
# * looking for changes...
388
# bzr: local variable 'kind' referenced before assignment
389
# at /vrac/python/bazaar-ng/bzrlib/diff.py:286 in compare_trees()
390
# see ~/.bzr.log for debug information
391
cd('status-after-remove')
393
file('a', 'w').write('foo')
395
runcmd(['bzr', 'commit', '-m', 'add a'])
396
runcmd('bzr remove a')
401
progress('ignore patterns')
402
mkdir('ignorebranch')
405
assert backtick('bzr unknowns') == ''
407
file('foo.tmp', 'wt').write('tmp files are ignored')
408
assert backtick('bzr unknowns') == ''
410
file('foo.c', 'wt').write('int main() {}')
411
assert backtick('bzr unknowns') == 'foo.c\n'
412
runcmd('bzr add foo.c')
413
assert backtick('bzr unknowns') == ''
415
# 'ignore' works when creating the .bzignore file
416
file('foo.blah', 'wt').write('blah')
417
assert backtick('bzr unknowns') == 'foo.blah\n'
418
runcmd('bzr ignore *.blah')
419
assert backtick('bzr unknowns') == ''
420
assert file('.bzrignore', 'rb').read() == '*.blah\n'
422
# 'ignore' works when then .bzrignore file already exists
423
file('garh', 'wt').write('garh')
424
assert backtick('bzr unknowns') == 'garh\n'
425
runcmd('bzr ignore garh')
426
assert backtick('bzr unknowns') == ''
427
assert file('.bzrignore', 'rb').read() == '*.blah\ngarh\n'
434
progress("recursive and non-recursive add")
439
fp = os.path.join('foo', 'test.txt')
443
runcmd('bzr add --no-recurse foo')
444
runcmd('bzr file-id foo')
445
runcmd('bzr file-id ' + fp, 1) # not versioned yet
446
runcmd('bzr commit -m add-dir-only')
448
runcmd('bzr file-id ' + fp, 1) # still not versioned
450
runcmd('bzr add foo')
451
runcmd('bzr file-id ' + fp)
452
runcmd('bzr commit -m add-sub-file')
236
459
progress("all tests passed!")
237
460
except Exception, e: