/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/tests/blackbox/test_add.py

  • Committer: John Arbash Meinel
  • Date: 2009-12-22 16:28:47 UTC
  • mto: This revision was merged to the branch mainline in revision 4922.
  • Revision ID: john@arbash-meinel.com-20091222162847-tvnsc69to4l4uf5r
Implement a permute_for_extension helper.

Use it for all of the 'simple' extension permutations.
It basically permutes all tests in the current module, by setting TestCase.module.
Which works well for most of our extension tests. Some had more advanced
handling of permutations (extra permutations, custom vars, etc.)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2005, 2006, 2007, 2009 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
 
16
#
 
17
 
 
18
"""Tests of the 'bzr add' command."""
 
19
 
 
20
import os
 
21
 
 
22
from bzrlib import osutils
 
23
from bzrlib.tests import (
 
24
    condition_isinstance,
 
25
    split_suite_by_condition,
 
26
    multiply_tests,
 
27
    SymlinkFeature
 
28
    )
 
29
from bzrlib.tests.blackbox import ExternalBase
 
30
 
 
31
 
 
32
def load_tests(standard_tests, module, loader):
 
33
    """Parameterize tests for view-aware vs not."""
 
34
    to_adapt, result = split_suite_by_condition(
 
35
        standard_tests, condition_isinstance(TestAdd))
 
36
    scenarios = [
 
37
        ('pre-views', {'branch_tree_format': 'pack-0.92'}),
 
38
        ('view-aware', {'branch_tree_format': 'development6-rich-root'}),
 
39
        ]
 
40
    return multiply_tests(to_adapt, scenarios, result)
 
41
 
 
42
 
 
43
class TestAdd(ExternalBase):
 
44
 
 
45
    def make_branch_and_tree(self, dir):
 
46
        return ExternalBase.make_branch_and_tree(self, dir,
 
47
            format=self.branch_tree_format)
 
48
 
 
49
    def test_add_reports(self):
 
50
        """add command prints the names of added files."""
 
51
        tree = self.make_branch_and_tree('.')
 
52
        self.build_tree(['top.txt', 'dir/', 'dir/sub.txt', 'CVS'])
 
53
        self.build_tree_contents([('.bzrignore', 'CVS\n')])
 
54
        out = self.run_bzr('add')[0]
 
55
        # the ordering is not defined at the moment
 
56
        results = sorted(out.rstrip('\n').split('\n'))
 
57
        self.assertEquals(['adding .bzrignore',
 
58
                           'adding dir',
 
59
                           'adding dir/sub.txt',
 
60
                           'adding top.txt'],
 
61
                          results)
 
62
        out = self.run_bzr('add -v')[0]
 
63
        results = sorted(out.rstrip('\n').split('\n'))
 
64
        self.assertEquals(['ignored CVS matching "CVS"'],
 
65
                          results)
 
66
 
 
67
    def test_add_quiet_is(self):
 
68
        """add -q does not print the names of added files."""
 
69
        tree = self.make_branch_and_tree('.')
 
70
        self.build_tree(['top.txt', 'dir/', 'dir/sub.txt'])
 
71
        out = self.run_bzr('add -q')[0]
 
72
        # the ordering is not defined at the moment
 
73
        results = sorted(out.rstrip('\n').split('\n'))
 
74
        self.assertEquals([''], results)
 
75
 
 
76
    def test_add_in_unversioned(self):
 
77
        """Try to add a file in an unversioned directory.
 
78
 
 
79
        "bzr add" should add the parent(s) as necessary.
 
80
        """
 
81
        tree = self.make_branch_and_tree('.')
 
82
        self.build_tree(['inertiatic/', 'inertiatic/esp'])
 
83
        self.assertEquals(self.run_bzr('unknowns')[0], 'inertiatic\n')
 
84
        self.run_bzr('add inertiatic/esp')
 
85
        self.assertEquals(self.run_bzr('unknowns')[0], '')
 
86
 
 
87
        # Multiple unversioned parents
 
88
        self.build_tree(['veil/', 'veil/cerpin/', 'veil/cerpin/taxt'])
 
89
        self.assertEquals(self.run_bzr('unknowns')[0], 'veil\n')
 
90
        self.run_bzr('add veil/cerpin/taxt')
 
91
        self.assertEquals(self.run_bzr('unknowns')[0], '')
 
92
 
 
93
        # Check whacky paths work
 
94
        self.build_tree(['cicatriz/', 'cicatriz/esp'])
 
95
        self.assertEquals(self.run_bzr('unknowns')[0], 'cicatriz\n')
 
96
        self.run_bzr('add inertiatic/../cicatriz/esp')
 
97
        self.assertEquals(self.run_bzr('unknowns')[0], '')
 
98
 
 
99
    def test_add_in_versioned(self):
 
100
        """Try to add a file in a versioned directory.
 
101
 
 
102
        "bzr add" should do this happily.
 
103
        """
 
104
        tree = self.make_branch_and_tree('.')
 
105
        self.build_tree(['inertiatic/', 'inertiatic/esp'])
 
106
        self.assertEquals(self.run_bzr('unknowns')[0], 'inertiatic\n')
 
107
        self.run_bzr('add --no-recurse inertiatic')
 
108
        self.assertEquals(self.run_bzr('unknowns')[0], 'inertiatic/esp\n')
 
109
        self.run_bzr('add inertiatic/esp')
 
110
        self.assertEquals(self.run_bzr('unknowns')[0], '')
 
111
 
 
112
    def test_subdir_add(self):
 
113
        """Add in subdirectory should add only things from there down"""
 
114
        from bzrlib.workingtree import WorkingTree
 
115
 
 
116
        eq = self.assertEqual
 
117
        ass = self.assertTrue
 
118
        chdir = os.chdir
 
119
 
 
120
        t = self.make_branch_and_tree('.')
 
121
        b = t.branch
 
122
        self.build_tree(['src/', 'README'])
 
123
 
 
124
        eq(sorted(t.unknowns()),
 
125
           ['README', 'src'])
 
126
 
 
127
        self.run_bzr('add src')
 
128
 
 
129
        self.build_tree(['src/foo.c'])
 
130
 
 
131
        # add with no arguments in a subdirectory gets only files below that
 
132
        # subdirectory
 
133
        chdir('src')
 
134
        self.run_bzr('add')
 
135
        self.assertEquals(self.run_bzr('unknowns')[0], 'README\n')
 
136
        # reopen to see the new changes
 
137
        t = t.bzrdir.open_workingtree()
 
138
        versioned = [path for path, entry in t.iter_entries_by_dir()]
 
139
        self.assertEquals(versioned,
 
140
            ['', 'src', 'src/foo.c'])
 
141
 
 
142
        # add from the parent directory should pick up all file names
 
143
        chdir('..')
 
144
        self.run_bzr('add')
 
145
        self.assertEquals(self.run_bzr('unknowns')[0], '')
 
146
        self.run_bzr('check')
 
147
 
 
148
    def test_add_missing(self):
 
149
        """bzr add foo where foo is missing should error."""
 
150
        self.make_branch_and_tree('.')
 
151
        self.run_bzr('add missing-file', retcode=3)
 
152
 
 
153
    def test_add_from(self):
 
154
        base_tree = self.make_branch_and_tree('base')
 
155
        self.build_tree(['base/a', 'base/b/', 'base/b/c'])
 
156
        base_tree.add(['a', 'b', 'b/c'])
 
157
        base_tree.commit('foo')
 
158
 
 
159
        new_tree = self.make_branch_and_tree('new')
 
160
        self.build_tree(['new/a', 'new/b/', 'new/b/c', 'd'])
 
161
 
 
162
        os.chdir('new')
 
163
        out, err = self.run_bzr('add --file-ids-from ../base')
 
164
        self.assertEqual('', err)
 
165
        self.assertEqualDiff('adding a w/ file id from a\n'
 
166
                             'adding b w/ file id from b\n'
 
167
                             'adding b/c w/ file id from b/c\n',
 
168
                             out)
 
169
        new_tree = new_tree.bzrdir.open_workingtree()
 
170
        self.assertEqual(base_tree.path2id('a'), new_tree.path2id('a'))
 
171
        self.assertEqual(base_tree.path2id('b'), new_tree.path2id('b'))
 
172
        self.assertEqual(base_tree.path2id('b/c'), new_tree.path2id('b/c'))
 
173
 
 
174
    def test_add_from_subdir(self):
 
175
        base_tree = self.make_branch_and_tree('base')
 
176
        self.build_tree(['base/a', 'base/b/', 'base/b/c', 'base/b/d'])
 
177
        base_tree.add(['a', 'b', 'b/c', 'b/d'])
 
178
        base_tree.commit('foo')
 
179
 
 
180
        new_tree = self.make_branch_and_tree('new')
 
181
        self.build_tree(['new/c', 'new/d'])
 
182
 
 
183
        os.chdir('new')
 
184
        out, err = self.run_bzr('add --file-ids-from ../base/b')
 
185
        self.assertEqual('', err)
 
186
        self.assertEqualDiff('adding c w/ file id from b/c\n'
 
187
                             'adding d w/ file id from b/d\n',
 
188
                             out)
 
189
 
 
190
        new_tree = new_tree.bzrdir.open_workingtree()
 
191
        self.assertEqual(base_tree.path2id('b/c'), new_tree.path2id('c'))
 
192
        self.assertEqual(base_tree.path2id('b/d'), new_tree.path2id('d'))
 
193
 
 
194
    def test_add_dry_run(self):
 
195
        """Test a dry run add, make sure nothing is added."""
 
196
        wt = self.make_branch_and_tree('.')
 
197
        self.build_tree(['inertiatic/', 'inertiatic/esp'])
 
198
        self.assertEqual(list(wt.unknowns()), ['inertiatic'])
 
199
        self.run_bzr('add --dry-run')
 
200
        self.assertEqual(list(wt.unknowns()), ['inertiatic'])
 
201
 
 
202
    def test_add_control_dir(self):
 
203
        """The control dir and its content should be refused."""
 
204
        self.make_branch_and_tree('.')
 
205
        err = self.run_bzr('add .bzr', retcode=3)[1]
 
206
        self.assertContainsRe(err, r'ERROR:.*\.bzr.*control file')
 
207
        err = self.run_bzr('add .bzr/README', retcode=3)[1]
 
208
        self.assertContainsRe(err, r'ERROR:.*\.bzr.*control file')
 
209
        self.build_tree(['.bzr/crescent'])
 
210
        err = self.run_bzr('add .bzr/crescent', retcode=3)[1]
 
211
        self.assertContainsRe(err, r'ERROR:.*\.bzr.*control file')
 
212
 
 
213
    def test_add_via_symlink(self):
 
214
        self.requireFeature(SymlinkFeature)
 
215
        self.make_branch_and_tree('source')
 
216
        self.build_tree(['source/top.txt'])
 
217
        os.symlink('source', 'link')
 
218
        out = self.run_bzr(['add', 'link/top.txt'])[0]
 
219
        self.assertEquals(out, 'adding top.txt\n')
 
220
 
 
221
    def test_add_symlink_to_abspath(self):
 
222
        self.requireFeature(SymlinkFeature)
 
223
        self.make_branch_and_tree('tree')
 
224
        os.symlink(osutils.abspath('target'), 'tree/link')
 
225
        out = self.run_bzr(['add', 'tree/link'])[0]
 
226
        self.assertEquals(out, 'adding link\n')