/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/tests/test_whitebox.py

  • Committer: Martin Pool
  • Date: 2007-05-04 08:46:39 UTC
  • mto: (2483.1.1 jam-integration)
  • mto: This revision was merged to the branch mainline in revision 2484.
  • Revision ID: mbp@sourcefrog.net-20070504084639-8v8mzetmr1y74xer
Rename push/pull back to 'run_hooks' (jameinel)

Reorganize Branch.push into some template methods: public push,
_push_with_bound_branches, and _basic_push.  This fixes the case 
where the destination of push is bound, but the source branch
format doesn't support binding.

Run push and pull hook tests with a local branch that does support binding,
rather than skipping if the branch can't be bound to another of the same
format.

(broken) because the hooks are given the wrong parameters when 
pushing into something bound to a remote branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#! /usr/bin/python
 
1
# Copyright (C) 2005, 2006 Canonical Ltd
 
2
#
 
3
# This program is free software; you can redistribute it and/or modify
 
4
# it under the terms of the GNU General Public License as published by
 
5
# the Free Software Foundation; either version 2 of the License, or
 
6
# (at your option) any later version.
 
7
#
 
8
# This program is distributed in the hope that it will be useful,
 
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
# GNU General Public License for more details.
 
12
#
 
13
# You should have received a copy of the GNU General Public License
 
14
# along with this program; if not, write to the Free Software
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
2
16
 
3
17
import os
4
18
import unittest
5
19
 
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 PointlessCommit
26
 
        
27
 
        b = Branch('.', init=True)
28
 
 
29
 
        self.build_tree(['hello.txt'])
30
 
 
31
 
        self.assertRaises(PointlessCommit,
32
 
                          b.commit,
33
 
                          'commit without adding',
34
 
                          allow_pointless=False)
35
 
 
36
 
        b.commit('commit pointless tree',
37
 
                 allow_pointless=True)
38
 
 
39
 
        b.add('hello.txt')
40
 
        
41
 
        b.commit('commit first added file',
42
 
                 allow_pointless=False)
43
 
        
44
 
        self.assertRaises(PointlessCommit,
45
 
                          b.commit,
46
 
                          'commit after adding file',
47
 
                          allow_pointless=False)
48
 
        
49
 
        b.commit('commit pointless revision with one file',
50
 
                 allow_pointless=True)
51
 
 
52
 
        b.add_pending_merge('mbp@892739123-2005-123123')
53
 
        b.commit('commit new merge with no text changes',
54
 
                 allow_pointless=False)
55
 
        
56
 
 
57
 
 
58
 
class ValidateRevisionId(TestBase):
59
 
    def runTest(self):
60
 
        from bzrlib.revision import validate_revision_id
61
 
        validate_revision_id('mbp@sourcefrog.net-20050311061123-96a255005c7c9dbe')
62
 
        
63
 
        self.assertRaises(ValueError,
64
 
                          validate_revision_id,
65
 
                          ' asdkjas')
66
 
 
67
 
 
68
 
        self.assertRaises(ValueError,
69
 
                          validate_revision_id,
70
 
                          'mbp@sourcefrog.net-20050311061123-96a255005c7c9dbe\n')
71
 
 
72
 
 
73
 
        self.assertRaises(ValueError,
74
 
                          validate_revision_id,
75
 
                          ' mbp@sourcefrog.net-20050311061123-96a255005c7c9dbe')
76
 
 
77
 
        self.assertRaises(ValueError,
78
 
                          validate_revision_id,
79
 
                          'Martin Pool <mbp@sourcefrog.net>-20050311061123-96a255005c7c9dbe')
80
 
 
81
 
 
82
 
 
83
 
class PendingMerges(InTempDir):
84
 
    """Tracking pending-merged revisions."""
85
 
    def runTest(self):
86
 
        b = Branch('.', init=True)
87
 
 
88
 
        self.assertEquals(b.pending_merges(), [])
89
 
        
90
 
        b.add_pending_merge('foo@azkhazan-123123-abcabc')
91
 
        
92
 
        self.assertEquals(b.pending_merges(), ['foo@azkhazan-123123-abcabc'])
 
20
from bzrlib import (
 
21
    osutils,
 
22
    )
 
23
from bzrlib.tests import TestCaseWithTransport, TestCase
 
24
from bzrlib.branch import Branch
 
25
from bzrlib.errors import PathNotChild
 
26
from bzrlib.osutils import relpath, pathjoin, abspath, realpath
 
27
 
 
28
 
 
29
class MoreTests(TestCaseWithTransport):
 
30
 
 
31
    def test_relpath(self):
 
32
        """test for branch path lookups
93
33
    
94
 
        b.add_pending_merge('foo@azkhazan-123123-abcabc')
95
 
        
96
 
        self.assertEquals(b.pending_merges(), ['foo@azkhazan-123123-abcabc'])
97
 
 
98
 
        b.add_pending_merge('wibble@fofof--20050401--1928390812')
99
 
        self.assertEquals(b.pending_merges(),
100
 
                          ['foo@azkhazan-123123-abcabc',
101
 
                           'wibble@fofof--20050401--1928390812'])
102
 
 
103
 
        b.commit("commit from base with two merges")
104
 
 
105
 
        rev = b.get_revision(b.revision_history()[0])
106
 
        self.assertEquals(len(rev.parents), 2)
107
 
        self.assertEquals(rev.parents[0].revision_id,
108
 
                          'foo@azkhazan-123123-abcabc')
109
 
        self.assertEquals(rev.parents[1].revision_id,
110
 
                           'wibble@fofof--20050401--1928390812')
111
 
 
112
 
        # list should be cleared when we do a commit
113
 
        self.assertEquals(b.pending_merges(), [])
114
 
        
115
 
        
116
 
        
117
 
 
118
 
class Revert(InTempDir):
119
 
    """Test selected-file revert"""
120
 
    def runTest(self):
121
 
        b = Branch('.', init=True)
122
 
 
123
 
        self.build_tree(['hello.txt'])
124
 
        file('hello.txt', 'w').write('initial hello')
125
 
 
126
 
        self.assertRaises(NotVersionedError,
127
 
                          b.revert, ['hello.txt'])
128
 
        
129
 
        b.add(['hello.txt'])
130
 
        b.commit('create initial hello.txt')
131
 
 
132
 
        self.check_file_contents('hello.txt', 'initial hello')
133
 
        file('hello.txt', 'w').write('new hello')
134
 
        self.check_file_contents('hello.txt', 'new hello')
135
 
 
136
 
        # revert file modified since last revision
137
 
        b.revert(['hello.txt'])
138
 
        self.check_file_contents('hello.txt', 'initial hello')
139
 
        self.check_file_contents('hello.txt~', 'new hello')
140
 
 
141
 
        # reverting again clobbers the backup
142
 
        b.revert(['hello.txt'])
143
 
        self.check_file_contents('hello.txt', 'initial hello')
144
 
        self.check_file_contents('hello.txt~', 'initial hello')
145
 
 
146
 
 
147
 
 
148
 
class RenameDirs(InTempDir):
149
 
    """Test renaming directories and the files within them."""
150
 
    def runTest(self):
151
 
        b = Branch('.', init=True)
152
 
        self.build_tree(['dir/', 'dir/sub/', 'dir/sub/file'])
153
 
        b.add(['dir', 'dir/sub', 'dir/sub/file'])
154
 
 
155
 
        b.commit('create initial state')
156
 
 
157
 
        # TODO: lift out to a test helper that checks the shape of
158
 
        # an inventory
159
 
        
160
 
        revid = b.revision_history()[0]
161
 
        self.log('first revision_id is {%s}' % revid)
162
 
        
163
 
        inv = b.get_revision_inventory(revid)
164
 
        self.log('contents of inventory: %r' % inv.entries())
165
 
 
166
 
        self.check_inventory_shape(inv,
167
 
                                   ['dir', 'dir/sub', 'dir/sub/file'])
168
 
 
169
 
        b.rename_one('dir', 'newdir')
170
 
 
171
 
        self.check_inventory_shape(b.inventory,
172
 
                                   ['newdir', 'newdir/sub', 'newdir/sub/file'])
173
 
 
174
 
        b.rename_one('newdir/sub', 'newdir/newsub')
175
 
        self.check_inventory_shape(b.inventory,
176
 
                                   ['newdir', 'newdir/newsub',
177
 
                                    'newdir/newsub/file'])
178
 
 
179
 
        
180
 
 
181
 
 
182
 
class BranchPathTestCase(TestBase):
183
 
    """test for branch path lookups
184
 
 
185
 
    Branch.relpath and bzrlib.branch._relpath do a simple but subtle
186
 
    job: given a path (either relative to cwd or absolute), work out
187
 
    if it is inside a branch and return the path relative to the base.
188
 
    """
189
 
 
190
 
    def runTest(self):
191
 
        from bzrlib.branch import _relpath
192
 
        import tempfile, shutil
 
34
        bzrlib.osutils._relpath do a simple but subtle
 
35
        job: given a path (either relative to cwd or absolute), work out
 
36
        if it is inside a branch and return the path relative to the base.
 
37
        """
 
38
        import tempfile
193
39
        
194
40
        savedir = os.getcwdu()
195
41
        dtmp = tempfile.mkdtemp()
196
42
        # On Mac OSX, /tmp actually expands to /private/tmp
197
 
        dtmp = os.path.realpath(dtmp)
 
43
        dtmp = realpath(dtmp)
198
44
 
199
45
        def rp(p):
200
 
            return _relpath(dtmp, p)
 
46
            return relpath(dtmp, p)
201
47
        
202
48
        try:
203
49
            # check paths inside dtmp while standing outside it
204
 
            self.assertEqual(rp(os.path.join(dtmp, 'foo')), 'foo')
 
50
            self.assertEqual(rp(pathjoin(dtmp, 'foo')), 'foo')
205
51
 
206
52
            # root = nothing
207
53
            self.assertEqual(rp(dtmp), '')
208
54
 
209
 
            self.assertRaises(NotBranchError,
 
55
            self.assertRaises(PathNotChild,
210
56
                              rp,
211
57
                              '/etc')
212
58
 
213
59
            # now some near-miss operations -- note that
214
60
            # os.path.commonprefix gets these wrong!
215
 
            self.assertRaises(NotBranchError,
 
61
            self.assertRaises(PathNotChild,
216
62
                              rp,
217
63
                              dtmp.rstrip('\\/') + '2')
218
64
 
219
 
            self.assertRaises(NotBranchError,
 
65
            self.assertRaises(PathNotChild,
220
66
                              rp,
221
67
                              dtmp.rstrip('\\/') + '2/foo')
222
68
 
230
76
 
231
77
            self.assertEqual(rp('./foo'), 'foo')
232
78
 
233
 
            self.assertEqual(rp(os.path.abspath('foo')), 'foo')
 
79
            self.assertEqual(rp(abspath('foo')), 'foo')
234
80
 
235
 
            self.assertRaises(NotBranchError,
 
81
            self.assertRaises(PathNotChild,
236
82
                              rp, '../foo')
237
83
 
238
84
        finally:
239
85
            os.chdir(savedir)
240
 
            shutil.rmtree(dtmp)
241
 
 
242
 
 
243
 
 
244
 
 
245
 
TEST_CLASSES = [Unknowns,
246
 
                ValidateRevisionId,
247
 
                PendingMerges,
248
 
                Revert,
249
 
                RenameDirs,
250
 
                BranchPathTestCase,
251
 
                ]
 
86
            osutils.rmtree(dtmp)