~bzr-pqm/bzr/bzr.dev

768 by Martin Pool
- start some tests for directory renames
1
import os
2
import unittest
3
1141 by Martin Pool
- rename FunctionalTest to TestCaseInTempDir
4
from bzrlib.selftest import TestCaseInTempDir, TestCase
768 by Martin Pool
- start some tests for directory renames
5
from bzrlib.branch import ScratchBranch, Branch
778 by Martin Pool
- simple revert of text files
6
from bzrlib.errors import NotBranchError, NotVersionedError
7
8
1141 by Martin Pool
- rename FunctionalTest to TestCaseInTempDir
9
class TestBranch(TestCaseInTempDir):
1102 by Martin Pool
- merge test refactoring from robertc
10
11
    def test_unknowns(self):
1185.2.9 by Lalo Martins
getting rid of everything that calls the Branch constructor directly
12
        b = Branch.initialize('.')
781 by Martin Pool
- start of simple test for unknown-file reporting
13
14
        self.build_tree(['hello.txt',
15
                         'hello.txt~'])
16
17
        self.assertEquals(list(b.unknowns()),
18
                          ['hello.txt'])
19
1102 by Martin Pool
- merge test refactoring from robertc
20
    def test_no_changes(self):
885 by Martin Pool
- commit command refuses unless something is changed or --unchanged is given
21
        from bzrlib.errors import PointlessCommit
882 by Martin Pool
- Optionally raise EmptyCommit if there are no changes. Test for this.
22
        
1185.2.9 by Lalo Martins
getting rid of everything that calls the Branch constructor directly
23
        b = Branch.initialize('.')
882 by Martin Pool
- Optionally raise EmptyCommit if there are no changes. Test for this.
24
25
        self.build_tree(['hello.txt'])
26
885 by Martin Pool
- commit command refuses unless something is changed or --unchanged is given
27
        self.assertRaises(PointlessCommit,
882 by Martin Pool
- Optionally raise EmptyCommit if there are no changes. Test for this.
28
                          b.commit,
29
                          'commit without adding',
885 by Martin Pool
- commit command refuses unless something is changed or --unchanged is given
30
                          allow_pointless=False)
882 by Martin Pool
- Optionally raise EmptyCommit if there are no changes. Test for this.
31
885 by Martin Pool
- commit command refuses unless something is changed or --unchanged is given
32
        b.commit('commit pointless tree',
33
                 allow_pointless=True)
883 by Martin Pool
- more tests for detecting empty commits
34
35
        b.add('hello.txt')
36
        
37
        b.commit('commit first added file',
885 by Martin Pool
- commit command refuses unless something is changed or --unchanged is given
38
                 allow_pointless=False)
883 by Martin Pool
- more tests for detecting empty commits
39
        
885 by Martin Pool
- commit command refuses unless something is changed or --unchanged is given
40
        self.assertRaises(PointlessCommit,
883 by Martin Pool
- more tests for detecting empty commits
41
                          b.commit,
42
                          'commit after adding file',
885 by Martin Pool
- commit command refuses unless something is changed or --unchanged is given
43
                          allow_pointless=False)
883 by Martin Pool
- more tests for detecting empty commits
44
        
45
        b.commit('commit pointless revision with one file',
885 by Martin Pool
- commit command refuses unless something is changed or --unchanged is given
46
                 allow_pointless=True)
883 by Martin Pool
- more tests for detecting empty commits
47
48
        
882 by Martin Pool
- Optionally raise EmptyCommit if there are no changes. Test for this.
49
50
1102 by Martin Pool
- merge test refactoring from robertc
51
class TestRevisionId(TestCase):
52
    
53
    def test_validate_revision_id(self):
811 by Martin Pool
- Test case for validate_revision_id
54
        from bzrlib.revision import validate_revision_id
55
        validate_revision_id('mbp@sourcefrog.net-20050311061123-96a255005c7c9dbe')
56
        self.assertRaises(ValueError,
57
                          validate_revision_id,
58
                          ' asdkjas')
59
        self.assertRaises(ValueError,
60
                          validate_revision_id,
61
                          'mbp@sourcefrog.net-20050311061123-96a255005c7c9dbe\n')
62
        self.assertRaises(ValueError,
63
                          validate_revision_id,
64
                          ' mbp@sourcefrog.net-20050311061123-96a255005c7c9dbe')
65
        self.assertRaises(ValueError,
66
                          validate_revision_id,
67
                          'Martin Pool <mbp@sourcefrog.net>-20050311061123-96a255005c7c9dbe')
68
69
1141 by Martin Pool
- rename FunctionalTest to TestCaseInTempDir
70
class PendingMerges(TestCaseInTempDir):
1092.1.18 by Robert Collins
merge from mpool
71
1102 by Martin Pool
- merge test refactoring from robertc
72
    def test_pending_merges(self):
73
        """Tracking pending-merged revisions."""
1390 by Robert Collins
pair programming worx... merge integration and weave
74
        print "GHOST SUPPORT REMOVED"
75
        return
76
1185.2.9 by Lalo Martins
getting rid of everything that calls the Branch constructor directly
77
        b = Branch.initialize('.')
1092.1.18 by Robert Collins
merge from mpool
78
815 by Martin Pool
- track pending-merges
79
        self.assertEquals(b.pending_merges(), [])
1092.1.16 by Robert Collins
provide a helper to redirect output as desired
80
        b.add_pending_merge('foo@azkhazan-123123-abcabc')
81
        self.assertEquals(b.pending_merges(), ['foo@azkhazan-123123-abcabc'])
82
        b.add_pending_merge('foo@azkhazan-123123-abcabc')
83
        self.assertEquals(b.pending_merges(), ['foo@azkhazan-123123-abcabc'])
815 by Martin Pool
- track pending-merges
84
        b.add_pending_merge('wibble@fofof--20050401--1928390812')
85
        self.assertEquals(b.pending_merges(),
86
                          ['foo@azkhazan-123123-abcabc',
87
                           'wibble@fofof--20050401--1928390812'])
816 by Martin Pool
- don't write precursor field in new revision xml
88
        b.commit("commit from base with two merges")
89
        rev = b.get_revision(b.revision_history()[0])
90
        self.assertEquals(len(rev.parents), 2)
91
        self.assertEquals(rev.parents[0].revision_id,
92
                          'foo@azkhazan-123123-abcabc')
93
        self.assertEquals(rev.parents[1].revision_id,
94
                           'wibble@fofof--20050401--1928390812')
818 by Martin Pool
- Clear pending-merge list when committing.
95
        # list should be cleared when we do a commit
96
        self.assertEquals(b.pending_merges(), [])
1390 by Robert Collins
pair programming worx... merge integration and weave
97
 
98
1278 by Martin Pool
- remove test that tried to commit absent parents
99
class MoreTests(TestCaseInTempDir):
1390 by Robert Collins
pair programming worx... merge integration and weave
100
1102 by Martin Pool
- merge test refactoring from robertc
101
    def test_revert(self):
102
        """Test selected-file revert"""
1185.2.9 by Lalo Martins
getting rid of everything that calls the Branch constructor directly
103
        b = Branch.initialize('.')
778 by Martin Pool
- simple revert of text files
104
105
        self.build_tree(['hello.txt'])
106
        file('hello.txt', 'w').write('initial hello')
107
108
        self.assertRaises(NotVersionedError,
109
                          b.revert, ['hello.txt'])
110
        
111
        b.add(['hello.txt'])
112
        b.commit('create initial hello.txt')
113
114
        self.check_file_contents('hello.txt', 'initial hello')
115
        file('hello.txt', 'w').write('new hello')
116
        self.check_file_contents('hello.txt', 'new hello')
117
118
        # revert file modified since last revision
119
        b.revert(['hello.txt'])
120
        self.check_file_contents('hello.txt', 'initial hello')
782 by Martin Pool
- Branch.revert copies files to backups before reverting them
121
        self.check_file_contents('hello.txt~', 'new hello')
778 by Martin Pool
- simple revert of text files
122
782 by Martin Pool
- Branch.revert copies files to backups before reverting them
123
        # reverting again clobbers the backup
778 by Martin Pool
- simple revert of text files
124
        b.revert(['hello.txt'])
125
        self.check_file_contents('hello.txt', 'initial hello')
782 by Martin Pool
- Branch.revert copies files to backups before reverting them
126
        self.check_file_contents('hello.txt~', 'initial hello')
778 by Martin Pool
- simple revert of text files
127
1102 by Martin Pool
- merge test refactoring from robertc
128
    def test_rename_dirs(self):
129
        """Test renaming directories and the files within them."""
1185.2.9 by Lalo Martins
getting rid of everything that calls the Branch constructor directly
130
        b = Branch.initialize('.')
768 by Martin Pool
- start some tests for directory renames
131
        self.build_tree(['dir/', 'dir/sub/', 'dir/sub/file'])
132
        b.add(['dir', 'dir/sub', 'dir/sub/file'])
133
134
        b.commit('create initial state')
135
136
        # TODO: lift out to a test helper that checks the shape of
137
        # an inventory
138
        
139
        revid = b.revision_history()[0]
140
        self.log('first revision_id is {%s}' % revid)
141
        
142
        inv = b.get_revision_inventory(revid)
143
        self.log('contents of inventory: %r' % inv.entries())
144
145
        self.check_inventory_shape(inv,
146
                                   ['dir', 'dir/sub', 'dir/sub/file'])
147
771 by Martin Pool
- more tests of directory renames
148
        b.rename_one('dir', 'newdir')
149
150
        self.check_inventory_shape(b.inventory,
151
                                   ['newdir', 'newdir/sub', 'newdir/sub/file'])
152
153
        b.rename_one('newdir/sub', 'newdir/newsub')
154
        self.check_inventory_shape(b.inventory,
155
                                   ['newdir', 'newdir/newsub',
156
                                    'newdir/newsub/file'])
157
1102 by Martin Pool
- merge test refactoring from robertc
158
    def test_relpath(self):
159
        """test for branch path lookups
160
    
161
        Branch.relpath and bzrlib.branch._relpath do a simple but subtle
162
        job: given a path (either relative to cwd or absolute), work out
163
        if it is inside a branch and return the path relative to the base.
164
        """
601 by Martin Pool
- whitebox tests for branch path handling
165
        from bzrlib.branch import _relpath
166
        import tempfile, shutil
167
        
168
        savedir = os.getcwdu()
169
        dtmp = tempfile.mkdtemp()
910 by Martin Pool
patch from John
170
        # On Mac OSX, /tmp actually expands to /private/tmp
171
        dtmp = os.path.realpath(dtmp)
601 by Martin Pool
- whitebox tests for branch path handling
172
173
        def rp(p):
174
            return _relpath(dtmp, p)
175
        
176
        try:
177
            # check paths inside dtmp while standing outside it
178
            self.assertEqual(rp(os.path.join(dtmp, 'foo')), 'foo')
179
180
            # root = nothing
181
            self.assertEqual(rp(dtmp), '')
182
183
            self.assertRaises(NotBranchError,
184
                              rp,
185
                              '/etc')
186
187
            # now some near-miss operations -- note that
188
            # os.path.commonprefix gets these wrong!
189
            self.assertRaises(NotBranchError,
190
                              rp,
191
                              dtmp.rstrip('\\/') + '2')
192
193
            self.assertRaises(NotBranchError,
194
                              rp,
195
                              dtmp.rstrip('\\/') + '2/foo')
196
197
            # now operations based on relpath of files in current
198
            # directory, or nearby
199
            os.chdir(dtmp)
200
1185.1.40 by Robert Collins
Merge what applied of Alexander Belchenko's win32 patch.
201
            FOO_BAR_QUUX = os.path.join('foo', 'bar', 'quux')
202
            self.assertEqual(rp('foo/bar/quux'), FOO_BAR_QUUX)
601 by Martin Pool
- whitebox tests for branch path handling
203
204
            self.assertEqual(rp('foo'), 'foo')
205
206
            self.assertEqual(rp('./foo'), 'foo')
207
208
            self.assertEqual(rp(os.path.abspath('foo')), 'foo')
209
210
            self.assertRaises(NotBranchError,
211
                              rp, '../foo')
212
213
        finally:
214
            os.chdir(savedir)
215
            shutil.rmtree(dtmp)