~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to testbzr

  • Committer: Martin Pool
  • Date: 2005-05-11 08:07:56 UTC
  • Revision ID: mbp@sourcefrog.net-20050511080756-ce1fdb2d72f5e028
- more status form test fixes

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#! /usr/bin/python
2
 
# -*- coding: utf-8 -*-
3
2
 
4
3
# Copyright (C) 2005 Canonical Ltd
5
4
 
23
22
This always runs bzr as an external process to try to catch bugs
24
23
related to argument processing, startup, etc.
25
24
 
26
 
usage:
27
 
 
28
 
    testbzr [-p PYTHON] [BZR]
29
 
 
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.
34
 
 
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
39
 
works on python2.3.
40
 
 
41
25
This replaces the previous test.sh which was not very portable."""
42
26
 
43
27
import sys, os, traceback
46
30
 
47
31
TESTDIR = "testbzr.tmp"
48
32
 
49
 
 
50
 
# we always invoke bzr as 'python bzr' (or e.g. 'python2.3 bzr')
51
 
# partly so as to cope if the bzr binary is not marked executable
52
 
OVERRIDE_PYTHON = 'python'
53
 
 
54
33
LOGFILENAME = 'testbzr.log'
55
34
 
56
35
try:
68
47
 
69
48
def formcmd(cmd):
70
49
    if isinstance(cmd, basestring):
 
50
        logfile.write('$ %s\n' % cmd)
71
51
        cmd = cmd.split()
 
52
    else:
 
53
        logfile.write('$ %r\n' % cmd)
72
54
 
73
55
    if cmd[0] == 'bzr':
74
56
        cmd[0] = BZRPATH
75
 
        if OVERRIDE_PYTHON:
76
 
            cmd.insert(0, OVERRIDE_PYTHON)
77
57
 
78
 
    logfile.write('$ %r\n' % cmd)
79
 
    
80
58
    return cmd
81
59
 
82
60
 
140
118
if os.path.exists(TESTDIR):
141
119
    shutil.rmtree(TESTDIR)
142
120
 
143
 
start_dir = os.getcwd()
144
 
 
145
121
 
146
122
logfile = open(LOGFILENAME, 'wt', buffering=1)
147
123
 
148
 
def test_plugins():
149
 
    """Run a test involving creating a plugin to load,
150
 
    and making sure it is seen properly.
151
 
    """
152
 
    mkdir('plugin_test')
153
 
    f = open(os.path.join('plugin_test', 'myplug.py'), 'wb')
154
 
    f.write("""import bzrlib, bzrlib.commands
155
 
class cmd_myplug(bzrlib.commands.Command):
156
 
    '''Just a simple test plugin.'''
157
 
    aliases = ['mplg']
158
 
    def run(self):
159
 
        print 'Hello from my plugin'
160
 
""")
161
 
    f.close()
162
 
 
163
 
    os.environ['BZRPLUGINPATH'] = os.path.abspath('plugin_test')
164
 
    help = backtick('bzr help commands')
165
 
    assert help.find('myplug') != -1
166
 
    assert help.find('Just a simple test plugin.') != -1
167
 
 
168
 
    
169
 
    assert backtick('bzr myplug') == 'Hello from my plugin\n'
170
 
    assert backtick('bzr mplg') == 'Hello from my plugin\n'
171
 
 
172
 
    f = open(os.path.join('plugin_test', 'override.py'), 'wb')
173
 
    f.write("""import bzrlib, bzrlib.commands
174
 
class cmd_commit(bzrlib.commands.cmd_commit):
175
 
    '''Commit changes into a new revision.'''
176
 
    def run(self, *args, **kwargs):
177
 
        print "I'm sorry dave, you can't do that"
178
 
 
179
 
class cmd_help(bzrlib.commands.cmd_help):
180
 
    '''Show help on a command or other topic.'''
181
 
    def run(self, *args, **kwargs):
182
 
        print "You have been overridden"
183
 
        bzrlib.commands.cmd_help.run(self, *args, **kwargs)
184
 
 
185
 
""")
186
 
    f.close()
187
 
 
188
 
    newhelp = backtick('bzr help commands')
189
 
    assert newhelp.startswith('You have been overridden\n')
190
 
    # We added a line, but the rest should work
191
 
    assert newhelp[25:] == help
192
 
 
193
 
    assert backtick('bzr commit -m test') == "I'm sorry dave, you can't do that\n"
194
 
    
195
 
    shutil.rmtree('plugin_test')
196
124
 
197
125
try:
198
 
    from getopt import getopt
199
 
    opts, args = getopt(sys.argv[1:], 'p:')
200
 
 
201
 
    for option, value in opts:
202
 
        if option == '-p':
203
 
            OVERRIDE_PYTHON = value
204
 
            
205
 
    
206
126
    mypath = os.path.abspath(sys.argv[0])
207
127
    print '%-30s %s' % ('running tests from', mypath)
208
128
 
209
129
    global BZRPATH
210
130
 
211
 
    if args:
212
 
        BZRPATH = args[0]
 
131
    if len(sys.argv) > 1:
 
132
        BZRPATH = sys.argv[1]
213
133
    else:
214
134
        BZRPATH = os.path.join(os.path.split(mypath)[0], 'bzr')
215
135
 
216
136
    print '%-30s %s' % ('against bzr', BZRPATH)
217
137
    print '%-30s %s' % ('in directory', os.getcwd())
218
 
    print '%-30s %s' % ('with python', (OVERRIDE_PYTHON or '(default)'))
219
138
    print
220
 
    print backtick('bzr version')
 
139
    print backtick([BZRPATH, 'version'])
221
140
    
222
141
    runcmd(['mkdir', TESTDIR])
223
142
    cd(TESTDIR)
329
248
    runcmd("bzr add sub1")
330
249
    runcmd("bzr rename sub1 sub2")
331
250
    runcmd("bzr move hello.txt sub2")
332
 
    assert backtick("bzr relpath sub2/hello.txt") == os.path.join("sub2", "hello.txt\n")
 
251
    assert backtick("bzr relpath sub2/hello.txt") == "sub2/hello.txt\n"
333
252
 
334
253
    assert exists("sub2")
335
254
    assert exists("sub2/hello.txt")
353
272
    assert backtick('bzr root')[:-1] == os.path.join(test_root, 'branch1')
354
273
    runcmd('bzr move ../hello.txt .')
355
274
    assert exists('./hello.txt')
356
 
    assert backtick('bzr relpath hello.txt') == os.path.join('sub1', 'sub2', 'hello.txt\n')
357
 
    assert backtick('bzr relpath ../../sub1/sub2/hello.txt') == os.path.join('sub1', 'sub2', 'hello.txt\n')
 
275
    assert backtick('bzr relpath hello.txt') == 'sub1/sub2/hello.txt\n'
 
276
    assert backtick('bzr relpath ../../sub1/sub2/hello.txt') == 'sub1/sub2/hello.txt\n'
358
277
    runcmd(['bzr', 'commit', '-m', 'move to parent directory'])
359
278
    cd('..')
360
 
    assert backtick('bzr relpath sub2/hello.txt') == os.path.join('sub1', 'sub2', 'hello.txt\n')
 
279
    assert backtick('bzr relpath sub2/hello.txt') == 'sub1/sub2/hello.txt\n'
361
280
 
362
281
    runcmd('bzr move sub2/hello.txt .')
363
282
    assert exists('hello.txt')
378
297
 
379
298
    runcmd('bzr log')
380
299
    runcmd('bzr log -v')
381
 
 
382
 
 
383
 
 
384
 
    progress("file with spaces in name")
385
 
    mkdir('sub directory')
386
 
    file('sub directory/file with spaces ', 'wt').write('see how this works\n')
387
 
    runcmd('bzr add .')
388
 
    runcmd('bzr diff')
389
 
    runcmd('bzr commit -m add-spaces')
390
 
    runcmd('bzr check')
391
 
 
392
 
    runcmd('bzr log')
393
 
    runcmd('bzr log --forward')
394
 
 
395
 
    runcmd('bzr info')
396
 
 
397
 
 
398
300
    
399
 
 
400
 
 
401
 
 
402
 
    cd('..')
403
 
    cd('..')
404
 
    progress('branch')
405
 
    # Can't create a branch if it already exists
406
 
    runcmd('bzr branch branch1', retcode=1)
407
 
    # Can't create a branch if its parent doesn't exist
408
 
    runcmd('bzr branch /unlikely/to/exist', retcode=1)
409
 
    runcmd('bzr branch branch1 branch2')
410
 
 
411
 
    progress("pull")
412
 
    cd('branch1')
413
 
    runcmd('bzr pull', retcode=1)
414
 
    runcmd('bzr pull ../branch2')
415
 
    cd('.bzr')
416
 
    runcmd('bzr pull')
417
 
    runcmd('bzr commit -m empty')
418
 
    runcmd('bzr pull')
419
 
    cd('../../branch2')
420
 
    runcmd('bzr pull')
421
 
    runcmd('bzr commit -m empty')
422
 
    cd('../branch1')
423
 
    runcmd('bzr commit -m empty')
424
 
    runcmd('bzr pull', retcode=1)
425
 
    cd ('..')
426
 
 
427
 
    progress('status after remove')
428
 
    mkdir('status-after-remove')
429
 
    # see mail from William Dodé, 2005-05-25
430
 
    # $ bzr init; touch a; bzr add a; bzr commit -m "add a"
431
 
    #     * looking for changes...
432
 
    #     added a
433
 
    #     * commited r1
434
 
    #     $ bzr remove a
435
 
    #     $ bzr status
436
 
    #     bzr: local variable 'kind' referenced before assignment
437
 
    #     at /vrac/python/bazaar-ng/bzrlib/diff.py:286 in compare_trees()
438
 
    #     see ~/.bzr.log for debug information
439
 
    cd('status-after-remove')
440
 
    runcmd('bzr init')
441
 
    file('a', 'w').write('foo')
442
 
    runcmd('bzr add a')
443
 
    runcmd(['bzr', 'commit', '-m', 'add a'])
444
 
    runcmd('bzr remove a')
445
 
    runcmd('bzr status')
446
 
 
 
301
    cd('..')
447
302
    cd('..')
448
303
 
449
304
    progress('ignore patterns')
460
315
    runcmd('bzr add foo.c')
461
316
    assert backtick('bzr unknowns') == ''
462
317
 
463
 
    # 'ignore' works when creating the .bzignore file
464
318
    file('foo.blah', 'wt').write('blah')
465
319
    assert backtick('bzr unknowns') == 'foo.blah\n'
466
320
    runcmd('bzr ignore *.blah')
467
321
    assert backtick('bzr unknowns') == ''
468
 
    assert file('.bzrignore', 'rb').read() == '*.blah\n'
469
 
 
470
 
    # 'ignore' works when then .bzrignore file already exists
471
 
    file('garh', 'wt').write('garh')
472
 
    assert backtick('bzr unknowns') == 'garh\n'
473
 
    runcmd('bzr ignore garh')
474
 
    assert backtick('bzr unknowns') == ''
475
 
    assert file('.bzrignore', 'rb').read() == '*.blah\ngarh\n'
476
 
 
477
 
    cd('..')
478
 
 
479
 
 
480
 
 
481
 
 
482
 
    progress("recursive and non-recursive add")
483
 
    mkdir('no-recurse')
484
 
    cd('no-recurse')
485
 
    runcmd('bzr init')
486
 
    mkdir('foo')
487
 
    fp = os.path.join('foo', 'test.txt')
488
 
    f = file(fp, 'w')
489
 
    f.write('hello!\n')
490
 
    f.close()
491
 
    runcmd('bzr add --no-recurse foo')
492
 
    runcmd('bzr file-id foo')
493
 
    runcmd('bzr file-id ' + fp, 1)      # not versioned yet
494
 
    runcmd('bzr commit -m add-dir-only')
495
 
 
496
 
    runcmd('bzr file-id ' + fp, 1)      # still not versioned 
497
 
 
498
 
    runcmd('bzr add foo')
499
 
    runcmd('bzr file-id ' + fp)
500
 
    runcmd('bzr commit -m add-sub-file')
501
 
    
502
 
    cd('..')
503
 
 
504
 
 
505
 
 
506
 
 
507
 
    # Run any function in this 
508
 
    g = globals()
509
 
    funcs = g.keys()
510
 
    funcs.sort()
511
 
    for k in funcs:
512
 
        if k.startswith('test_') and callable(g[k]):
513
 
            progress(k[5:].replace('_', ' '))
514
 
            g[k]()
 
322
    assert file('.bzrignore', 'rt').read() == '*.blah\n'
 
323
 
515
324
 
516
325
    progress("all tests passed!")
517
326
except Exception, e:
521
330
                     + '*' * 50 + '\n')
522
331
    logfile.write('tests failed!\n')
523
332
    traceback.print_exc(None, logfile)
524
 
    logfile.close()
525
 
 
526
 
    sys.stdout.writelines(file(os.path.join(start_dir, LOGFILENAME), 'rt').readlines()[-50:])
527
 
    
528
333
    sys.exit(1)
529