~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_whitebox.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2006-10-02 00:43:10 UTC
  • mfrom: (2057.1.1 bzr.dev)
  • Revision ID: pqm@pqm.ubuntu.com-20061002004310-6e09ddd7fd28f71c
Merge in 0.11 NEWS entry.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2005, 2006 by 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
 
16
 
1
17
import os
2
18
import unittest
3
19
 
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'])
 
20
from bzrlib.tests import TestCaseWithTransport, TestCase
 
21
from bzrlib.branch import Branch
 
22
from bzrlib.errors import PathNotChild
 
23
from bzrlib.osutils import relpath, pathjoin, abspath, realpath
 
24
 
 
25
 
 
26
class MoreTests(TestCaseWithTransport):
107
27
 
108
28
    def test_relpath(self):
109
29
        """test for branch path lookups
112
32
        job: given a path (either relative to cwd or absolute), work out
113
33
        if it is inside a branch and return the path relative to the base.
114
34
        """
115
 
        from bzrlib.osutils import relpath
116
 
        import tempfile, shutil
 
35
        import tempfile
 
36
        from bzrlib.osutils import rmtree
117
37
        
118
38
        savedir = os.getcwdu()
119
39
        dtmp = tempfile.mkdtemp()
120
40
        # On Mac OSX, /tmp actually expands to /private/tmp
121
 
        dtmp = os.path.realpath(dtmp)
 
41
        dtmp = realpath(dtmp)
122
42
 
123
43
        def rp(p):
124
44
            return relpath(dtmp, p)
125
45
        
126
46
        try:
127
47
            # check paths inside dtmp while standing outside it
128
 
            self.assertEqual(rp(os.path.join(dtmp, 'foo')), 'foo')
 
48
            self.assertEqual(rp(pathjoin(dtmp, 'foo')), 'foo')
129
49
 
130
50
            # root = nothing
131
51
            self.assertEqual(rp(dtmp), '')
132
52
 
133
 
            self.assertRaises(NotBranchError,
 
53
            self.assertRaises(PathNotChild,
134
54
                              rp,
135
55
                              '/etc')
136
56
 
137
57
            # now some near-miss operations -- note that
138
58
            # os.path.commonprefix gets these wrong!
139
 
            self.assertRaises(NotBranchError,
 
59
            self.assertRaises(PathNotChild,
140
60
                              rp,
141
61
                              dtmp.rstrip('\\/') + '2')
142
62
 
143
 
            self.assertRaises(NotBranchError,
 
63
            self.assertRaises(PathNotChild,
144
64
                              rp,
145
65
                              dtmp.rstrip('\\/') + '2/foo')
146
66
 
148
68
            # directory, or nearby
149
69
            os.chdir(dtmp)
150
70
 
151
 
            FOO_BAR_QUUX = os.path.join('foo', 'bar', 'quux')
152
 
            self.assertEqual(rp('foo/bar/quux'), FOO_BAR_QUUX)
 
71
            self.assertEqual(rp('foo/bar/quux'), 'foo/bar/quux')
153
72
 
154
73
            self.assertEqual(rp('foo'), 'foo')
155
74
 
156
75
            self.assertEqual(rp('./foo'), 'foo')
157
76
 
158
 
            self.assertEqual(rp(os.path.abspath('foo')), 'foo')
 
77
            self.assertEqual(rp(abspath('foo')), 'foo')
159
78
 
160
 
            self.assertRaises(NotBranchError,
 
79
            self.assertRaises(PathNotChild,
161
80
                              rp, '../foo')
162
81
 
163
82
        finally:
164
83
            os.chdir(savedir)
165
 
            shutil.rmtree(dtmp)
 
84
            rmtree(dtmp)