/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
601 by Martin Pool
- whitebox tests for branch path handling
1
#! /usr/bin/python
2
768 by Martin Pool
- start some tests for directory renames
3
import os
4
import unittest
5
6
from bzrlib.selftest import InTempDir, TestBase
7
from bzrlib.branch import ScratchBranch, Branch
778 by Martin Pool
- simple revert of text files
8
from bzrlib.errors import NotBranchError, NotVersionedError
9
10
781 by Martin Pool
- start of simple test for unknown-file reporting
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
811 by Martin Pool
- Test case for validate_revision_id
22
23
class ValidateRevisionId(TestBase):
24
    def runTest(self):
25
        from bzrlib.revision import validate_revision_id
26
        validate_revision_id('mbp@sourcefrog.net-20050311061123-96a255005c7c9dbe')
27
        
28
        self.assertRaises(ValueError,
29
                          validate_revision_id,
30
                          ' asdkjas')
31
32
33
        self.assertRaises(ValueError,
34
                          validate_revision_id,
35
                          'mbp@sourcefrog.net-20050311061123-96a255005c7c9dbe\n')
36
37
38
        self.assertRaises(ValueError,
39
                          validate_revision_id,
40
                          ' mbp@sourcefrog.net-20050311061123-96a255005c7c9dbe')
41
42
        self.assertRaises(ValueError,
43
                          validate_revision_id,
44
                          'Martin Pool <mbp@sourcefrog.net>-20050311061123-96a255005c7c9dbe')
45
46
47
815 by Martin Pool
- track pending-merges
48
class PendingMerges(InTempDir):
49
    """Tracking pending-merged revisions."""
50
    def runTest(self):
51
        b = Branch('.', init=True)
52
53
        self.assertEquals(b.pending_merges(), [])
54
        
55
        b.add_pending_merge('foo@azkhazan-123123-abcabc')
56
        
57
        self.assertEquals(b.pending_merges(), ['foo@azkhazan-123123-abcabc'])
58
    
59
        b.add_pending_merge('foo@azkhazan-123123-abcabc')
60
        
61
        self.assertEquals(b.pending_merges(), ['foo@azkhazan-123123-abcabc'])
62
63
        b.add_pending_merge('wibble@fofof--20050401--1928390812')
64
        self.assertEquals(b.pending_merges(),
65
                          ['foo@azkhazan-123123-abcabc',
66
                           'wibble@fofof--20050401--1928390812'])
816 by Martin Pool
- don't write precursor field in new revision xml
67
68
        b.commit("commit from base with two merges")
69
70
        rev = b.get_revision(b.revision_history()[0])
71
        self.assertEquals(len(rev.parents), 2)
72
        self.assertEquals(rev.parents[0].revision_id,
73
                          'foo@azkhazan-123123-abcabc')
74
        self.assertEquals(rev.parents[1].revision_id,
75
                           'wibble@fofof--20050401--1928390812')
76
        
815 by Martin Pool
- track pending-merges
77
        
78
778 by Martin Pool
- simple revert of text files
79
class Revert(InTempDir):
80
    """Test selected-file revert"""
81
    def runTest(self):
82
        b = Branch('.', init=True)
83
84
        self.build_tree(['hello.txt'])
85
        file('hello.txt', 'w').write('initial hello')
86
87
        self.assertRaises(NotVersionedError,
88
                          b.revert, ['hello.txt'])
89
        
90
        b.add(['hello.txt'])
91
        b.commit('create initial hello.txt')
92
93
        self.check_file_contents('hello.txt', 'initial hello')
94
        file('hello.txt', 'w').write('new hello')
95
        self.check_file_contents('hello.txt', 'new hello')
96
97
        # revert file modified since last revision
98
        b.revert(['hello.txt'])
99
        self.check_file_contents('hello.txt', 'initial hello')
782 by Martin Pool
- Branch.revert copies files to backups before reverting them
100
        self.check_file_contents('hello.txt~', 'new hello')
778 by Martin Pool
- simple revert of text files
101
782 by Martin Pool
- Branch.revert copies files to backups before reverting them
102
        # reverting again clobbers the backup
778 by Martin Pool
- simple revert of text files
103
        b.revert(['hello.txt'])
104
        self.check_file_contents('hello.txt', 'initial hello')
782 by Martin Pool
- Branch.revert copies files to backups before reverting them
105
        self.check_file_contents('hello.txt~', 'initial hello')
778 by Martin Pool
- simple revert of text files
106
768 by Martin Pool
- start some tests for directory renames
107
108
109
class RenameDirs(InTempDir):
110
    """Test renaming directories and the files within them."""
111
    def runTest(self):
112
        b = Branch('.', init=True)
113
        self.build_tree(['dir/', 'dir/sub/', 'dir/sub/file'])
114
        b.add(['dir', 'dir/sub', 'dir/sub/file'])
115
116
        b.commit('create initial state')
117
118
        # TODO: lift out to a test helper that checks the shape of
119
        # an inventory
120
        
121
        revid = b.revision_history()[0]
122
        self.log('first revision_id is {%s}' % revid)
123
        
124
        inv = b.get_revision_inventory(revid)
125
        self.log('contents of inventory: %r' % inv.entries())
126
127
        self.check_inventory_shape(inv,
128
                                   ['dir', 'dir/sub', 'dir/sub/file'])
129
771 by Martin Pool
- more tests of directory renames
130
        b.rename_one('dir', 'newdir')
131
132
        self.check_inventory_shape(b.inventory,
133
                                   ['newdir', 'newdir/sub', 'newdir/sub/file'])
134
135
        b.rename_one('newdir/sub', 'newdir/newsub')
136
        self.check_inventory_shape(b.inventory,
137
                                   ['newdir', 'newdir/newsub',
138
                                    'newdir/newsub/file'])
139
768 by Martin Pool
- start some tests for directory renames
140
        
141
142
143
class BranchPathTestCase(TestBase):
601 by Martin Pool
- whitebox tests for branch path handling
144
    """test for branch path lookups
145
146
    Branch.relpath and bzrlib.branch._relpath do a simple but subtle
147
    job: given a path (either relative to cwd or absolute), work out
148
    if it is inside a branch and return the path relative to the base.
149
    """
768 by Martin Pool
- start some tests for directory renames
150
601 by Martin Pool
- whitebox tests for branch path handling
151
    def runTest(self):
152
        from bzrlib.branch import _relpath
153
        import tempfile, shutil
154
        
155
        savedir = os.getcwdu()
156
        dtmp = tempfile.mkdtemp()
157
158
        def rp(p):
159
            return _relpath(dtmp, p)
160
        
161
        try:
162
            # check paths inside dtmp while standing outside it
163
            self.assertEqual(rp(os.path.join(dtmp, 'foo')), 'foo')
164
165
            # root = nothing
166
            self.assertEqual(rp(dtmp), '')
167
168
            self.assertRaises(NotBranchError,
169
                              rp,
170
                              '/etc')
171
172
            # now some near-miss operations -- note that
173
            # os.path.commonprefix gets these wrong!
174
            self.assertRaises(NotBranchError,
175
                              rp,
176
                              dtmp.rstrip('\\/') + '2')
177
178
            self.assertRaises(NotBranchError,
179
                              rp,
180
                              dtmp.rstrip('\\/') + '2/foo')
181
182
            # now operations based on relpath of files in current
183
            # directory, or nearby
184
            os.chdir(dtmp)
185
186
            self.assertEqual(rp('foo/bar/quux'), 'foo/bar/quux')
187
188
            self.assertEqual(rp('foo'), 'foo')
189
190
            self.assertEqual(rp('./foo'), 'foo')
191
192
            self.assertEqual(rp(os.path.abspath('foo')), 'foo')
193
194
            self.assertRaises(NotBranchError,
195
                              rp, '../foo')
196
197
        finally:
198
            os.chdir(savedir)
199
            shutil.rmtree(dtmp)