~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/selftest/blackbox.py

  • Committer: aaron.bentley at utoronto
  • Date: 2005-08-27 04:42:41 UTC
  • mfrom: (1092.1.43)
  • mto: (1185.3.4)
  • mto: This revision was merged to the branch mainline in revision 1178.
  • Revision ID: aaron.bentley@utoronto.ca-20050827044241-23d676133b9fc981
Merge of robertc@robertcollins.net-20050826013321-52eee1f1da679ee9

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
it's normally invoked.
27
27
"""
28
28
 
29
 
from cStringIO import StringIO
30
29
import sys
31
 
import os
32
 
 
33
 
from bzrlib.selftest import TestCaseInTempDir, BzrTestBase
34
 
from bzrlib.branch import Branch
35
 
 
36
 
 
37
 
class ExternalBase(TestCaseInTempDir):
38
 
 
39
 
    def runbzr(self, args, retcode=0, backtick=False):
 
30
from bzrlib.selftest import InTempDir, BzrTestBase
 
31
 
 
32
 
 
33
class ExternalBase(InTempDir):
 
34
 
 
35
    def runbzr(self, args, retcode=0,backtick=False):
 
36
        try:
 
37
            import shutil
 
38
            from subprocess import call
 
39
        except ImportError, e:
 
40
            _need_subprocess()
 
41
            raise
 
42
 
40
43
        if isinstance(args, basestring):
41
44
            args = args.split()
42
45
 
43
46
        if backtick:
44
 
            return self.run_bzr_captured(args, retcode=retcode)[0]
 
47
            return self.backtick(['python', self.BZRPATH,] + args,
 
48
                           retcode=retcode)
45
49
        else:
46
 
            return self.run_bzr_captured(args, retcode=retcode)
47
 
 
 
50
            return self.runcmd(['python', self.BZRPATH,] + args,
 
51
                           retcode=retcode)
48
52
 
49
53
class TestCommands(ExternalBase):
50
54
 
56
60
        self.runbzr('commit -h')
57
61
 
58
62
    def test_init_branch(self):
 
63
        import os
59
64
        self.runbzr(['init'])
60
65
 
61
66
    def test_whoami(self):
72
77
        f = file('.bzr/email', 'wt')
73
78
        f.write('Branch Identity <branch@identi.ty>')
74
79
        f.close()
75
 
        bzr_email = os.environ.get('BZREMAIL')
76
 
        if bzr_email is not None:
77
 
            del os.environ['BZREMAIL']
78
80
        whoami = self.runbzr("whoami",backtick=True)
79
81
        whoami_email = self.runbzr("whoami --email",backtick=True)
80
82
        self.assertTrue(whoami.startswith('Branch Identity <branch@identi.ty>'))
81
83
        self.assertTrue(whoami_email.startswith('branch@identi.ty'))
82
 
        # Verify that the environment variable overrides the value 
83
 
        # in the file
84
 
        os.environ['BZREMAIL'] = 'Different ID <other@environ.ment>'
85
 
        whoami = self.runbzr("whoami",backtick=True)
86
 
        whoami_email = self.runbzr("whoami --email",backtick=True)
87
 
        self.assertTrue(whoami.startswith('Different ID <other@environ.ment>'))
88
 
        self.assertTrue(whoami_email.startswith('other@environ.ment'))
89
 
        if bzr_email is not None:
90
 
            os.environ['BZREMAIL'] = bzr_email
91
84
 
92
85
    def test_invalid_commands(self):
93
86
        self.runbzr("pants", retcode=1)
104
97
    def test_ignore_patterns(self):
105
98
        from bzrlib.branch import Branch
106
99
        
107
 
        b = Branch.initialize('.')
 
100
        b = Branch('.', init=True)
108
101
        self.assertEquals(list(b.unknowns()), [])
109
102
 
110
103
        file('foo.tmp', 'wt').write('tmp files are ignored')
111
104
        self.assertEquals(list(b.unknowns()), [])
112
 
        assert self.capture('unknowns') == ''
 
105
        assert self.backtick('bzr unknowns') == ''
113
106
 
114
107
        file('foo.c', 'wt').write('int main() {}')
115
108
        self.assertEquals(list(b.unknowns()), ['foo.c'])
116
 
        assert self.capture('unknowns') == 'foo.c\n'
 
109
        assert self.backtick('bzr unknowns') == 'foo.c\n'
117
110
 
118
111
        self.runbzr(['add', 'foo.c'])
119
 
        assert self.capture('unknowns') == ''
 
112
        assert self.backtick('bzr unknowns') == ''
120
113
 
121
114
        # 'ignore' works when creating the .bzignore file
122
115
        file('foo.blah', 'wt').write('blah')
128
121
        # 'ignore' works when then .bzrignore file already exists
129
122
        file('garh', 'wt').write('garh')
130
123
        self.assertEquals(list(b.unknowns()), ['garh'])
131
 
        assert self.capture('unknowns') == 'garh\n'
 
124
        assert self.backtick('bzr unknowns') == 'garh\n'
132
125
        self.runbzr('ignore garh')
133
126
        self.assertEquals(list(b.unknowns()), [])
134
127
        assert file('.bzrignore', 'rb').read() == '*.blah\ngarh\n'
135
128
 
136
129
    def test_revert(self):
 
130
        import os
137
131
        self.runbzr('init')
138
132
 
139
133
        file('hello', 'wt').write('foo')
158
152
        os.rmdir('revertdir')
159
153
        self.runbzr('revert')
160
154
 
161
 
        file('hello', 'wt').write('xyz')
162
 
        self.runbzr('commit -m xyz hello')
163
 
        self.runbzr('revert -r 1 hello')
164
 
        self.check_file_contents('hello', 'foo')
165
 
        self.runbzr('revert hello')
166
 
        self.check_file_contents('hello', 'xyz')
167
 
        os.chdir('revertdir')
168
 
        self.runbzr('revert')
169
 
        os.chdir('..')
170
 
 
171
 
 
172
 
    def test_mv_modes(self):
 
155
    def skipped_test_mv_modes(self):
173
156
        """Test two modes of operation for mv"""
174
157
        from bzrlib.branch import Branch
175
 
        b = Branch.initialize('.')
 
158
        b = Branch('.', init=True)
176
159
        self.build_tree(['a', 'c', 'subdir/'])
177
 
        self.run_bzr_captured(['add', self.test_dir])
178
 
        self.run_bzr_captured(['mv', 'a', 'b'])
179
 
        self.run_bzr_captured(['mv', 'b', 'subdir'])
180
 
        self.run_bzr_captured(['mv', 'subdir/b', 'a'])
181
 
        self.run_bzr_captured(['mv', 'a', 'c', 'subdir'])
182
 
        self.run_bzr_captured(['mv', 'subdir/a', 'subdir/newa'])
183
 
 
 
160
        self.run_bzr('mv', 'a', 'b')
 
161
        self.run_bzr('mv', 'b', 'subdir')
 
162
        self.run_bzr('mv', 'subdir/b', 'a')
 
163
        self.run_bzr('mv', 'a', 'b', 'subdir')
 
164
        self.run_bzr('mv', 'subdir/a', 'subdir/newa')
184
165
 
185
166
    def test_main_version(self):
186
167
        """Check output from version command and master option is reasonable"""
206
187
        test.runbzr('add goodbye')
207
188
        test.runbzr('commit -m setup goodbye')
208
189
 
209
 
    def test_diff(self):
210
 
        self.example_branch()
211
 
        file('hello', 'wt').write('hello world!')
212
 
        self.runbzr('commit -m fixing hello')
213
 
        output = self.runbzr('diff -r 2..3', backtick=1)
214
 
        self.assert_('\n+hello world!' in output)
215
 
        output = self.runbzr('diff -r last:3..last:1', backtick=1)
216
 
        self.assert_('\n+baz' in output)
217
 
 
218
 
    def test_branch(self):
219
 
        """Branch from one branch to another."""
220
 
        os.mkdir('a')
221
 
        os.chdir('a')
222
 
        self.example_branch()
223
 
        os.chdir('..')
224
 
        self.runbzr('branch a b')
225
 
        self.runbzr('branch a c -r 1')
 
190
    def test_revert(self):
 
191
        self.example_branch()
 
192
        file('hello', 'wt').write('bar')
 
193
        file('goodbye', 'wt').write('qux')
 
194
        self.runbzr('revert hello')
 
195
        self.check_file_contents('hello', 'foo')
 
196
        self.check_file_contents('goodbye', 'qux')
 
197
        self.runbzr('revert')
 
198
        self.check_file_contents('goodbye', 'baz')
226
199
 
227
200
    def test_merge(self):
228
201
        from bzrlib.branch import Branch
229
 
        
 
202
        import os
230
203
        os.mkdir('a')
231
204
        os.chdir('a')
232
205
        self.example_branch()
244
217
        self.runbzr('merge ../b')
245
218
        self.check_file_contents('goodbye', 'quux')
246
219
        # Merging a branch pulls its revision into the tree
247
 
        a = Branch.open('.')
248
 
        b = Branch.open('../b')
 
220
        a = Branch('.')
 
221
        b = Branch('../b')
249
222
        a.get_revision_xml(b.last_patch())
250
 
        self.log('pending merges: %s', a.pending_merges())
251
 
        #        assert a.pending_merges() == [b.last_patch()], "Assertion %s %s" \
252
 
        #        % (a.pending_merges(), b.last_patch())
253
 
 
254
 
    def test_pull(self):
255
 
        """Pull changes from one branch to another."""
256
 
        os.mkdir('a')
257
 
        os.chdir('a')
258
 
 
259
 
        self.example_branch()
260
 
        self.runbzr('pull', retcode=1)
261
 
        self.runbzr('missing', retcode=1)
262
 
        self.runbzr('missing .')
263
 
        self.runbzr('missing')
264
 
        self.runbzr('pull')
265
 
        self.runbzr('pull /', retcode=1)
266
 
        self.runbzr('pull')
267
 
 
268
 
        os.chdir('..')
269
 
        self.runbzr('branch a b')
270
 
        os.chdir('b')
271
 
        self.runbzr('pull')
272
 
        os.mkdir('subdir')
273
 
        self.runbzr('add subdir')
274
 
        self.runbzr('commit -m blah --unchanged')
275
 
        os.chdir('../a')
276
 
        a = Branch.open('.')
277
 
        b = Branch.open('../b')
278
 
        assert a.revision_history() == b.revision_history()[:-1]
279
 
        self.runbzr('pull ../b')
280
 
        assert a.revision_history() == b.revision_history()
281
 
        self.runbzr('commit -m blah2 --unchanged')
282
 
        os.chdir('../b')
283
 
        self.runbzr('commit -m blah3 --unchanged')
284
 
        self.runbzr('pull ../a', retcode=1)
285
 
        os.chdir('../a')
286
 
        self.runbzr('merge ../b')
287
 
        self.runbzr('commit -m blah4 --unchanged')
288
 
        os.chdir('../b/subdir')
289
 
        self.runbzr('pull ../../a')
290
 
        assert a.revision_history()[-1] == b.revision_history()[-1]
291
 
        
292
 
    def test_add_reports(self):
293
 
        """add command prints the names of added files."""
294
 
        b = Branch.initialize('.')
295
 
        self.build_tree(['top.txt', 'dir/', 'dir/sub.txt'])
296
 
        out = self.run_bzr_captured(['add'], retcode = 0)[0]
297
 
        # the ordering is not defined at the moment
298
 
        results = sorted(out.rstrip('\n').split('\n'))
299
 
        self.assertEquals(['added dir',
300
 
                           'added dir/sub.txt',
301
 
                           'added top.txt',],
302
 
                          results)
303
 
 
304
 
    def test_unknown_command(self):
305
 
        """Handling of unknown command."""
306
 
        out, err = self.run_bzr_captured(['fluffy-badger'],
307
 
                                         retcode=1)
308
 
        self.assertEquals(out, '')
309
 
        err.index('unknown command')
310
 
        
311
 
 
 
223
        print "Pending: %s" % a.pending_merges()
 
224
#        assert a.pending_merges() == [b.last_patch()], "Assertion %s %s" \
 
225
#        % (a.pending_merges(), b.last_patch())
312
226
 
313
227
class OldTests(ExternalBase):
314
228
    """old tests moved from ./testbzr."""
316
230
    def test_bzr(self):
317
231
        from os import chdir, mkdir
318
232
        from os.path import exists
 
233
        import os
319
234
 
320
235
        runbzr = self.runbzr
321
 
        capture = self.capture
 
236
        backtick = self.backtick
322
237
        progress = self.log
323
238
 
324
239
        progress("basic branch creation")
326
241
        chdir('branch1')
327
242
        runbzr('init')
328
243
 
329
 
        self.assertEquals(capture('root').rstrip(),
 
244
        self.assertEquals(backtick('bzr root').rstrip(),
330
245
                          os.path.join(self.test_dir, 'branch1'))
331
246
 
332
247
        progress("status of new file")
335
250
        f.write('hello world!\n')
336
251
        f.close()
337
252
 
338
 
        self.assertEquals(capture('unknowns'), 'test.txt\n')
 
253
        out = backtick("bzr unknowns")
 
254
        self.assertEquals(out, 'test.txt\n')
339
255
 
340
 
        out = capture("status")
 
256
        out = backtick("bzr status")
341
257
        assert out == 'unknown:\n  test.txt\n'
342
258
 
343
 
        out = capture("status --all")
 
259
        out = backtick("bzr status --all")
344
260
        assert out == "unknown:\n  test.txt\n"
345
261
 
346
 
        out = capture("status test.txt --all")
 
262
        out = backtick("bzr status test.txt --all")
347
263
        assert out == "unknown:\n  test.txt\n"
348
264
 
349
265
        f = file('test2.txt', 'wt')
350
266
        f.write('goodbye cruel world...\n')
351
267
        f.close()
352
268
 
353
 
        out = capture("status test.txt")
 
269
        out = backtick("bzr status test.txt")
354
270
        assert out == "unknown:\n  test.txt\n"
355
271
 
356
 
        out = capture("status")
 
272
        out = backtick("bzr status")
357
273
        assert out == ("unknown:\n"
358
274
                       "  test.txt\n"
359
275
                       "  test2.txt\n")
361
277
        os.unlink('test2.txt')
362
278
 
363
279
        progress("command aliases")
364
 
        out = capture("st --all")
 
280
        out = backtick("bzr st --all")
365
281
        assert out == ("unknown:\n"
366
282
                       "  test.txt\n")
367
283
 
368
 
        out = capture("stat")
 
284
        out = backtick("bzr stat")
369
285
        assert out == ("unknown:\n"
370
286
                       "  test.txt\n")
371
287
 
375
291
        runbzr("help commands")
376
292
        runbzr("help slartibartfast", 1)
377
293
 
378
 
        out = capture("help ci")
 
294
        out = backtick("bzr help ci")
379
295
        out.index('aliases: ')
380
296
 
381
297
        progress("can't rename unversioned file")
384
300
        progress("adding a file")
385
301
 
386
302
        runbzr("add test.txt")
387
 
        assert capture("unknowns") == ''
388
 
        assert capture("status --all") == ("added:\n"
 
303
        assert backtick("bzr unknowns") == ''
 
304
        assert backtick("bzr status --all") == ("added:\n"
389
305
                                                "  test.txt\n")
390
306
 
391
307
        progress("rename newly-added file")
393
309
        assert os.path.exists("hello.txt")
394
310
        assert not os.path.exists("test.txt")
395
311
 
396
 
        assert capture("revno") == '0\n'
 
312
        assert backtick("bzr revno") == '0\n'
397
313
 
398
314
        progress("add first revision")
399
315
        runbzr(['commit', '-m', 'add first revision'])
407
323
        runbzr("add sub1")
408
324
        runbzr("rename sub1 sub2")
409
325
        runbzr("move hello.txt sub2")
410
 
        assert capture("relpath sub2/hello.txt") == os.path.join("sub2", "hello.txt\n")
 
326
        assert backtick("bzr relpath sub2/hello.txt") == os.path.join("sub2", "hello.txt\n")
411
327
 
412
328
        assert exists("sub2")
413
329
        assert exists("sub2/hello.txt")
428
344
        runbzr(['commit', '-m', 'rename nested subdirectories'])
429
345
 
430
346
        chdir('sub1/sub2')
431
 
        self.assertEquals(capture('root')[:-1],
 
347
        self.assertEquals(backtick('bzr root')[:-1],
432
348
                          os.path.join(self.test_dir, 'branch1'))
433
349
        runbzr('move ../hello.txt .')
434
350
        assert exists('./hello.txt')
435
 
        self.assertEquals(capture('relpath hello.txt'),
436
 
                          os.path.join('sub1', 'sub2', 'hello.txt') + '\n')
437
 
        assert capture('relpath ../../sub1/sub2/hello.txt') == os.path.join('sub1', 'sub2', 'hello.txt\n')
 
351
        assert backtick('bzr relpath hello.txt') == os.path.join('sub1', 'sub2', 'hello.txt\n')
 
352
        assert backtick('bzr relpath ../../sub1/sub2/hello.txt') == os.path.join('sub1', 'sub2', 'hello.txt\n')
438
353
        runbzr(['commit', '-m', 'move to parent directory'])
439
354
        chdir('..')
440
 
        assert capture('relpath sub2/hello.txt') == os.path.join('sub1', 'sub2', 'hello.txt\n')
 
355
        assert backtick('bzr relpath sub2/hello.txt') == os.path.join('sub1', 'sub2', 'hello.txt\n')
441
356
 
442
357
        runbzr('move sub2/hello.txt .')
443
358
        assert exists('hello.txt')
452
367
 
453
368
        runbzr('commit -F msg.tmp')
454
369
 
455
 
        assert capture('revno') == '5\n'
 
370
        assert backtick('bzr revno') == '5\n'
456
371
        runbzr('export -r 5 export-5.tmp')
457
372
        runbzr('export export.tmp')
458
373
 
460
375
        runbzr('log -v')
461
376
        runbzr('log -v --forward')
462
377
        runbzr('log -m', retcode=1)
463
 
        log_out = capture('log -m commit')
 
378
        log_out = backtick('bzr log -m commit')
464
379
        assert "this is my new commit" in log_out
465
380
        assert "rename nested" not in log_out
466
381
        assert 'revision-id' not in log_out
467
 
        assert 'revision-id' in capture('log --show-ids -m commit')
 
382
        assert 'revision-id' in backtick('bzr log --show-ids -m commit')
468
383
 
469
384
 
470
385
        progress("file with spaces in name")