~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:
27
27
"""
28
28
 
29
29
import sys
30
 
 
31
 
from bzrlib.selftest import TestBase, InTempDir, BzrTestBase
32
 
 
 
30
from bzrlib.selftest import InTempDir, BzrTestBase
33
31
 
34
32
 
35
33
class ExternalBase(InTempDir):
36
 
    def runbzr(self, args, retcode=0):
 
34
 
 
35
    def runbzr(self, args, retcode=0,backtick=False):
37
36
        try:
38
37
            import shutil
39
38
            from subprocess import call
43
42
 
44
43
        if isinstance(args, basestring):
45
44
            args = args.split()
46
 
            
47
 
        return self.runcmd(['python', self.BZRPATH,] + args,
48
 
                           retcode=retcode)
49
 
 
50
 
 
51
 
 
52
 
class MvCommand(BzrTestBase):
53
 
    def runbzr(self):
54
 
        """Test two modes of operation for mv"""
55
 
        b = Branch('.', init=True)
56
 
        self.build_tree(['a', 'c', 'subdir/'])
57
 
        self.run_bzr('mv', 'a', 'b')
58
 
        self.run_bzr('mv', 'b', 'subdir')
59
 
        self.run_bzr('mv', 'subdir/b', 'a')
60
 
        self.run_bzr('mv', 'a', 'b', 'subdir')
61
 
        self.run_bzr('mv', 'subdir/a', 'subdir/newa')
62
 
 
63
 
 
64
 
 
65
 
class TestVersion(BzrTestBase):
66
 
    """Check output from version command and master option is reasonable"""
67
 
    def runTest(self):
68
 
        # output is intentionally passed through to stdout so that we
69
 
        # can see the version being tested
70
 
        from cStringIO import StringIO
71
 
        save_out = sys.stdout
72
 
        try:
73
 
            sys.stdout = tmp_out = StringIO()
74
 
            
75
 
            self.run_bzr('version')
76
 
        finally:
77
 
            sys.stdout = save_out
78
 
 
79
 
        output = tmp_out.getvalue()
80
 
        self.log('bzr version output:')
81
 
        self.log(output)
82
 
        
83
 
        self.assert_(output.startswith('bzr (bazaar-ng) '))
84
 
        self.assertNotEqual(output.index('Canonical'), -1)
85
 
 
86
 
        # make sure --version is consistent
87
 
        try:
88
 
            sys.stdout = tmp_out = StringIO()
89
 
            
90
 
            self.run_bzr('--version')
91
 
        finally:
92
 
            sys.stdout = save_out
93
 
 
94
 
        self.log('bzr --version output:')
95
 
        self.log(tmp_out.getvalue())
96
 
 
97
 
        self.assertEquals(output, tmp_out.getvalue())
98
 
 
99
 
 
100
 
        
101
 
 
102
 
 
103
 
class HelpCommands(ExternalBase):
104
 
    def runTest(self):
 
45
 
 
46
        if backtick:
 
47
            return self.backtick(['python', self.BZRPATH,] + args,
 
48
                           retcode=retcode)
 
49
        else:
 
50
            return self.runcmd(['python', self.BZRPATH,] + args,
 
51
                           retcode=retcode)
 
52
 
 
53
class TestCommands(ExternalBase):
 
54
 
 
55
    def test_help_commands(self):
105
56
        self.runbzr('--help')
106
57
        self.runbzr('help')
107
58
        self.runbzr('help commands')
108
59
        self.runbzr('help help')
109
60
        self.runbzr('commit -h')
110
61
 
111
 
 
112
 
class InitBranch(ExternalBase):
113
 
    def runTest(self):
 
62
    def test_init_branch(self):
114
63
        import os
115
64
        self.runbzr(['init'])
116
65
 
117
 
 
118
 
 
119
 
class UserIdentity(ExternalBase):
120
 
    def runTest(self):
 
66
    def test_whoami(self):
121
67
        # this should always identify something, if only "john@localhost"
122
68
        self.runbzr("whoami")
123
69
        self.runbzr("whoami --email")
124
 
        self.assertEquals(self.backtick("bzr whoami --email").count('@'),
125
 
                          1)
126
 
 
127
 
 
128
 
class InvalidCommands(ExternalBase):
129
 
    def runTest(self):
 
70
 
 
71
        self.assertEquals(self.runbzr("whoami --email",
 
72
                                      backtick=True).count('@'), 1)
 
73
        
 
74
    def test_whoami_branch(self):
 
75
        """branch specific user identity works."""
 
76
        self.runbzr('init')
 
77
        f = file('.bzr/email', 'wt')
 
78
        f.write('Branch Identity <branch@identi.ty>')
 
79
        f.close()
 
80
        whoami = self.runbzr("whoami",backtick=True)
 
81
        whoami_email = self.runbzr("whoami --email",backtick=True)
 
82
        self.assertTrue(whoami.startswith('Branch Identity <branch@identi.ty>'))
 
83
        self.assertTrue(whoami_email.startswith('branch@identi.ty'))
 
84
 
 
85
    def test_invalid_commands(self):
130
86
        self.runbzr("pants", retcode=1)
131
87
        self.runbzr("--pants off", retcode=1)
132
88
        self.runbzr("diff --message foo", retcode=1)
133
89
 
134
 
 
135
 
 
136
 
class EmptyCommit(ExternalBase):
137
 
    def runTest(self):
 
90
    def test_empty_commit(self):
138
91
        self.runbzr("init")
139
92
        self.build_tree(['hello.txt'])
140
93
        self.runbzr("commit -m empty", retcode=1)
141
94
        self.runbzr("add hello.txt")
142
95
        self.runbzr("commit -m added")
143
96
 
144
 
 
145
 
 
146
 
class IgnorePatterns(ExternalBase):
147
 
    def runTest(self):
 
97
    def test_ignore_patterns(self):
148
98
        from bzrlib.branch import Branch
149
99
        
150
100
        b = Branch('.', init=True)
175
125
        self.runbzr('ignore garh')
176
126
        self.assertEquals(list(b.unknowns()), [])
177
127
        assert file('.bzrignore', 'rb').read() == '*.blah\ngarh\n'
 
128
 
 
129
    def test_revert(self):
 
130
        import os
 
131
        self.runbzr('init')
 
132
 
 
133
        file('hello', 'wt').write('foo')
 
134
        self.runbzr('add hello')
 
135
        self.runbzr('commit -m setup hello')
 
136
 
 
137
        file('goodbye', 'wt').write('baz')
 
138
        self.runbzr('add goodbye')
 
139
        self.runbzr('commit -m setup goodbye')
178
140
        
179
 
 
180
 
 
 
141
        file('hello', 'wt').write('bar')
 
142
        file('goodbye', 'wt').write('qux')
 
143
        self.runbzr('revert hello')
 
144
        self.check_file_contents('hello', 'foo')
 
145
        self.check_file_contents('goodbye', 'qux')
 
146
        self.runbzr('revert')
 
147
        self.check_file_contents('goodbye', 'baz')
 
148
 
 
149
        os.mkdir('revertdir')
 
150
        self.runbzr('add revertdir')
 
151
        self.runbzr('commit -m f')
 
152
        os.rmdir('revertdir')
 
153
        self.runbzr('revert')
 
154
 
 
155
    def skipped_test_mv_modes(self):
 
156
        """Test two modes of operation for mv"""
 
157
        from bzrlib.branch import Branch
 
158
        b = Branch('.', init=True)
 
159
        self.build_tree(['a', 'c', 'subdir/'])
 
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')
 
165
 
 
166
    def test_main_version(self):
 
167
        """Check output from version command and master option is reasonable"""
 
168
        # output is intentionally passed through to stdout so that we
 
169
        # can see the version being tested
 
170
        output = self.runbzr('version', backtick=1)
 
171
        self.log('bzr version output:')
 
172
        self.log(output)
 
173
        self.assert_(output.startswith('bzr (bazaar-ng) '))
 
174
        self.assertNotEqual(output.index('Canonical'), -1)
 
175
        # make sure --version is consistent
 
176
        tmp_output = self.runbzr('--version', backtick=1)
 
177
        self.log('bzr --version output:')
 
178
        self.log(tmp_output)
 
179
        self.assertEquals(output, tmp_output)
 
180
 
 
181
    def example_branch(test):
 
182
        test.runbzr('init')
 
183
        file('hello', 'wt').write('foo')
 
184
        test.runbzr('add hello')
 
185
        test.runbzr('commit -m setup hello')
 
186
        file('goodbye', 'wt').write('baz')
 
187
        test.runbzr('add goodbye')
 
188
        test.runbzr('commit -m setup goodbye')
 
189
 
 
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')
 
199
 
 
200
    def test_merge(self):
 
201
        from bzrlib.branch import Branch
 
202
        import os
 
203
        os.mkdir('a')
 
204
        os.chdir('a')
 
205
        self.example_branch()
 
206
        os.chdir('..')
 
207
        self.runbzr('branch a b')
 
208
        os.chdir('b')
 
209
        file('goodbye', 'wt').write('quux')
 
210
        self.runbzr(['commit',  '-m',  "more u's are always good"])
 
211
 
 
212
        os.chdir('../a')
 
213
        file('hello', 'wt').write('quuux')
 
214
        # We can't merge when there are in-tree changes
 
215
        self.runbzr('merge ../b', retcode=1)
 
216
        self.runbzr(['commit', '-m', "Like an epidemic of u's"])
 
217
        self.runbzr('merge ../b')
 
218
        self.check_file_contents('goodbye', 'quux')
 
219
        # Merging a branch pulls its revision into the tree
 
220
        a = Branch('.')
 
221
        b = Branch('../b')
 
222
        a.get_revision_xml(b.last_patch())
 
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())
181
226
 
182
227
class OldTests(ExternalBase):
183
 
    # old tests moved from ./testbzr
184
 
    def runTest(self):
 
228
    """old tests moved from ./testbzr."""
 
229
 
 
230
    def test_bzr(self):
185
231
        from os import chdir, mkdir
186
232
        from os.path import exists
187
233
        import os
349
395
 
350
396
        runbzr('info')
351
397
 
352
 
 
353
 
 
354
 
 
355
 
 
356
 
 
357
 
class RevertCommand(ExternalBase):
358
 
    def runTest(self):
359
 
        self.runbzr('init')
360
 
 
361
 
        file('hello', 'wt').write('foo')
362
 
        self.runbzr('add hello')
363
 
        self.runbzr('commit -m setup hello')
364
 
        
365
 
        file('hello', 'wt').write('bar')
366
 
        self.runbzr('revert hello')
367
 
        self.check_file_contents('hello', 'foo')
368