/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_cat.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 Canonical Ltd
 
2
# -*- coding: utf-8 -*-
 
3
#
 
4
# This program is free software; you can redistribute it and/or modify
 
5
# it under the terms of the GNU General Public License as published by
 
6
# the Free Software Foundation; either version 2 of the License, or
 
7
# (at your option) any later version.
 
8
#
 
9
# This program is distributed in the hope that it will be useful,
 
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
12
# GNU General Public License for more details.
 
13
#
 
14
# You should have received a copy of the GNU General Public License
 
15
# along with this program; if not, write to the Free Software
 
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
17
 
 
18
 
 
19
"""Black-box tests for bzr cat.
 
20
"""
 
21
 
 
22
import os
 
23
import sys
 
24
 
 
25
from bzrlib import tests
 
26
 
 
27
 
 
28
class TestCat(tests.TestCaseWithTransport):
 
29
 
 
30
    def test_cat(self):
 
31
        tree = self.make_branch_and_tree('branch')
 
32
        self.build_tree_contents([('branch/a', 'foo\n')])
 
33
        tree.add('a')
 
34
        os.chdir('branch')
 
35
        # 'bzr cat' without an option should cat the last revision
 
36
        self.run_bzr(['cat', 'a'], retcode=3)
 
37
 
 
38
        tree.commit(message='1')
 
39
        self.build_tree_contents([('a', 'baz\n')])
 
40
 
 
41
        # We use run_bzr_subprocess rather than run_bzr here so that we can
 
42
        # test mangling of line-endings on Windows.
 
43
        self.assertEquals(self.run_bzr_subprocess(['cat', 'a'])[0], 'foo\n')
 
44
 
 
45
        tree.commit(message='2')
 
46
        self.assertEquals(self.run_bzr_subprocess(['cat', 'a'])[0], 'baz\n')
 
47
        self.assertEquals(self.run_bzr_subprocess(
 
48
            ['cat', 'a', '-r', '1'])[0],
 
49
            'foo\n')
 
50
        self.assertEquals(self.run_bzr_subprocess(
 
51
            ['cat', 'a', '-r', '-1'])[0],
 
52
            'baz\n')
 
53
 
 
54
        rev_id = tree.branch.last_revision()
 
55
 
 
56
        self.assertEquals(self.run_bzr_subprocess(
 
57
            ['cat', 'a', '-r', 'revid:%s' % rev_id])[0],
 
58
            'baz\n')
 
59
 
 
60
        os.chdir('..')
 
61
 
 
62
        self.assertEquals(self.run_bzr_subprocess(
 
63
            ['cat', 'branch/a', '-r', 'revno:1:branch'])[0],
 
64
            'foo\n')
 
65
        self.run_bzr(['cat', 'a'], retcode=3)
 
66
        self.run_bzr(
 
67
                ['cat', 'a', '-r', 'revno:1:branch-that-does-not-exist'],
 
68
                retcode=3)
 
69
 
 
70
    def test_cat_different_id(self):
 
71
        """'cat' works with old and new files"""
 
72
        self.disable_missing_extensions_warning()
 
73
        tree = self.make_branch_and_tree('.')
 
74
        # the files are named after their path in the revision and
 
75
        # current trees later in the test case
 
76
        # a-rev-tree is special because it appears in both the revision
 
77
        # tree and the working tree
 
78
        self.build_tree_contents([('a-rev-tree', 'foo\n'),
 
79
            ('c-rev', 'baz\n'), ('d-rev', 'bar\n'), ('e-rev', 'qux\n')])
 
80
        tree.lock_write()
 
81
        try:
 
82
            tree.add(['a-rev-tree', 'c-rev', 'd-rev', 'e-rev'])
 
83
            tree.commit('add test files', rev_id='first')
 
84
            # remove currently uses self._write_inventory -
 
85
            # work around that for now.
 
86
            tree.flush()
 
87
            tree.remove(['d-rev'])
 
88
            tree.rename_one('a-rev-tree', 'b-tree')
 
89
            tree.rename_one('c-rev', 'a-rev-tree')
 
90
            tree.rename_one('e-rev', 'old-rev')
 
91
            self.build_tree_contents([('e-rev', 'new\n')])
 
92
            tree.add(['e-rev'])
 
93
        finally:
 
94
            # calling bzr as another process require free lock on win32
 
95
            tree.unlock()
 
96
 
 
97
        # 'b-tree' is not present in the old tree.
 
98
        self.run_bzr_error(["^bzr: ERROR: u?'b-tree' "
 
99
                            "is not present in revision .+$"],
 
100
                           'cat b-tree --name-from-revision')
 
101
 
 
102
        # get to the old file automatically
 
103
        out, err = self.run_bzr_subprocess('cat d-rev')
 
104
        self.assertEqual('bar\n', out)
 
105
        self.assertEqual('', err)
 
106
 
 
107
        out, err = \
 
108
                self.run_bzr_subprocess('cat a-rev-tree --name-from-revision')
 
109
        self.assertEqual('foo\n', out)
 
110
        self.assertEqual('', err)
 
111
 
 
112
        out, err = self.run_bzr_subprocess('cat a-rev-tree')
 
113
        self.assertEqual('baz\n', out)
 
114
        self.assertEqual('', err)
 
115
 
 
116
        # the actual file-id for e-rev doesn't exist in the old tree
 
117
        out, err = self.run_bzr_subprocess('cat e-rev -rrevid:first')
 
118
        self.assertEqual('qux\n', out)
 
119
        self.assertEqual('', err)
 
120
 
 
121
    def test_remote_cat(self):
 
122
        wt = self.make_branch_and_tree('.')
 
123
        self.build_tree(['README'])
 
124
        wt.add('README')
 
125
        wt.commit('Making sure there is a basis_tree available')
 
126
 
 
127
        url = self.get_readonly_url() + '/README'
 
128
        out, err = self.run_bzr_subprocess(['cat', url])
 
129
        self.assertEqual('contents of README\n', out)
 
130
 
 
131
    def test_cat_filters(self):
 
132
        wt = self.make_branch_and_tree('.')
 
133
        self.build_tree(['README'])
 
134
        wt.add('README')
 
135
        wt.commit('Making sure there is a basis_tree available')
 
136
        url = self.get_readonly_url() + '/README'
 
137
 
 
138
        # Test unfiltered output
 
139
        out, err = self.run_bzr_subprocess(['cat', url])
 
140
        self.assertEqual('contents of README\n', out)
 
141
 
 
142
        # Test --filters option is legal but has no impact if no filters
 
143
        out, err = self.run_bzr_subprocess(['cat', '--filters', url])
 
144
        self.assertEqual('contents of README\n', out)
 
145
 
 
146
    def test_cat_filters_applied(self):
 
147
        # Test filtering applied to output. This is tricky to do in a
 
148
        # subprocess because we really need to patch in a plugin that
 
149
        # registers the filters. Instead, we patch in a custom
 
150
        # filter_stack and use run_bzr() ...
 
151
        from cStringIO import StringIO
 
152
        from bzrlib.commands import run_bzr
 
153
        from bzrlib.tests.test_filters import _stack_2
 
154
        from bzrlib.trace import mutter
 
155
        from bzrlib.tree import Tree
 
156
        wt = self.make_branch_and_tree('.')
 
157
        self.build_tree_contents([
 
158
            ('README', "junk\nline 1 of README\nline 2 of README\n"),
 
159
            ])
 
160
        wt.add('README')
 
161
        wt.commit('Making sure there is a basis_tree available')
 
162
        url = self.get_readonly_url() + '/README'
 
163
        real_content_filter_stack = Tree._content_filter_stack
 
164
        def _custom_content_filter_stack(tree, path=None, file_id=None):
 
165
            return _stack_2
 
166
        Tree._content_filter_stack = _custom_content_filter_stack
 
167
        try:
 
168
            out, err = self.run_bzr(['cat', url, '--filters'])
 
169
            # The filter stack will remove the first line and swapcase the rest
 
170
            self.assertEqual('LINE 1 OF readme\nLINE 2 OF readme\n', out)
 
171
            self.assertEqual('', err)
 
172
        finally:
 
173
            Tree._content_filter_stack = real_content_filter_stack
 
174
 
 
175
    def test_cat_no_working_tree(self):
 
176
        wt = self.make_branch_and_tree('.')
 
177
        self.build_tree(['README'])
 
178
        wt.add('README')
 
179
        wt.commit('Making sure there is a basis_tree available')
 
180
        wt.branch.bzrdir.destroy_workingtree()
 
181
 
 
182
        url = self.get_readonly_url() + '/README'
 
183
        out, err = self.run_bzr_subprocess(['cat', url])
 
184
        self.assertEqual('contents of README\n', out)
 
185
 
 
186
    def test_cat_nonexistent_branch(self):
 
187
        self.vfs_transport_factory = tests.MemoryServer
 
188
        self.run_bzr_error(['^bzr: ERROR: Not a branch'],
 
189
                           ['cat', self.get_url()])