/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/selftest/whitebox.py

More work on roundtrip push support.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#! /usr/bin/python
2
 
 
3
 
import os
4
 
import unittest
5
 
 
6
 
from bzrlib.selftest import InTempDir, TestBase
7
 
from bzrlib.branch import ScratchBranch, Branch
8
 
from bzrlib.errors import NotBranchError, NotVersionedError
9
 
 
10
 
 
11
 
class Unknowns(InTempDir):
12
 
    def runTest(self):
13
 
        b = Branch('.', init=True)
14
 
 
15
 
        self.build_tree(['hello.txt',
16
 
                         'hello.txt~'])
17
 
 
18
 
        self.assertEquals(list(b.unknowns()),
19
 
                          ['hello.txt'])
20
 
 
21
 
 
22
 
 
23
 
class NoChanges(InTempDir):
24
 
    def runTest(self):
25
 
        from bzrlib.errors import EmptyCommit
26
 
        
27
 
        b = Branch('.', init=True)
28
 
 
29
 
        self.build_tree(['hello.txt'])
30
 
 
31
 
        self.assertRaises(EmptyCommit,
32
 
                          b.commit,
33
 
                          'commit without adding',
34
 
                          allow_empty=False)
35
 
 
36
 
 
37
 
 
38
 
 
39
 
class ValidateRevisionId(TestBase):
40
 
    def runTest(self):
41
 
        from bzrlib.revision import validate_revision_id
42
 
        validate_revision_id('mbp@sourcefrog.net-20050311061123-96a255005c7c9dbe')
43
 
        
44
 
        self.assertRaises(ValueError,
45
 
                          validate_revision_id,
46
 
                          ' asdkjas')
47
 
 
48
 
 
49
 
        self.assertRaises(ValueError,
50
 
                          validate_revision_id,
51
 
                          'mbp@sourcefrog.net-20050311061123-96a255005c7c9dbe\n')
52
 
 
53
 
 
54
 
        self.assertRaises(ValueError,
55
 
                          validate_revision_id,
56
 
                          ' mbp@sourcefrog.net-20050311061123-96a255005c7c9dbe')
57
 
 
58
 
        self.assertRaises(ValueError,
59
 
                          validate_revision_id,
60
 
                          'Martin Pool <mbp@sourcefrog.net>-20050311061123-96a255005c7c9dbe')
61
 
 
62
 
 
63
 
 
64
 
class PendingMerges(InTempDir):
65
 
    """Tracking pending-merged revisions."""
66
 
    def runTest(self):
67
 
        b = Branch('.', init=True)
68
 
 
69
 
        self.assertEquals(b.pending_merges(), [])
70
 
        
71
 
        b.add_pending_merge('foo@azkhazan-123123-abcabc')
72
 
        
73
 
        self.assertEquals(b.pending_merges(), ['foo@azkhazan-123123-abcabc'])
74
 
    
75
 
        b.add_pending_merge('foo@azkhazan-123123-abcabc')
76
 
        
77
 
        self.assertEquals(b.pending_merges(), ['foo@azkhazan-123123-abcabc'])
78
 
 
79
 
        b.add_pending_merge('wibble@fofof--20050401--1928390812')
80
 
        self.assertEquals(b.pending_merges(),
81
 
                          ['foo@azkhazan-123123-abcabc',
82
 
                           'wibble@fofof--20050401--1928390812'])
83
 
 
84
 
        b.commit("commit from base with two merges")
85
 
 
86
 
        rev = b.get_revision(b.revision_history()[0])
87
 
        self.assertEquals(len(rev.parents), 2)
88
 
        self.assertEquals(rev.parents[0].revision_id,
89
 
                          'foo@azkhazan-123123-abcabc')
90
 
        self.assertEquals(rev.parents[1].revision_id,
91
 
                           'wibble@fofof--20050401--1928390812')
92
 
 
93
 
        # list should be cleared when we do a commit
94
 
        self.assertEquals(b.pending_merges(), [])
95
 
        
96
 
        
97
 
        
98
 
 
99
 
class Revert(InTempDir):
100
 
    """Test selected-file revert"""
101
 
    def runTest(self):
102
 
        b = Branch('.', init=True)
103
 
 
104
 
        self.build_tree(['hello.txt'])
105
 
        file('hello.txt', 'w').write('initial hello')
106
 
 
107
 
        self.assertRaises(NotVersionedError,
108
 
                          b.revert, ['hello.txt'])
109
 
        
110
 
        b.add(['hello.txt'])
111
 
        b.commit('create initial hello.txt')
112
 
 
113
 
        self.check_file_contents('hello.txt', 'initial hello')
114
 
        file('hello.txt', 'w').write('new hello')
115
 
        self.check_file_contents('hello.txt', 'new hello')
116
 
 
117
 
        # revert file modified since last revision
118
 
        b.revert(['hello.txt'])
119
 
        self.check_file_contents('hello.txt', 'initial hello')
120
 
        self.check_file_contents('hello.txt~', 'new hello')
121
 
 
122
 
        # reverting again clobbers the backup
123
 
        b.revert(['hello.txt'])
124
 
        self.check_file_contents('hello.txt', 'initial hello')
125
 
        self.check_file_contents('hello.txt~', 'initial hello')
126
 
 
127
 
 
128
 
 
129
 
class RenameDirs(InTempDir):
130
 
    """Test renaming directories and the files within them."""
131
 
    def runTest(self):
132
 
        b = Branch('.', init=True)
133
 
        self.build_tree(['dir/', 'dir/sub/', 'dir/sub/file'])
134
 
        b.add(['dir', 'dir/sub', 'dir/sub/file'])
135
 
 
136
 
        b.commit('create initial state')
137
 
 
138
 
        # TODO: lift out to a test helper that checks the shape of
139
 
        # an inventory
140
 
        
141
 
        revid = b.revision_history()[0]
142
 
        self.log('first revision_id is {%s}' % revid)
143
 
        
144
 
        inv = b.get_revision_inventory(revid)
145
 
        self.log('contents of inventory: %r' % inv.entries())
146
 
 
147
 
        self.check_inventory_shape(inv,
148
 
                                   ['dir', 'dir/sub', 'dir/sub/file'])
149
 
 
150
 
        b.rename_one('dir', 'newdir')
151
 
 
152
 
        self.check_inventory_shape(b.inventory,
153
 
                                   ['newdir', 'newdir/sub', 'newdir/sub/file'])
154
 
 
155
 
        b.rename_one('newdir/sub', 'newdir/newsub')
156
 
        self.check_inventory_shape(b.inventory,
157
 
                                   ['newdir', 'newdir/newsub',
158
 
                                    'newdir/newsub/file'])
159
 
 
160
 
        
161
 
 
162
 
 
163
 
class BranchPathTestCase(TestBase):
164
 
    """test for branch path lookups
165
 
 
166
 
    Branch.relpath and bzrlib.branch._relpath do a simple but subtle
167
 
    job: given a path (either relative to cwd or absolute), work out
168
 
    if it is inside a branch and return the path relative to the base.
169
 
    """
170
 
 
171
 
    def runTest(self):
172
 
        from bzrlib.branch import _relpath
173
 
        import tempfile, shutil
174
 
        
175
 
        savedir = os.getcwdu()
176
 
        dtmp = tempfile.mkdtemp()
177
 
 
178
 
        def rp(p):
179
 
            return _relpath(dtmp, p)
180
 
        
181
 
        try:
182
 
            # check paths inside dtmp while standing outside it
183
 
            self.assertEqual(rp(os.path.join(dtmp, 'foo')), 'foo')
184
 
 
185
 
            # root = nothing
186
 
            self.assertEqual(rp(dtmp), '')
187
 
 
188
 
            self.assertRaises(NotBranchError,
189
 
                              rp,
190
 
                              '/etc')
191
 
 
192
 
            # now some near-miss operations -- note that
193
 
            # os.path.commonprefix gets these wrong!
194
 
            self.assertRaises(NotBranchError,
195
 
                              rp,
196
 
                              dtmp.rstrip('\\/') + '2')
197
 
 
198
 
            self.assertRaises(NotBranchError,
199
 
                              rp,
200
 
                              dtmp.rstrip('\\/') + '2/foo')
201
 
 
202
 
            # now operations based on relpath of files in current
203
 
            # directory, or nearby
204
 
            os.chdir(dtmp)
205
 
 
206
 
            self.assertEqual(rp('foo/bar/quux'), 'foo/bar/quux')
207
 
 
208
 
            self.assertEqual(rp('foo'), 'foo')
209
 
 
210
 
            self.assertEqual(rp('./foo'), 'foo')
211
 
 
212
 
            self.assertEqual(rp(os.path.abspath('foo')), 'foo')
213
 
 
214
 
            self.assertRaises(NotBranchError,
215
 
                              rp, '../foo')
216
 
 
217
 
        finally:
218
 
            os.chdir(savedir)
219
 
            shutil.rmtree(dtmp)
220
 
 
221
 
 
222
 
 
223
 
 
224
 
TEST_CLASSES = [Unknowns,
225
 
                ValidateRevisionId,
226
 
                PendingMerges,
227
 
                Revert,
228
 
                RenameDirs,
229
 
                BranchPathTestCase,
230
 
                ]