~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/selftest/blackbox.py

  • Committer: Martin Pool
  • Date: 2005-08-24 00:34:21 UTC
  • Revision ID: mbp@sourcefrog.net-20050824003421-33dd8e5c739cad2a
- send trace messages out through python logging module

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
 
29
29
import sys
30
30
 
31
 
from bzrlib.selftest import TestCaseInTempDir, BzrTestBase
32
 
from bzrlib.branch import Branch
33
 
from bzrlib.commands import run_bzr
34
 
 
35
 
 
36
 
class ExternalBase(TestCaseInTempDir):
 
31
from bzrlib.selftest import TestBase, InTempDir, BzrTestBase
 
32
 
 
33
 
 
34
 
 
35
class ExternalBase(InTempDir):
37
36
    def runbzr(self, args, retcode=0,backtick=False):
 
37
        try:
 
38
            import shutil
 
39
            from subprocess import call
 
40
        except ImportError, e:
 
41
            _need_subprocess()
 
42
            raise
 
43
 
38
44
        if isinstance(args, basestring):
39
45
            args = args.split()
40
46
 
46
52
                           retcode=retcode)
47
53
 
48
54
 
49
 
class TestCommands(ExternalBase):
50
 
 
51
 
    def test_help_commands(self):
 
55
 
 
56
class MvCommand(BzrTestBase):
 
57
    def runbzr(self):
 
58
        """Test two modes of operation for mv"""
 
59
        b = Branch('.', init=True)
 
60
        self.build_tree(['a', 'c', 'subdir/'])
 
61
        self.run_bzr('mv', 'a', 'b')
 
62
        self.run_bzr('mv', 'b', 'subdir')
 
63
        self.run_bzr('mv', 'subdir/b', 'a')
 
64
        self.run_bzr('mv', 'a', 'b', 'subdir')
 
65
        self.run_bzr('mv', 'subdir/a', 'subdir/newa')
 
66
 
 
67
 
 
68
 
 
69
class TestVersion(BzrTestBase):
 
70
    """Check output from version command and master option is reasonable"""
 
71
    def runTest(self):
 
72
        # output is intentionally passed through to stdout so that we
 
73
        # can see the version being tested
 
74
        from cStringIO import StringIO
 
75
        save_out = sys.stdout
 
76
        try:
 
77
            sys.stdout = tmp_out = StringIO()
 
78
            
 
79
            self.run_bzr('version')
 
80
        finally:
 
81
            sys.stdout = save_out
 
82
 
 
83
        output = tmp_out.getvalue()
 
84
        self.log('bzr version output:')
 
85
        self.log(output)
 
86
        
 
87
        self.assert_(output.startswith('bzr (bazaar-ng) '))
 
88
        self.assertNotEqual(output.index('Canonical'), -1)
 
89
 
 
90
        # make sure --version is consistent
 
91
        try:
 
92
            sys.stdout = tmp_out = StringIO()
 
93
            
 
94
            self.run_bzr('--version')
 
95
        finally:
 
96
            sys.stdout = save_out
 
97
 
 
98
        self.log('bzr --version output:')
 
99
        self.log(tmp_out.getvalue())
 
100
 
 
101
        self.assertEquals(output, tmp_out.getvalue())
 
102
 
 
103
 
 
104
        
 
105
 
 
106
 
 
107
class HelpCommands(ExternalBase):
 
108
    def runTest(self):
52
109
        self.runbzr('--help')
53
110
        self.runbzr('help')
54
111
        self.runbzr('help commands')
55
112
        self.runbzr('help help')
56
113
        self.runbzr('commit -h')
57
114
 
58
 
    def test_init_branch(self):
 
115
 
 
116
class InitBranch(ExternalBase):
 
117
    def runTest(self):
 
118
        import os
59
119
        self.runbzr(['init'])
60
120
 
61
 
    def test_whoami(self):
 
121
 
 
122
 
 
123
class UserIdentity(ExternalBase):
 
124
    def runTest(self):
62
125
        # this should always identify something, if only "john@localhost"
63
126
        self.runbzr("whoami")
64
127
        self.runbzr("whoami --email")
66
129
        self.assertEquals(self.runbzr("whoami --email",
67
130
                                      backtick=True).count('@'), 1)
68
131
        
69
 
    def test_whoami_branch(self):
70
 
        """branch specific user identity works."""
 
132
class UserIdentityBranch(ExternalBase):
 
133
    def runTest(self):
 
134
        # tests branch specific user identity
71
135
        self.runbzr('init')
72
136
        f = file('.bzr/email', 'wt')
73
137
        f.write('Branch Identity <branch@identi.ty>')
77
141
        self.assertTrue(whoami.startswith('Branch Identity <branch@identi.ty>'))
78
142
        self.assertTrue(whoami_email.startswith('branch@identi.ty'))
79
143
 
80
 
    def test_invalid_commands(self):
 
144
 
 
145
class InvalidCommands(ExternalBase):
 
146
    def runTest(self):
81
147
        self.runbzr("pants", retcode=1)
82
148
        self.runbzr("--pants off", retcode=1)
83
149
        self.runbzr("diff --message foo", retcode=1)
84
150
 
85
 
    def test_empty_commit(self):
 
151
 
 
152
 
 
153
class EmptyCommit(ExternalBase):
 
154
    def runTest(self):
86
155
        self.runbzr("init")
87
156
        self.build_tree(['hello.txt'])
88
157
        self.runbzr("commit -m empty", retcode=1)
89
158
        self.runbzr("add hello.txt")
90
159
        self.runbzr("commit -m added")
91
160
 
92
 
    def test_ignore_patterns(self):
 
161
 
 
162
 
 
163
class IgnorePatterns(ExternalBase):
 
164
    def runTest(self):
93
165
        from bzrlib.branch import Branch
94
166
        
95
167
        b = Branch('.', init=True)
120
192
        self.runbzr('ignore garh')
121
193
        self.assertEquals(list(b.unknowns()), [])
122
194
        assert file('.bzrignore', 'rb').read() == '*.blah\ngarh\n'
123
 
 
124
 
    def test_revert(self):
125
 
        import os
126
 
        self.runbzr('init')
127
 
 
128
 
        file('hello', 'wt').write('foo')
129
 
        self.runbzr('add hello')
130
 
        self.runbzr('commit -m setup hello')
131
 
 
132
 
        file('goodbye', 'wt').write('baz')
133
 
        self.runbzr('add goodbye')
134
 
        self.runbzr('commit -m setup goodbye')
135
 
        
136
 
        file('hello', 'wt').write('bar')
137
 
        file('goodbye', 'wt').write('qux')
138
 
        self.runbzr('revert hello')
139
 
        self.check_file_contents('hello', 'foo')
140
 
        self.check_file_contents('goodbye', 'qux')
141
 
        self.runbzr('revert')
142
 
        self.check_file_contents('goodbye', 'baz')
143
 
 
144
 
        os.mkdir('revertdir')
145
 
        self.runbzr('add revertdir')
146
 
        self.runbzr('commit -m f')
147
 
        os.rmdir('revertdir')
148
 
        self.runbzr('revert')
149
 
 
150
 
    def skipped_test_mv_modes(self):
151
 
        """Test two modes of operation for mv"""
152
 
        from bzrlib.branch import Branch
153
 
        b = Branch('.', init=True)
154
 
        self.build_tree(['a', 'c', 'subdir/'])
155
 
        self.run_bzr('mv', 'a', 'b')
156
 
        self.run_bzr('mv', 'b', 'subdir')
157
 
        self.run_bzr('mv', 'subdir/b', 'a')
158
 
        self.run_bzr('mv', 'a', 'b', 'subdir')
159
 
        self.run_bzr('mv', 'subdir/a', 'subdir/newa')
160
 
 
161
 
    def test_main_version(self):
162
 
        """Check output from version command and master option is reasonable"""
163
 
        # output is intentionally passed through to stdout so that we
164
 
        # can see the version being tested
165
 
        output = self.runbzr('version', backtick=1)
166
 
        self.log('bzr version output:')
167
 
        self.log(output)
168
 
        self.assert_(output.startswith('bzr (bazaar-ng) '))
169
 
        self.assertNotEqual(output.index('Canonical'), -1)
170
 
        # make sure --version is consistent
171
 
        tmp_output = self.runbzr('--version', backtick=1)
172
 
        self.log('bzr --version output:')
173
 
        self.log(tmp_output)
174
 
        self.assertEquals(output, tmp_output)
175
 
 
176
 
    def example_branch(test):
177
 
        test.runbzr('init')
178
 
        file('hello', 'wt').write('foo')
179
 
        test.runbzr('add hello')
180
 
        test.runbzr('commit -m setup hello')
181
 
        file('goodbye', 'wt').write('baz')
182
 
        test.runbzr('add goodbye')
183
 
        test.runbzr('commit -m setup goodbye')
184
 
 
185
 
    def test_revert(self):
186
 
        self.example_branch()
187
 
        file('hello', 'wt').write('bar')
188
 
        file('goodbye', 'wt').write('qux')
189
 
        self.runbzr('revert hello')
190
 
        self.check_file_contents('hello', 'foo')
191
 
        self.check_file_contents('goodbye', 'qux')
192
 
        self.runbzr('revert')
193
 
        self.check_file_contents('goodbye', 'baz')
194
 
 
195
 
    def test_merge(self):
196
 
        from bzrlib.branch import Branch
197
 
        import os
198
 
        
199
 
        os.mkdir('a')
200
 
        os.chdir('a')
201
 
 
202
 
        self.example_branch()
203
 
        os.chdir('..')
204
 
        self.runbzr('branch a b')
205
 
        os.chdir('b')
206
 
        file('goodbye', 'wt').write('quux')
207
 
        self.runbzr(['commit',  '-m',  "more u's are always good"])
208
 
 
209
 
        os.chdir('../a')
210
 
        file('hello', 'wt').write('quuux')
211
 
        # We can't merge when there are in-tree changes
212
 
        self.runbzr('merge ../b', retcode=1)
213
 
        self.runbzr(['commit', '-m', "Like an epidemic of u's"])
214
 
        self.runbzr('merge ../b')
215
 
        self.check_file_contents('goodbye', 'quux')
216
 
        # Merging a branch pulls its revision into the tree
217
 
        a = Branch('.')
218
 
        b = Branch('../b')
219
 
        a.get_revision_xml(b.last_patch())
220
 
 
221
 
        self.log('pending merges: %s', a.pending_merges())
222
 
        #        assert a.pending_merges() == [b.last_patch()], "Assertion %s %s" \
223
 
        #        % (a.pending_merges(), b.last_patch())
224
 
 
225
 
 
226
 
    def test_add_reports(self):
227
 
        """add command prints the names of added files."""
228
 
        b = Branch('.', init=True)
229
 
        self.build_tree(['top.txt', 'dir/', 'dir/sub.txt'])
230
 
 
231
 
        from cStringIO import StringIO
232
 
        out = StringIO()
233
 
 
234
 
        ret = self.apply_redirected(None, out, None,
235
 
                                    run_bzr,
236
 
                                    ['add'])
237
 
        self.assertEquals(ret, 0)
238
 
 
239
 
        # the ordering is not defined at the moment
240
 
        results = sorted(out.getvalue().rstrip('\n').split('\n'))
241
 
        self.assertEquals(['added dir',
242
 
                           'added dir/sub.txt',
243
 
                           'added top.txt',],
244
 
                          results)
 
195
        
 
196
 
245
197
 
246
198
 
247
199
class OldTests(ExternalBase):
248
 
    """old tests moved from ./testbzr."""
249
 
 
250
 
    def test_bzr(self):
 
200
    # old tests moved from ./testbzr
 
201
    def runTest(self):
251
202
        from os import chdir, mkdir
252
203
        from os.path import exists
253
204
        import os
415
366
 
416
367
        runbzr('info')
417
368
 
 
369
 
 
370
 
 
371
 
 
372
 
 
373
 
 
374
class RevertCommand(ExternalBase):
 
375
    def runTest(self):
 
376
        import os
 
377
        self.runbzr('init')
 
378
 
 
379
        file('hello', 'wt').write('foo')
 
380
        self.runbzr('add hello')
 
381
        self.runbzr('commit -m setup hello')
 
382
 
 
383
        file('goodbye', 'wt').write('baz')
 
384
        self.runbzr('add goodbye')
 
385
        self.runbzr('commit -m setup goodbye')
 
386
        
 
387
        file('hello', 'wt').write('bar')
 
388
        file('goodbye', 'wt').write('qux')
 
389
        self.runbzr('revert hello')
 
390
        self.check_file_contents('hello', 'foo')
 
391
        self.check_file_contents('goodbye', 'qux')
 
392
        self.runbzr('revert')
 
393
        self.check_file_contents('goodbye', 'baz')
 
394
        os.mkdir('revertdir')
 
395
        self.runbzr('add revertdir')
 
396
        self.runbzr('commit -m f')
 
397
        os.rmdir('revertdir')
 
398
        self.runbzr('revert')
 
399
 
 
400