~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to testbzr

  • Committer: Martin Pool
  • Date: 2005-05-30 03:14:07 UTC
  • Revision ID: mbp@sourcefrog.net-20050530031407-d37f43ff76a5e0d9
- tests for add --no-recurse

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#! /usr/bin/python
 
2
# -*- coding: utf-8 -*-
2
3
 
3
4
# Copyright (C) 2005 Canonical Ltd
4
5
 
22
23
This always runs bzr as an external process to try to catch bugs
23
24
related to argument processing, startup, etc.
24
25
 
 
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
 
25
41
This replaces the previous test.sh which was not very portable."""
26
42
 
27
43
import sys, os, traceback
30
46
 
31
47
TESTDIR = "testbzr.tmp"
32
48
 
 
49
OVERRIDE_PYTHON = None
 
50
 
33
51
LOGFILENAME = 'testbzr.log'
34
52
 
35
53
try:
47
65
 
48
66
def formcmd(cmd):
49
67
    if isinstance(cmd, basestring):
50
 
        logfile.write('$ %s\n' % cmd)
51
68
        cmd = cmd.split()
52
 
    else:
53
 
        logfile.write('$ %r\n' % cmd)
54
 
 
 
69
 
 
70
    if cmd[0] == 'bzr':
 
71
        cmd[0] = BZRPATH
 
72
        if OVERRIDE_PYTHON:
 
73
            cmd.insert(0, OVERRIDE_PYTHON)
 
74
 
 
75
    logfile.write('$ %r\n' % cmd)
 
76
    
55
77
    return cmd
56
78
 
57
79
 
115
137
if os.path.exists(TESTDIR):
116
138
    shutil.rmtree(TESTDIR)
117
139
 
 
140
start_dir = os.getcwd()
 
141
 
118
142
 
119
143
logfile = open(LOGFILENAME, 'wt', buffering=1)
120
144
 
121
145
 
122
146
try:
 
147
    from getopt import getopt
 
148
    opts, args = getopt(sys.argv[1:], 'p:')
 
149
 
 
150
    for option, value in opts:
 
151
        if option == '-p':
 
152
            OVERRIDE_PYTHON = value
 
153
            
 
154
    
 
155
    mypath = os.path.abspath(sys.argv[0])
 
156
    print '%-30s %s' % ('running tests from', mypath)
 
157
 
 
158
    global BZRPATH
 
159
 
 
160
    if args:
 
161
        BZRPATH = args[1]
 
162
    else:
 
163
        BZRPATH = os.path.join(os.path.split(mypath)[0], 'bzr')
 
164
 
 
165
    print '%-30s %s' % ('against bzr', BZRPATH)
 
166
    print '%-30s %s' % ('in directory', os.getcwd())
 
167
    print '%-30s %s' % ('with python', (OVERRIDE_PYTHON or '(default)'))
 
168
    print
 
169
    print backtick([BZRPATH, 'version'])
 
170
    
123
171
    runcmd(['mkdir', TESTDIR])
124
172
    cd(TESTDIR)
 
173
    test_root = os.getcwd()
125
174
 
126
175
    progress("introductory commands")
127
176
    runcmd("bzr version")
129
178
    runcmd("bzr help")
130
179
    runcmd("bzr --help")
131
180
 
 
181
    progress("internal tests")
 
182
    runcmd("bzr selftest")
 
183
 
132
184
    progress("user identity")
133
185
    # this should always identify something, if only "john@localhost"
134
186
    runcmd("bzr whoami")
145
197
    cd('branch1')
146
198
    runcmd('bzr init')
147
199
 
 
200
    assert backtick('bzr root')[:-1] == os.path.join(test_root, 'branch1')
 
201
 
148
202
    progress("status of new file")
149
203
    
150
204
    f = file('test.txt', 'wt')
155
209
    assert out == 'test.txt\n'
156
210
 
157
211
    out = backtick("bzr status")
158
 
    assert out == '''?       test.txt\n'''
 
212
    assert out == 'unknown:\n  test.txt\n'
159
213
 
160
214
    out = backtick("bzr status --all")
161
 
    assert out == "?       test.txt\n"
 
215
    assert out == "unknown:\n  test.txt\n"
 
216
 
 
217
    out = backtick("bzr status test.txt --all")
 
218
    assert out == "unknown:\n  test.txt\n"
 
219
 
 
220
    f = file('test2.txt', 'wt')
 
221
    f.write('goodbye cruel world...\n')
 
222
    f.close()
 
223
 
 
224
    out = backtick("bzr status test.txt")
 
225
    assert out == "unknown:\n  test.txt\n"
 
226
 
 
227
    out = backtick("bzr status")
 
228
    assert out == ("unknown:\n"
 
229
                   "  test.txt\n"
 
230
                   "  test2.txt\n")
 
231
 
 
232
    os.unlink('test2.txt')
162
233
 
163
234
    progress("command aliases")
164
235
    out = backtick("bzr st --all")
165
 
    assert out == "?       test.txt\n"
 
236
    assert out == ("unknown:\n"
 
237
                   "  test.txt\n")
 
238
    
166
239
    out = backtick("bzr stat")
167
 
    assert out == "?       test.txt\n"
 
240
    assert out == ("unknown:\n"
 
241
                   "  test.txt\n")
168
242
 
169
243
    progress("command help")
170
244
    runcmd("bzr help st")
182
256
 
183
257
    runcmd("bzr add test.txt")
184
258
    assert backtick("bzr unknowns") == ''
185
 
    assert backtick("bzr status --all") == "A       test.txt\n"
 
259
    assert backtick("bzr status --all") == ("added:\n"
 
260
                                            "  test.txt\n")
186
261
 
187
262
    progress("rename newly-added file")
188
263
    runcmd("bzr rename test.txt hello.txt")
203
278
    runcmd("bzr add sub1")
204
279
    runcmd("bzr rename sub1 sub2")
205
280
    runcmd("bzr move hello.txt sub2")
 
281
    assert backtick("bzr relpath sub2/hello.txt") == os.path.join("sub2", "hello.txt\n")
206
282
 
207
283
    assert exists("sub2")
208
284
    assert exists("sub2/hello.txt")
223
299
    runcmd(['bzr', 'commit', '-m', 'rename nested subdirectories'])
224
300
 
225
301
    cd('sub1/sub2')
 
302
    assert backtick('bzr root')[:-1] == os.path.join(test_root, 'branch1')
226
303
    runcmd('bzr move ../hello.txt .')
227
304
    assert exists('./hello.txt')
 
305
    assert backtick('bzr relpath hello.txt') == os.path.join('sub1', 'sub2', 'hello.txt\n')
 
306
    assert backtick('bzr relpath ../../sub1/sub2/hello.txt') == os.path.join('sub1', 'sub2', 'hello.txt\n')
228
307
    runcmd(['bzr', 'commit', '-m', 'move to parent directory'])
229
308
    cd('..')
 
309
    assert backtick('bzr relpath sub2/hello.txt') == os.path.join('sub1', 'sub2', 'hello.txt\n')
230
310
 
231
311
    runcmd('bzr move sub2/hello.txt .')
232
312
    assert exists('hello.txt')
233
 
    
234
 
    
235
 
    cd('..')
 
313
 
 
314
    f = file('hello.txt', 'wt')
 
315
    f.write('some nice new content\n')
 
316
    f.close()
 
317
 
 
318
    f = file('msg.tmp', 'wt')
 
319
    f.write('this is my new commit\n')
 
320
    f.close()
 
321
 
 
322
    runcmd('bzr commit -F msg.tmp')
 
323
 
 
324
    assert backtick('bzr revno') == '5\n'
 
325
    runcmd('bzr export -r 5 export-5.tmp')
 
326
    runcmd('bzr export export.tmp')
 
327
 
 
328
    runcmd('bzr log')
 
329
    runcmd('bzr log -v')
 
330
 
 
331
 
 
332
 
 
333
    progress("file with spaces in name")
 
334
    mkdir('sub directory')
 
335
    file('sub directory/file with spaces ', 'wt').write('see how this works\n')
 
336
    runcmd('bzr add .')
 
337
    runcmd('bzr diff')
 
338
    runcmd('bzr commit -m add-spaces')
 
339
    runcmd('bzr check')
 
340
 
 
341
    runcmd('bzr log')
 
342
    runcmd('bzr log --forward')
 
343
 
 
344
    runcmd('bzr info')
 
345
 
 
346
 
 
347
    
 
348
 
 
349
 
 
350
 
 
351
    cd('..')
 
352
    cd('..')
 
353
 
 
354
    progress('status after remove')
 
355
    mkdir('status-after-remove')
 
356
    # see mail from William Dodé, 2005-05-25
 
357
    # $ bzr init; touch a; bzr add a; bzr commit -m "add a"
 
358
    #     * looking for changes...
 
359
    #     added a
 
360
    #     * commited r1
 
361
    #     $ bzr remove a
 
362
    #     $ bzr status
 
363
    #     bzr: local variable 'kind' referenced before assignment
 
364
    #     at /vrac/python/bazaar-ng/bzrlib/diff.py:286 in compare_trees()
 
365
    #     see ~/.bzr.log for debug information
 
366
    cd('status-after-remove')
 
367
    runcmd('bzr init')
 
368
    file('a', 'w').write('foo')
 
369
    runcmd('bzr add a')
 
370
    runcmd(['bzr', 'commit', '-m', 'add a'])
 
371
    runcmd('bzr remove a')
 
372
    runcmd('bzr status')
 
373
 
 
374
    cd('..')
 
375
 
 
376
    progress('ignore patterns')
 
377
    mkdir('ignorebranch')
 
378
    cd('ignorebranch')
 
379
    runcmd('bzr init')
 
380
    assert backtick('bzr unknowns') == ''
 
381
 
 
382
    file('foo.tmp', 'wt').write('tmp files are ignored')
 
383
    assert backtick('bzr unknowns') == ''
 
384
 
 
385
    file('foo.c', 'wt').write('int main() {}')
 
386
    assert backtick('bzr unknowns') == 'foo.c\n'
 
387
    runcmd('bzr add foo.c')
 
388
    assert backtick('bzr unknowns') == ''
 
389
 
 
390
    # 'ignore' works when creating the .bzignore file
 
391
    file('foo.blah', 'wt').write('blah')
 
392
    assert backtick('bzr unknowns') == 'foo.blah\n'
 
393
    runcmd('bzr ignore *.blah')
 
394
    assert backtick('bzr unknowns') == ''
 
395
    assert file('.bzrignore', 'rb').read() == '*.blah\n'
 
396
 
 
397
    # 'ignore' works when then .bzrignore file already exists
 
398
    file('garh', 'wt').write('garh')
 
399
    assert backtick('bzr unknowns') == 'garh\n'
 
400
    runcmd('bzr ignore garh')
 
401
    assert backtick('bzr unknowns') == ''
 
402
    assert file('.bzrignore', 'rb').read() == '*.blah\ngarh\n'
 
403
 
 
404
    cd('..')
 
405
 
 
406
 
 
407
 
 
408
 
 
409
    progress("recursive and non-recursive add")
 
410
    mkdir('no-recurse')
 
411
    cd('no-recurse')
 
412
    runcmd('bzr init')
 
413
    mkdir('foo')
 
414
    fp = os.path.join('foo', 'test.txt')
 
415
    f = file(fp, 'w')
 
416
    f.write('hello!\n')
 
417
    f.close()
 
418
    runcmd('bzr add --no-recurse foo')
 
419
    runcmd('bzr file-id foo')
 
420
    runcmd('bzr file-id ' + fp, 1)      # not versioned yet
 
421
    runcmd('bzr commit -m add-dir-only')
 
422
 
 
423
    runcmd('bzr file-id ' + fp, 1)      # still not versioned 
 
424
 
 
425
    runcmd('bzr add foo')
 
426
    runcmd('bzr file-id ' + fp)
 
427
    runcmd('bzr commit -m add-sub-file')
 
428
    
 
429
    cd('..')
 
430
 
 
431
 
 
432
 
236
433
 
237
434
    progress("all tests passed!")
238
435
except Exception, e:
242
439
                     + '*' * 50 + '\n')
243
440
    logfile.write('tests failed!\n')
244
441
    traceback.print_exc(None, logfile)
 
442
    logfile.close()
 
443
 
 
444
    sys.stdout.writelines(file(os.path.join(start_dir, LOGFILENAME), 'rt').readlines()[-50:])
 
445
    
245
446
    sys.exit(1)
 
447