/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: Robert Collins
  • Date: 2005-10-16 00:22:17 UTC
  • mto: This revision was merged to the branch mainline in revision 1457.
  • Revision ID: robertc@lifelesslap.robertcollins.net-20051016002217-aa38f9c1eb13ee48
Plugins are now loaded under bzrlib.plugins, not bzrlib.plugin.

Plugins are also made available for other plugins to use by making them 
accessible via import bzrlib.plugins.NAME. You should not import other
plugins during the __init__ of your plugin though, as no ordering is
guaranteed, and the plugins directory is not on the python path.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import os
 
2
import unittest
 
3
 
 
4
from bzrlib.selftest import TestCaseInTempDir, TestCase
 
5
from bzrlib.branch import ScratchBranch, Branch
 
6
from bzrlib.errors import NotBranchError, NotVersionedError
 
7
 
 
8
 
 
9
class TestBranch(TestCaseInTempDir):
 
10
 
 
11
    def test_unknowns(self):
 
12
        b = Branch.initialize('.')
 
13
 
 
14
        self.build_tree(['hello.txt',
 
15
                         'hello.txt~'])
 
16
 
 
17
        self.assertEquals(list(b.unknowns()),
 
18
                          ['hello.txt'])
 
19
 
 
20
    def test_no_changes(self):
 
21
        from bzrlib.errors import PointlessCommit
 
22
        
 
23
        b = Branch.initialize('.')
 
24
 
 
25
        self.build_tree(['hello.txt'])
 
26
 
 
27
        self.assertRaises(PointlessCommit,
 
28
                          b.commit,
 
29
                          'commit without adding',
 
30
                          allow_pointless=False)
 
31
 
 
32
        b.commit('commit pointless tree',
 
33
                 allow_pointless=True)
 
34
 
 
35
        b.add('hello.txt')
 
36
        
 
37
        b.commit('commit first added file',
 
38
                 allow_pointless=False)
 
39
        
 
40
        self.assertRaises(PointlessCommit,
 
41
                          b.commit,
 
42
                          'commit after adding file',
 
43
                          allow_pointless=False)
 
44
        
 
45
        b.commit('commit pointless revision with one file',
 
46
                 allow_pointless=True)
 
47
 
 
48
 
 
49
class MoreTests(TestCaseInTempDir):
 
50
 
 
51
    def test_revert(self):
 
52
        """Test selected-file revert"""
 
53
        b = Branch.initialize('.')
 
54
 
 
55
        self.build_tree(['hello.txt'])
 
56
        file('hello.txt', 'w').write('initial hello')
 
57
 
 
58
        self.assertRaises(NotVersionedError,
 
59
                          b.revert, ['hello.txt'])
 
60
        
 
61
        b.add(['hello.txt'])
 
62
        b.commit('create initial hello.txt')
 
63
 
 
64
        self.check_file_contents('hello.txt', 'initial hello')
 
65
        file('hello.txt', 'w').write('new hello')
 
66
        self.check_file_contents('hello.txt', 'new hello')
 
67
 
 
68
        # revert file modified since last revision
 
69
        b.revert(['hello.txt'])
 
70
        self.check_file_contents('hello.txt', 'initial hello')
 
71
        self.check_file_contents('hello.txt~', 'new hello')
 
72
 
 
73
        # reverting again clobbers the backup
 
74
        b.revert(['hello.txt'])
 
75
        self.check_file_contents('hello.txt', 'initial hello')
 
76
        self.check_file_contents('hello.txt~', 'initial hello')
 
77
 
 
78
    def test_rename_dirs(self):
 
79
        """Test renaming directories and the files within them."""
 
80
        b = Branch.initialize('.')
 
81
        self.build_tree(['dir/', 'dir/sub/', 'dir/sub/file'])
 
82
        b.add(['dir', 'dir/sub', 'dir/sub/file'])
 
83
 
 
84
        b.commit('create initial state')
 
85
 
 
86
        # TODO: lift out to a test helper that checks the shape of
 
87
        # an inventory
 
88
        
 
89
        revid = b.revision_history()[0]
 
90
        self.log('first revision_id is {%s}' % revid)
 
91
        
 
92
        inv = b.get_revision_inventory(revid)
 
93
        self.log('contents of inventory: %r' % inv.entries())
 
94
 
 
95
        self.check_inventory_shape(inv,
 
96
                                   ['dir', 'dir/sub', 'dir/sub/file'])
 
97
 
 
98
        b.rename_one('dir', 'newdir')
 
99
 
 
100
        self.check_inventory_shape(b.inventory,
 
101
                                   ['newdir', 'newdir/sub', 'newdir/sub/file'])
 
102
 
 
103
        b.rename_one('newdir/sub', 'newdir/newsub')
 
104
        self.check_inventory_shape(b.inventory,
 
105
                                   ['newdir', 'newdir/newsub',
 
106
                                    'newdir/newsub/file'])
 
107
 
 
108
    def test_relpath(self):
 
109
        """test for branch path lookups
 
110
    
 
111
        Branch.relpath and bzrlib.branch._relpath do a simple but subtle
 
112
        job: given a path (either relative to cwd or absolute), work out
 
113
        if it is inside a branch and return the path relative to the base.
 
114
        """
 
115
        from bzrlib.branch import _relpath
 
116
        import tempfile, shutil
 
117
        
 
118
        savedir = os.getcwdu()
 
119
        dtmp = tempfile.mkdtemp()
 
120
        # On Mac OSX, /tmp actually expands to /private/tmp
 
121
        dtmp = os.path.realpath(dtmp)
 
122
 
 
123
        def rp(p):
 
124
            return _relpath(dtmp, p)
 
125
        
 
126
        try:
 
127
            # check paths inside dtmp while standing outside it
 
128
            self.assertEqual(rp(os.path.join(dtmp, 'foo')), 'foo')
 
129
 
 
130
            # root = nothing
 
131
            self.assertEqual(rp(dtmp), '')
 
132
 
 
133
            self.assertRaises(NotBranchError,
 
134
                              rp,
 
135
                              '/etc')
 
136
 
 
137
            # now some near-miss operations -- note that
 
138
            # os.path.commonprefix gets these wrong!
 
139
            self.assertRaises(NotBranchError,
 
140
                              rp,
 
141
                              dtmp.rstrip('\\/') + '2')
 
142
 
 
143
            self.assertRaises(NotBranchError,
 
144
                              rp,
 
145
                              dtmp.rstrip('\\/') + '2/foo')
 
146
 
 
147
            # now operations based on relpath of files in current
 
148
            # directory, or nearby
 
149
            os.chdir(dtmp)
 
150
 
 
151
            FOO_BAR_QUUX = os.path.join('foo', 'bar', 'quux')
 
152
            self.assertEqual(rp('foo/bar/quux'), FOO_BAR_QUUX)
 
153
 
 
154
            self.assertEqual(rp('foo'), 'foo')
 
155
 
 
156
            self.assertEqual(rp('./foo'), 'foo')
 
157
 
 
158
            self.assertEqual(rp(os.path.abspath('foo')), 'foo')
 
159
 
 
160
            self.assertRaises(NotBranchError,
 
161
                              rp, '../foo')
 
162
 
 
163
        finally:
 
164
            os.chdir(savedir)
 
165
            shutil.rmtree(dtmp)