/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.40.11 by Parth Malwankar
added basic test
1
# Copyright (C) 2010 Canonical Ltd
2
# Copyright (C) 2010 Parth Malwankar <parth.malwankar@gmail.com>
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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
18
import os
19
import re
20
21
from bzrlib import tests
22
23
class TestGrep(tests.TestCaseWithTransport):
0.40.25 by Parth Malwankar
added test case for multilevel dir.
24
    def _str_contains(self, base, pattern, flags=re.MULTILINE|re.DOTALL):
0.40.26 by Parth Malwankar
test passing for multiple matches
25
        res = re.findall(pattern, base, flags)
26
        return res != []
0.40.11 by Parth Malwankar
added basic test
27
0.40.26 by Parth Malwankar
test passing for multiple matches
28
    def _mk_file(self, path, line_prefix, total_lines, versioned):
0.40.13 by Parth Malwankar
added tests for -R and -i
29
        text=''
30
        for i in range(total_lines):
31
            text += line_prefix + str(i+1) + "\n"
32
0.40.12 by Parth Malwankar
added test for versioned file
33
        open(path, 'w').write(text)
34
        if versioned:
35
            self.run_bzr(['add', path])
0.40.25 by Parth Malwankar
added test case for multilevel dir.
36
            self.run_bzr(['ci', '-m', '"' + path + '"'])
0.40.12 by Parth Malwankar
added test for versioned file
37
0.40.34 by Parth Malwankar
added tests for single revision history search
38
    def _update_file(self, path, text):
39
        """append text to file 'path' and check it in"""
40
        open(path, 'a').write(text)
41
        self.run_bzr(['ci', '-m', '"' + path + '"'])
42
0.40.37 by Parth Malwankar
grep now accepts rev range
43
    def _mk_unknown_file(self, path, line_prefix='line', total_lines=10):
0.40.26 by Parth Malwankar
test passing for multiple matches
44
        self._mk_file(path, line_prefix, total_lines, versioned=False)
0.40.13 by Parth Malwankar
added tests for -R and -i
45
46
    def _mk_versioned_file(self, path, line_prefix='line', total_lines=10):
0.40.26 by Parth Malwankar
test passing for multiple matches
47
        self._mk_file(path, line_prefix, total_lines, versioned=True)
0.40.13 by Parth Malwankar
added tests for -R and -i
48
49
    def _mk_dir(self, path, versioned):
50
        os.mkdir(path)
51
        if versioned:
52
            self.run_bzr(['add', path])
0.40.26 by Parth Malwankar
test passing for multiple matches
53
            self.run_bzr(['ci', '-m', '"' + path + '"'])
0.40.13 by Parth Malwankar
added tests for -R and -i
54
0.40.37 by Parth Malwankar
grep now accepts rev range
55
    def _mk_unknown_dir(self, path):
0.40.26 by Parth Malwankar
test passing for multiple matches
56
        self._mk_dir(path, versioned=False)
0.40.13 by Parth Malwankar
added tests for -R and -i
57
58
    def _mk_versioned_dir(self, path):
59
        self._mk_dir(path, versioned=True)
60
0.40.37 by Parth Malwankar
grep now accepts rev range
61
    def test_basic_unknown_file(self):
0.40.16 by Parth Malwankar
tree.get_file_lines is now used to get lines of text
62
        """search for pattern in specfic file. should issue warning."""
0.40.11 by Parth Malwankar
added basic test
63
        wd = 'foobar0'
64
        self.make_branch_and_tree(wd)
65
        os.chdir(wd)
0.40.37 by Parth Malwankar
grep now accepts rev range
66
        self._mk_versioned_file('filex.txt') # force rev to revno:1 and not revno:0
67
        self._mk_unknown_file('file0.txt')
0.40.11 by Parth Malwankar
added basic test
68
        out, err = self.run_bzr(['grep', 'line1', 'file0.txt'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
69
        self.assertFalse(self._str_contains(out, "file0.txt:line1"))
70
        self.assertTrue(self._str_contains(err, "warning: skipped.*file0.txt.*\."))
0.40.11 by Parth Malwankar
added basic test
71
0.40.45 by Parth Malwankar
fixed case where only revno:0 is present. added test.
72
    def test_revno0(self):
73
        """search for pattern in when only revno0 is present"""
74
        wd = 'foobar0'
75
        self.make_branch_and_tree(wd)   # only revno 0 in branch
76
        os.chdir(wd)
77
        out, err = self.run_bzr(['grep', 'line1'], retcode=3)
78
        self.assertTrue(self._str_contains(err, "ERROR: No revisions found"))
79
0.40.13 by Parth Malwankar
added tests for -R and -i
80
    def test_basic_versioned_file(self):
0.40.12 by Parth Malwankar
added test for versioned file
81
        """search for pattern in specfic file"""
82
        wd = 'foobar0'
83
        self.make_branch_and_tree(wd)
84
        os.chdir(wd)
0.40.13 by Parth Malwankar
added tests for -R and -i
85
        self._mk_versioned_file('file0.txt')
0.40.12 by Parth Malwankar
added test for versioned file
86
        out, err = self.run_bzr(['grep', 'line1', 'file0.txt'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
87
        self.assertTrue(self._str_contains(out, "file0.txt:line1"))
88
        self.assertFalse(self._str_contains(err, "warning: skipped.*file0.txt.*\."))
0.40.12 by Parth Malwankar
added test for versioned file
89
0.40.26 by Parth Malwankar
test passing for multiple matches
90
    def test_multiple_files(self):
91
        """search for pattern in multiple files"""
0.40.25 by Parth Malwankar
added test case for multilevel dir.
92
        wd = 'foobar0'
93
        self.make_branch_and_tree(wd)
94
        os.chdir(wd)
0.40.26 by Parth Malwankar
test passing for multiple matches
95
        self._mk_versioned_file('file0.txt', total_lines=2)
96
        self._mk_versioned_file('file1.txt', total_lines=2)
97
        self._mk_versioned_file('file2.txt', total_lines=2)
98
        out, err = self.run_bzr(['grep', 'line[1-2]'])
99
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
100
        self.assertTrue(self._str_contains(out, "file0.txt:line1"))
101
        self.assertTrue(self._str_contains(out, "file0.txt:line2"))
102
        self.assertTrue(self._str_contains(out, "file1.txt:line1"))
103
        self.assertTrue(self._str_contains(out, "file1.txt:line2"))
104
        self.assertTrue(self._str_contains(out, "file2.txt:line1"))
105
        self.assertTrue(self._str_contains(out, "file2.txt:line2"))
0.40.25 by Parth Malwankar
added test case for multilevel dir.
106
0.40.27 by Parth Malwankar
added test for null option
107
    def test_null_option(self):
108
        """--null option should use NUL instead of newline"""
109
        wd = 'foobar0'
110
        self.make_branch_and_tree(wd)
111
        os.chdir(wd)
112
        self._mk_versioned_file('file0.txt', total_lines=3)
113
114
        out, err = self.run_bzr(['grep', '--null', 'line[1-3]'])
115
        self.assertTrue(out == "file0.txt:line1\0file0.txt:line2\0file0.txt:line3\0")
116
117
        out, err = self.run_bzr(['grep', '-Z', 'line[1-3]'])
118
        self.assertTrue(out == "file0.txt:line1\0file0.txt:line2\0file0.txt:line3\0")
119
0.40.13 by Parth Malwankar
added tests for -R and -i
120
    def test_versioned_file_in_dir_no_recurse(self):
121
        """should not recurse without -R"""
122
        wd = 'foobar0'
123
        self.make_branch_and_tree(wd)
124
        os.chdir(wd)
125
        self._mk_versioned_dir('dir0')
126
        self._mk_versioned_file('dir0/file0.txt')
127
        out, err = self.run_bzr(['grep', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
128
        self.assertFalse(self._str_contains(out, "file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
129
130
    def test_versioned_file_in_dir_recurse(self):
131
        """should find pattern in hierarchy with -R"""
132
        wd = 'foobar0'
133
        self.make_branch_and_tree(wd)
134
        os.chdir(wd)
135
        self._mk_versioned_dir('dir0')
136
        self._mk_versioned_file('dir0/file0.txt')
137
        out, err = self.run_bzr(['grep', '-R', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
138
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt:line1"))
0.40.24 by Parth Malwankar
added support for --line-number.
139
        out, err = self.run_bzr(['grep', '--recursive', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
140
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt:line1"))
0.40.23 by Parth Malwankar
added test case for search while inside dir.
141
142
    def test_versioned_file_within_dir(self):
143
        """search for pattern while in nested dir"""
144
        wd = 'foobar0'
145
        self.make_branch_and_tree(wd)
146
        os.chdir(wd)
147
        self._mk_versioned_dir('dir0')
148
        self._mk_versioned_file('dir0/file0.txt')
149
        os.chdir('dir0')
150
        out, err = self.run_bzr(['grep', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
151
        self.assertTrue(self._str_contains(out, "^file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
152
0.40.41 by Parth Malwankar
added test for dir arg provided by user
153
    def test_versioned_files_from_outside_dir(self):
154
        """grep for pattern with dirs passed as argument"""
155
        wd = 'foobar0'
156
        self.make_branch_and_tree(wd)
157
        os.chdir(wd)
158
159
        self._mk_versioned_dir('dir0')
160
        self._mk_versioned_file('dir0/file0.txt')
161
162
        self._mk_versioned_dir('dir1')
163
        self._mk_versioned_file('dir1/file1.txt')
164
165
        out, err = self.run_bzr(['grep', 'line1', 'dir0', 'dir1'])
0.40.44 by Parth Malwankar
improved display of path when dir is given as argument
166
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt:line1"))
167
        self.assertTrue(self._str_contains(out, "^dir1/file1.txt:line1"))
168
0.40.45 by Parth Malwankar
fixed case where only revno:0 is present. added test.
169
    def test_versioned_files_from_outside_dir(self):
170
        """grep for pattern with dirs passed as argument"""
171
        wd = 'foobar0'
172
        self.make_branch_and_tree(wd)
173
        os.chdir(wd)
174
175
        self._mk_versioned_dir('dir0')
176
        self._mk_versioned_file('dir0/file0.txt')
177
178
        self._mk_versioned_dir('dir1')
179
        self._mk_versioned_file('dir1/file1.txt')
180
181
        out, err = self.run_bzr(['grep', 'line1', 'dir0', 'dir1'])
182
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt:line1"))
183
        self.assertTrue(self._str_contains(out, "^dir1/file1.txt:line1"))
0.40.44 by Parth Malwankar
improved display of path when dir is given as argument
184
185
    def test_versioned_files_from_outside_two_dirs(self):
186
        """grep for pattern with two levels of nested dir"""
187
        wd = 'foobar0'
188
        self.make_branch_and_tree(wd)
189
        os.chdir(wd)
190
191
        self._mk_versioned_dir('dir0')
192
        self._mk_versioned_file('dir0/file0.txt')
193
194
        self._mk_versioned_dir('dir1')
195
        self._mk_versioned_file('dir1/file1.txt')
196
197
        self._mk_versioned_dir('dir0/dir00')
198
        self._mk_versioned_file('dir0/dir00/file0.txt')
199
200
        out, err = self.run_bzr(['grep', 'line1', 'dir0/dir00'])
201
        self.assertTrue(self._str_contains(out, "^dir0/dir00/file0.txt:line1"))
202
203
        out, err = self.run_bzr(['grep', '-R', 'line1'])
204
        self.assertTrue(self._str_contains(out, "^dir0/dir00/file0.txt:line1"))
0.40.41 by Parth Malwankar
added test for dir arg provided by user
205
0.40.25 by Parth Malwankar
added test case for multilevel dir.
206
    def test_versioned_file_within_dir_two_levels(self):
207
        """search for pattern while in nested dir (two levels)"""
208
        wd = 'foobar0'
209
        self.make_branch_and_tree(wd)
210
        os.chdir(wd)
211
        self._mk_versioned_dir('dir0')
212
        self._mk_versioned_dir('dir0/dir1')
213
        self._mk_versioned_file('dir0/dir1/file0.txt')
214
        os.chdir('dir0')
215
        out, err = self.run_bzr(['grep', '-R', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
216
        self.assertTrue(self._str_contains(out, "^dir1/file0.txt:line1"))
0.40.25 by Parth Malwankar
added test case for multilevel dir.
217
        out, err = self.run_bzr(['grep', '--from-root', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
218
        self.assertTrue(self._str_contains(out, "^dir0/dir1/file0.txt:line1"))
0.40.25 by Parth Malwankar
added test case for multilevel dir.
219
        out, err = self.run_bzr(['grep', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
220
        self.assertFalse(self._str_contains(out, "file0.txt"))
0.40.25 by Parth Malwankar
added test case for multilevel dir.
221
0.40.13 by Parth Malwankar
added tests for -R and -i
222
    def test_ignore_case_no_match(self):
223
        """match fails without --ignore-case"""
224
        wd = 'foobar0'
225
        self.make_branch_and_tree(wd)
226
        os.chdir(wd)
227
        self._mk_versioned_file('file0.txt')
228
        out, err = self.run_bzr(['grep', 'LinE1', 'file0.txt'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
229
        self.assertFalse(self._str_contains(out, "file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
230
231
    def test_ignore_case_match(self):
232
        """match fails without --ignore-case"""
233
        wd = 'foobar0'
234
        self.make_branch_and_tree(wd)
235
        os.chdir(wd)
236
        self._mk_versioned_file('file0.txt')
237
        out, err = self.run_bzr(['grep', '-i', 'LinE1', 'file0.txt'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
238
        self.assertTrue(self._str_contains(out, "file0.txt:line1"))
0.40.24 by Parth Malwankar
added support for --line-number.
239
        out, err = self.run_bzr(['grep', '--ignore-case', 'LinE1', 'file0.txt'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
240
        self.assertTrue(self._str_contains(out, "^file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
241
0.40.15 by Parth Malwankar
some fixes and test updates
242
    def test_from_root_fail(self):
0.40.14 by Parth Malwankar
added test for --from-root
243
        """match should fail without --from-root"""
244
        wd = 'foobar0'
245
        self.make_branch_and_tree(wd)
246
        os.chdir(wd)
247
        self._mk_versioned_file('file0.txt')
248
        self._mk_versioned_dir('dir0')
249
        os.chdir('dir0')
250
        out, err = self.run_bzr(['grep', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
251
        self.assertFalse(self._str_contains(out, ".*file0.txt:line1"))
0.40.14 by Parth Malwankar
added test for --from-root
252
0.40.15 by Parth Malwankar
some fixes and test updates
253
    def test_from_root_pass(self):
0.40.14 by Parth Malwankar
added test for --from-root
254
        """match pass with --from-root"""
255
        wd = 'foobar0'
256
        self.make_branch_and_tree(wd)
257
        os.chdir(wd)
258
        self._mk_versioned_file('file0.txt')
259
        self._mk_versioned_dir('dir0')
260
        os.chdir('dir0')
261
        out, err = self.run_bzr(['grep', '--from-root', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
262
        self.assertTrue(self._str_contains(out, ".*file0.txt:line1"))
0.40.24 by Parth Malwankar
added support for --line-number.
263
264
    def test_with_line_number(self):
265
        """search for pattern with --line-number"""
266
        wd = 'foobar0'
267
        self.make_branch_and_tree(wd)
268
        os.chdir(wd)
269
        self._mk_versioned_file('file0.txt')
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
270
0.40.24 by Parth Malwankar
added support for --line-number.
271
        out, err = self.run_bzr(['grep', '--line-number', 'line3', 'file0.txt'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
272
        self.assertTrue(self._str_contains(out, "file0.txt:3:line3"))
273
0.40.24 by Parth Malwankar
added support for --line-number.
274
        out, err = self.run_bzr(['grep', '-n', 'line1', 'file0.txt'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
275
        self.assertTrue(self._str_contains(out, "file0.txt:1:line1"))
0.40.14 by Parth Malwankar
added test for --from-root
276
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
277
    def test_revno_basic_history_grep_file(self):
0.40.34 by Parth Malwankar
added tests for single revision history search
278
        """search for pattern in specific revision number in a file"""
279
        wd = 'foobar0'
280
        fname = 'file0.txt'
281
        self.make_branch_and_tree(wd)
282
        os.chdir(wd)
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
283
        self._mk_versioned_file(fname, total_lines=0)
0.40.34 by Parth Malwankar
added tests for single revision history search
284
        self._update_file(fname, text="v2 text\n")
285
        self._update_file(fname, text="v3 text\n")
286
        self._update_file(fname, text="v4 text\n")
287
288
        # rev 2 should not have text 'v3'
289
        out, err = self.run_bzr(['grep', '-r', '2', 'v3', fname])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
290
        self.assertFalse(self._str_contains(out, "file0.txt"))
0.40.34 by Parth Malwankar
added tests for single revision history search
291
292
        # rev 3 should not have text 'v3'
293
        out, err = self.run_bzr(['grep', '-r', '3', 'v3', fname])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
294
        self.assertTrue(self._str_contains(out, "file0.txt~3:v3.*"))
0.40.34 by Parth Malwankar
added tests for single revision history search
295
296
        # rev 3 should not have text 'v3' with line number
297
        out, err = self.run_bzr(['grep', '-r', '3', '-n', 'v3', fname])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
298
        self.assertTrue(self._str_contains(out, "file0.txt~3:2:v3.*"))
0.40.34 by Parth Malwankar
added tests for single revision history search
299
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
300
    def test_revno_basic_history_grep_full(self):
0.40.34 by Parth Malwankar
added tests for single revision history search
301
        """search for pattern in specific revision number in a file"""
302
        wd = 'foobar0'
303
        fname = 'file0.txt'
304
        self.make_branch_and_tree(wd)
305
        os.chdir(wd)
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
306
        self._mk_versioned_file(fname, total_lines=0) # rev1
307
        self._mk_versioned_file('file1.txt')          # rev2
308
        self._update_file(fname, text="v3 text\n")    # rev3
309
        self._update_file(fname, text="v4 text\n")    # rev4
310
        self._update_file(fname, text="v5 text\n")    # rev5
0.40.34 by Parth Malwankar
added tests for single revision history search
311
312
        # rev 2 should not have text 'v3'
313
        out, err = self.run_bzr(['grep', '-r', '2', 'v3'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
314
        self.assertFalse(self._str_contains(out, "file0.txt"))
0.40.34 by Parth Malwankar
added tests for single revision history search
315
316
        # rev 3 should not have text 'v3'
317
        out, err = self.run_bzr(['grep', '-r', '3', 'v3'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
318
        self.assertTrue(self._str_contains(out, "file0.txt~3:v3"))
0.40.34 by Parth Malwankar
added tests for single revision history search
319
320
        # rev 3 should not have text 'v3' with line number
321
        out, err = self.run_bzr(['grep', '-r', '3', '-n', 'v3'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
322
        self.assertTrue(self._str_contains(out, "file0.txt~3:1:v3"))
323
324
    def test_revno_versioned_file_in_dir(self):
325
        """we create a file 'foobar0/dir0/file0.txt' and grep specific version of content"""
326
        wd = 'foobar0'
327
        self.make_branch_and_tree(wd)
328
        os.chdir(wd)
329
        self._mk_versioned_dir('dir0')                      # rev1
330
        self._mk_versioned_file('dir0/file0.txt')           # rev2
331
        self._update_file('dir0/file0.txt', "v3 text\n")    # rev3
332
        self._update_file('dir0/file0.txt', "v4 text\n")    # rev4
333
        self._update_file('dir0/file0.txt', "v5 text\n")    # rev5
334
335
        # v4 should not be present in revno 3
336
        out, err = self.run_bzr(['grep', '-r', 'last:3', '-R', 'v4'])
337
        self.assertFalse(self._str_contains(out, "^dir0/file0.txt"))
338
339
        # v4 should be present in revno 4
340
        out, err = self.run_bzr(['grep', '-r', 'last:2', '-R', 'v4'])
341
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~4:v4"))
342
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
343
    def test_revno_range_basic_history_grep(self):
344
        """search for pattern in revision range for file"""
345
        wd = 'foobar0'
346
        fname = 'file0.txt'
347
        self.make_branch_and_tree(wd)
348
        os.chdir(wd)
349
        self._mk_versioned_file(fname, total_lines=0) # rev1
350
        self._mk_versioned_file('file1.txt')          # rev2
351
        self._update_file(fname, text="v3 text\n")    # rev3
352
        self._update_file(fname, text="v4 text\n")    # rev4
353
        self._update_file(fname, text="v5 text\n")    # rev5
354
        self._update_file(fname, text="v6 text\n")    # rev6
355
356
        out, err = self.run_bzr(['grep', '-r', '1..', 'v3'])
357
        self.assertTrue(self._str_contains(out, "file0.txt~3:v3"))
358
        self.assertTrue(self._str_contains(out, "file0.txt~4:v3"))
359
        self.assertTrue(self._str_contains(out, "file0.txt~5:v3"))
360
361
        out, err = self.run_bzr(['grep', '-r', '1..5', 'v3'])
362
        self.assertTrue(self._str_contains(out, "file0.txt~3:v3"))
363
        self.assertTrue(self._str_contains(out, "file0.txt~4:v3"))
364
        self.assertTrue(self._str_contains(out, "file0.txt~5:v3"))
365
        self.assertFalse(self._str_contains(out, "file0.txt~6:v3"))
366
367
    def test_revno_range_versioned_file_in_dir(self):
368
        """we create a file 'foobar0/dir0/file0.txt' and grep rev-range for pattern"""
369
        wd = 'foobar0'
370
        self.make_branch_and_tree(wd)
371
        os.chdir(wd)
372
        self._mk_versioned_dir('dir0')                      # rev1
373
        self._mk_versioned_file('dir0/file0.txt')           # rev2
374
        self._update_file('dir0/file0.txt', "v3 text\n")    # rev3
375
        self._update_file('dir0/file0.txt', "v4 text\n")    # rev4
376
        self._update_file('dir0/file0.txt', "v5 text\n")    # rev5
377
        self._update_file('dir0/file0.txt', "v6 text\n")    # rev6
378
379
        out, err = self.run_bzr(['grep', '-R', '-r', '2..5', 'v3'])
380
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~3:v3"))
381
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~4:v3"))
382
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~5:v3"))
383
        self.assertFalse(self._str_contains(out, "^dir0/file0.txt~6:v3"))
384
385
    def test_revno_range_versioned_file_from_outside_dir(self):
386
        """grep rev-range for pattern from outside dir"""
387
        wd = 'foobar0'
388
        self.make_branch_and_tree(wd)
389
        os.chdir(wd)
390
        self._mk_versioned_dir('dir0')                      # rev1
391
        self._mk_versioned_file('dir0/file0.txt')           # rev2
392
        self._update_file('dir0/file0.txt', "v3 text\n")    # rev3
393
        self._update_file('dir0/file0.txt', "v4 text\n")    # rev4
394
        self._update_file('dir0/file0.txt', "v5 text\n")    # rev5
395
        self._update_file('dir0/file0.txt', "v6 text\n")    # rev6
396
397
        out, err = self.run_bzr(['grep', '-r', '2..5', 'v3', 'dir0'])
0.40.44 by Parth Malwankar
improved display of path when dir is given as argument
398
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~3:v3"))
399
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~4:v3"))
400
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~5:v3"))
401
        self.assertFalse(self._str_contains(out, "^dir0/file0.txt~6:v3"))
0.40.13 by Parth Malwankar
added tests for -R and -i
402