/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

  • Committer: Martin Pool
  • Date: 2005-08-24 08:59:32 UTC
  • Revision ID: mbp@sourcefrog.net-20050824085932-c61f1f1f1c930e13
- Add a simple UIFactory 

  The idea of this is to let a client of bzrlib set some 
  policy about how output is displayed.

  In this revision all that's done is that progress bars
  are constructed by a policy established by the application
  rather than being randomly constructed in the library 
  or passed down the calls.  This avoids progress bars
  popping up while running the test suite and cleans up
  some code.

Show diffs side-by-side

added added

removed removed

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