/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
#
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
17
import os
18
import re
0.40.71 by Parth Malwankar
fixed test_ver_null_option to pass on windows.
19
import unicodedata as ud
0.40.11 by Parth Malwankar
added basic test
20
0.40.46 by Parth Malwankar
--levels=0 now implicitly prints revnos. added test for --levels=0.
21
from bzrlib import tests, osutils
0.40.11 by Parth Malwankar
added basic test
22
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
23
# NOTE: As bzr-grep optimizes PATTERN search to -F/--fixed-string
24
# for patterns that are not alphanumeric+whitespace, we test grep
25
# specfically with patterns that have special characters so that
26
# regex path is tested. alphanumeric patterns test the -F path.
27
0.40.11 by Parth Malwankar
added basic test
28
class TestGrep(tests.TestCaseWithTransport):
0.40.25 by Parth Malwankar
added test case for multilevel dir.
29
    def _str_contains(self, base, pattern, flags=re.MULTILINE|re.DOTALL):
0.40.26 by Parth Malwankar
test passing for multiple matches
30
        res = re.findall(pattern, base, flags)
31
        return res != []
0.40.11 by Parth Malwankar
added basic test
32
0.40.26 by Parth Malwankar
test passing for multiple matches
33
    def _mk_file(self, path, line_prefix, total_lines, versioned):
0.40.13 by Parth Malwankar
added tests for -R and -i
34
        text=''
35
        for i in range(total_lines):
36
            text += line_prefix + str(i+1) + "\n"
37
0.40.12 by Parth Malwankar
added test for versioned file
38
        open(path, 'w').write(text)
39
        if versioned:
40
            self.run_bzr(['add', path])
0.40.25 by Parth Malwankar
added test case for multilevel dir.
41
            self.run_bzr(['ci', '-m', '"' + path + '"'])
0.40.12 by Parth Malwankar
added test for versioned file
42
0.41.14 by Parth Malwankar
updated help and added test.
43
    def _update_file(self, path, text, checkin=True):
0.40.34 by Parth Malwankar
added tests for single revision history search
44
        """append text to file 'path' and check it in"""
45
        open(path, 'a').write(text)
0.41.14 by Parth Malwankar
updated help and added test.
46
        if checkin:
0.41.15 by Parth Malwankar
bzr-grep now searches working copy by default.
47
            self.run_bzr(['ci', path, '-m', '"' + path + '"'])
0.40.34 by Parth Malwankar
added tests for single revision history search
48
0.40.37 by Parth Malwankar
grep now accepts rev range
49
    def _mk_unknown_file(self, path, line_prefix='line', total_lines=10):
0.40.26 by Parth Malwankar
test passing for multiple matches
50
        self._mk_file(path, line_prefix, total_lines, versioned=False)
0.40.13 by Parth Malwankar
added tests for -R and -i
51
52
    def _mk_versioned_file(self, path, line_prefix='line', total_lines=10):
0.40.26 by Parth Malwankar
test passing for multiple matches
53
        self._mk_file(path, line_prefix, total_lines, versioned=True)
0.40.13 by Parth Malwankar
added tests for -R and -i
54
55
    def _mk_dir(self, path, versioned):
56
        os.mkdir(path)
57
        if versioned:
58
            self.run_bzr(['add', path])
0.40.26 by Parth Malwankar
test passing for multiple matches
59
            self.run_bzr(['ci', '-m', '"' + path + '"'])
0.40.13 by Parth Malwankar
added tests for -R and -i
60
0.40.37 by Parth Malwankar
grep now accepts rev range
61
    def _mk_unknown_dir(self, path):
0.40.26 by Parth Malwankar
test passing for multiple matches
62
        self._mk_dir(path, versioned=False)
0.40.13 by Parth Malwankar
added tests for -R and -i
63
64
    def _mk_versioned_dir(self, path):
65
        self._mk_dir(path, versioned=True)
66
0.40.37 by Parth Malwankar
grep now accepts rev range
67
    def test_basic_unknown_file(self):
0.41.13 by Parth Malwankar
working tree grep is now working
68
        """Search for pattern in specfic file.
69
70
        If specified file is unknown, grep it anyway."""
0.40.11 by Parth Malwankar
added basic test
71
        wd = 'foobar0'
72
        self.make_branch_and_tree(wd)
73
        os.chdir(wd)
0.40.37 by Parth Malwankar
grep now accepts rev range
74
        self._mk_unknown_file('file0.txt')
0.41.18 by Parth Malwankar
updated test to ensure that unknown files are skipped by default.
75
0.40.11 by Parth Malwankar
added basic test
76
        out, err = self.run_bzr(['grep', 'line1', 'file0.txt'])
0.41.13 by Parth Malwankar
working tree grep is now working
77
        self.assertTrue(self._str_contains(out, "file0.txt:line1"))
0.40.45 by Parth Malwankar
fixed case where only revno:0 is present. added test.
78
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
79
        out, err = self.run_bzr(['grep', 'line\d', 'file0.txt'])
80
        self.assertTrue(self._str_contains(out, "file0.txt:line1"))
81
0.41.18 by Parth Malwankar
updated test to ensure that unknown files are skipped by default.
82
        out, err = self.run_bzr(['grep', 'line1'])
83
        self.assertFalse(self._str_contains(out, "file0.txt"))
84
0.41.23 by Parth Malwankar
added tests for --include/exclude
85
    def test_ver_basic_file(self):
0.41.17 by Parth Malwankar
added tests.
86
        """(versioned) Search for pattern in specfic file.
87
        """
0.41.14 by Parth Malwankar
updated help and added test.
88
        wd = 'foobar0'
89
        self.make_branch_and_tree(wd)
90
        os.chdir(wd)
91
        self._mk_versioned_file('file0.txt')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
92
0.41.14 by Parth Malwankar
updated help and added test.
93
        out, err = self.run_bzr(['grep', '-r', '1', 'line1', 'file0.txt'])
94
        self.assertTrue(self._str_contains(out, "file0.txt~1:line1"))
95
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
96
        out, err = self.run_bzr(['grep', '-r', '1', 'line[0-9]', 'file0.txt'])
97
        self.assertTrue(self._str_contains(out, "file0.txt~1:line1"))
98
0.41.17 by Parth Malwankar
added tests.
99
    def test_wtree_basic_file(self):
100
        """(wtree) Search for pattern in specfic file.
101
        """
0.40.12 by Parth Malwankar
added test for versioned file
102
        wd = 'foobar0'
103
        self.make_branch_and_tree(wd)
104
        os.chdir(wd)
0.40.13 by Parth Malwankar
added tests for -R and -i
105
        self._mk_versioned_file('file0.txt')
0.41.14 by Parth Malwankar
updated help and added test.
106
        self._update_file('file0.txt', 'ABC\n', checkin=False)
107
108
        out, err = self.run_bzr(['grep', 'ABC', 'file0.txt'])
109
        self.assertTrue(self._str_contains(out, "file0.txt:ABC"))
110
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
111
        out, err = self.run_bzr(['grep', '[A-Z]{3}', 'file0.txt'])
112
        self.assertTrue(self._str_contains(out, "file0.txt:ABC"))
113
0.41.14 by Parth Malwankar
updated help and added test.
114
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'ABC', 'file0.txt'])
115
        self.assertFalse(self._str_contains(out, "file0.txt"))
0.40.12 by Parth Malwankar
added test for versioned file
116
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
117
        out, err = self.run_bzr(['grep', '-r', 'last:1', '[A-Z]{3}', 'file0.txt'])
118
        self.assertFalse(self._str_contains(out, "file0.txt"))
119
0.41.23 by Parth Malwankar
added tests for --include/exclude
120
    def test_ver_basic_include(self):
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
121
        """(versioned) Ensure that -I flag is respected.
0.41.22 by Parth Malwankar
added basic --exclude/include tests
122
        """
123
        wd = 'foobar0'
124
        self.make_branch_and_tree(wd)
125
        os.chdir(wd)
126
        self._mk_versioned_file('file0.aa')
127
        self._mk_versioned_file('file0.bb')
128
        self._mk_versioned_file('file0.cc')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
129
0.41.22 by Parth Malwankar
added basic --exclude/include tests
130
        out, err = self.run_bzr(['grep', '-r', 'last:1',
131
            '--include', '*.aa', '--include', '*.bb', 'line1'])
132
        self.assertTrue(self._str_contains(out, "file0.aa~.:line1"))
133
        self.assertTrue(self._str_contains(out, "file0.bb~.:line1"))
134
        self.assertFalse(self._str_contains(out, "file0.cc"))
135
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
136
        out, err = self.run_bzr(['grep', '-r', 'last:1',
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
137
            '--include', '*.aa', '--include', '*.bb', 'line\d'])
138
        self.assertTrue(self._str_contains(out, "file0.aa~.:line1"))
139
        self.assertTrue(self._str_contains(out, "file0.bb~.:line1"))
140
        self.assertFalse(self._str_contains(out, "file0.cc"))
141
142
        out, err = self.run_bzr(['grep', '-r', 'last:1',
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
143
            '-I', '*.aa', '-I', '*.bb', 'line1'])
144
        self.assertTrue(self._str_contains(out, "file0.aa~.:line1"))
145
        self.assertTrue(self._str_contains(out, "file0.bb~.:line1"))
146
        self.assertFalse(self._str_contains(out, "file0.cc"))
147
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
148
        out, err = self.run_bzr(['grep', '-r', 'last:1',
149
            '-I', '*.aa', '-I', '*.bb', 'line\d'])
150
        self.assertTrue(self._str_contains(out, "file0.aa~.:line1"))
151
        self.assertTrue(self._str_contains(out, "file0.bb~.:line1"))
152
        self.assertFalse(self._str_contains(out, "file0.cc"))
153
0.41.22 by Parth Malwankar
added basic --exclude/include tests
154
    def test_wtree_basic_include(self):
155
        """(wtree) Ensure that --include flag is respected.
156
        """
157
        wd = 'foobar0'
158
        self.make_branch_and_tree(wd)
159
        os.chdir(wd)
160
        self._mk_versioned_file('file0.aa')
161
        self._mk_versioned_file('file0.bb')
162
        self._mk_versioned_file('file0.cc')
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
163
0.41.22 by Parth Malwankar
added basic --exclude/include tests
164
        out, err = self.run_bzr(['grep', '--include', '*.aa',
165
            '--include', '*.bb', 'line1'])
166
        self.assertTrue(self._str_contains(out, "file0.aa:line1"))
167
        self.assertTrue(self._str_contains(out, "file0.bb:line1"))
168
        self.assertFalse(self._str_contains(out, "file0.cc"))
169
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
170
        out, err = self.run_bzr(['grep', '--include', '*.aa',
171
            '--include', '*.bb', 'line\d'])
172
        self.assertTrue(self._str_contains(out, "file0.aa:line1"))
173
        self.assertTrue(self._str_contains(out, "file0.bb:line1"))
174
        self.assertFalse(self._str_contains(out, "file0.cc"))
175
0.41.23 by Parth Malwankar
added tests for --include/exclude
176
    def test_ver_basic_exclude(self):
0.41.22 by Parth Malwankar
added basic --exclude/include tests
177
        """(versioned) Ensure that --exclude flag is respected.
178
        """
179
        wd = 'foobar0'
180
        self.make_branch_and_tree(wd)
181
        os.chdir(wd)
182
        self._mk_versioned_file('file0.aa')
183
        self._mk_versioned_file('file0.bb')
184
        self._mk_versioned_file('file0.cc')
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
185
0.41.22 by Parth Malwankar
added basic --exclude/include tests
186
        out, err = self.run_bzr(['grep', '-r', 'last:1',
187
            '--exclude', '*.cc', 'line1'])
188
        self.assertTrue(self._str_contains(out, "file0.aa~.:line1"))
189
        self.assertTrue(self._str_contains(out, "file0.bb~.:line1"))
190
        self.assertFalse(self._str_contains(out, "file0.cc"))
191
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
192
        out, err = self.run_bzr(['grep', '-r', 'last:1',
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
193
            '--exclude', '*.cc', 'line\d'])
194
        self.assertTrue(self._str_contains(out, "file0.aa~.:line1"))
195
        self.assertTrue(self._str_contains(out, "file0.bb~.:line1"))
196
        self.assertFalse(self._str_contains(out, "file0.cc"))
197
198
        out, err = self.run_bzr(['grep', '-r', 'last:1',
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
199
            '-X', '*.cc', 'line1'])
200
        self.assertTrue(self._str_contains(out, "file0.aa~.:line1"))
201
        self.assertTrue(self._str_contains(out, "file0.bb~.:line1"))
202
        self.assertFalse(self._str_contains(out, "file0.cc"))
203
0.41.22 by Parth Malwankar
added basic --exclude/include tests
204
    def test_wtree_basic_exclude(self):
205
        """(wtree) Ensure that --exclude flag is respected.
206
        """
207
        wd = 'foobar0'
208
        self.make_branch_and_tree(wd)
209
        os.chdir(wd)
210
        self._mk_versioned_file('file0.aa')
211
        self._mk_versioned_file('file0.bb')
212
        self._mk_versioned_file('file0.cc')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
213
0.41.22 by Parth Malwankar
added basic --exclude/include tests
214
        out, err = self.run_bzr(['grep', '--exclude', '*.cc', 'line1'])
215
        self.assertTrue(self._str_contains(out, "file0.aa:line1"))
216
        self.assertTrue(self._str_contains(out, "file0.bb:line1"))
217
        self.assertFalse(self._str_contains(out, "file0.cc"))
218
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
219
        out, err = self.run_bzr(['grep', '--exclude', '*.cc', 'lin.\d'])
220
        self.assertTrue(self._str_contains(out, "file0.aa:line1"))
221
        self.assertTrue(self._str_contains(out, "file0.bb:line1"))
222
        self.assertFalse(self._str_contains(out, "file0.cc"))
223
0.41.23 by Parth Malwankar
added tests for --include/exclude
224
    def test_ver_multiple_files(self):
0.41.17 by Parth Malwankar
added tests.
225
        """(versioned) Search for pattern in multiple files.
226
        """
0.41.15 by Parth Malwankar
bzr-grep now searches working copy by default.
227
        wd = 'foobar0'
228
        self.make_branch_and_tree(wd)
229
        os.chdir(wd)
230
        self._mk_versioned_file('file0.txt', total_lines=2)
231
        self._mk_versioned_file('file1.txt', total_lines=2)
232
        self._mk_versioned_file('file2.txt', total_lines=2)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
233
0.41.15 by Parth Malwankar
bzr-grep now searches working copy by default.
234
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line[1-2]'])
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
235
        self.assertTrue(self._str_contains(out, "file0.txt~.:line1"))
236
        self.assertTrue(self._str_contains(out, "file0.txt~.:line2"))
237
        self.assertTrue(self._str_contains(out, "file1.txt~.:line1"))
238
        self.assertTrue(self._str_contains(out, "file1.txt~.:line2"))
239
        self.assertTrue(self._str_contains(out, "file2.txt~.:line1"))
240
        self.assertTrue(self._str_contains(out, "file2.txt~.:line2"))
0.41.15 by Parth Malwankar
bzr-grep now searches working copy by default.
241
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
242
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line'])
0.41.15 by Parth Malwankar
bzr-grep now searches working copy by default.
243
        self.assertTrue(self._str_contains(out, "file0.txt~.:line1"))
244
        self.assertTrue(self._str_contains(out, "file0.txt~.:line2"))
245
        self.assertTrue(self._str_contains(out, "file1.txt~.:line1"))
246
        self.assertTrue(self._str_contains(out, "file1.txt~.:line2"))
247
        self.assertTrue(self._str_contains(out, "file2.txt~.:line1"))
248
        self.assertTrue(self._str_contains(out, "file2.txt~.:line2"))
249
250
    def test_multiple_wtree_files(self):
0.41.17 by Parth Malwankar
added tests.
251
        """(wtree) Search for pattern in multiple files in working tree.
252
        """
0.41.15 by Parth Malwankar
bzr-grep now searches working copy by default.
253
        wd = 'foobar0'
254
        self.make_branch_and_tree(wd)
255
        os.chdir(wd)
256
        self._mk_versioned_file('file0.txt', total_lines=2)
257
        self._mk_versioned_file('file1.txt', total_lines=2)
258
        self._mk_versioned_file('file2.txt', total_lines=2)
259
        self._update_file('file0.txt', 'HELLO\n', checkin=False)
260
        self._update_file('file1.txt', 'HELLO\n', checkin=True)
261
        self._update_file('file2.txt', 'HELLO\n', checkin=False)
262
263
        out, err = self.run_bzr(['grep', 'HELLO',
264
            'file0.txt', 'file1.txt', 'file2.txt'])
265
266
        self.assertTrue(self._str_contains(out, "file0.txt:HELLO"))
267
        self.assertTrue(self._str_contains(out, "file1.txt:HELLO"))
268
        self.assertTrue(self._str_contains(out, "file2.txt:HELLO"))
269
270
        out, err = self.run_bzr(['grep', 'HELLO', '-r', 'last:1',
271
            'file0.txt', 'file1.txt', 'file2.txt'])
272
273
        self.assertFalse(self._str_contains(out, "file0.txt"))
274
        self.assertTrue(self._str_contains(out, "file1.txt~.:HELLO"))
275
        self.assertFalse(self._str_contains(out, "file2.txt"))
0.40.25 by Parth Malwankar
added test case for multilevel dir.
276
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
277
        out, err = self.run_bzr(['grep', 'HE..O',
278
            'file0.txt', 'file1.txt', 'file2.txt'])
279
280
        self.assertTrue(self._str_contains(out, "file0.txt:HELLO"))
281
        self.assertTrue(self._str_contains(out, "file1.txt:HELLO"))
282
        self.assertTrue(self._str_contains(out, "file2.txt:HELLO"))
283
284
        out, err = self.run_bzr(['grep', 'HE..O', '-r', 'last:1',
285
            'file0.txt', 'file1.txt', 'file2.txt'])
286
287
        self.assertFalse(self._str_contains(out, "file0.txt"))
288
        self.assertTrue(self._str_contains(out, "file1.txt~.:HELLO"))
289
        self.assertFalse(self._str_contains(out, "file2.txt"))
290
0.41.23 by Parth Malwankar
added tests for --include/exclude
291
    def test_ver_null_option(self):
0.41.17 by Parth Malwankar
added tests.
292
        """(versioned) --null option should use NUL instead of newline.
293
        """
294
        wd = 'foobar0'
295
        self.make_branch_and_tree(wd)
296
        os.chdir(wd)
297
        self._mk_versioned_file('file0.txt', total_lines=3)
298
0.40.71 by Parth Malwankar
fixed test_ver_null_option to pass on windows.
299
        nref = ud.normalize(u'NFC', u"file0.txt~1:line1\0file0.txt~1:line2\0file0.txt~1:line3\0")
300
0.41.17 by Parth Malwankar
added tests.
301
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--null', 'line[1-3]'])
0.40.71 by Parth Malwankar
fixed test_ver_null_option to pass on windows.
302
        nout = ud.normalize(u'NFC', out.decode('utf-8', 'ignore'))
303
        self.assertTrue(nout == nref)
0.41.17 by Parth Malwankar
added tests.
304
305
        out, err = self.run_bzr(['grep', '-r', 'last:1', '-Z', 'line[1-3]'])
0.40.71 by Parth Malwankar
fixed test_ver_null_option to pass on windows.
306
        nout = ud.normalize(u'NFC', out.decode('utf-8', 'ignore'))
307
        self.assertTrue(nout == nref)
0.41.17 by Parth Malwankar
added tests.
308
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
309
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--null', 'line'])
310
        nout = ud.normalize(u'NFC', out.decode('utf-8', 'ignore'))
311
        self.assertTrue(nout == nref)
312
0.41.17 by Parth Malwankar
added tests.
313
    def test_wtree_null_option(self):
314
        """(wtree) --null option should use NUL instead of newline.
315
        """
0.40.27 by Parth Malwankar
added test for null option
316
        wd = 'foobar0'
317
        self.make_branch_and_tree(wd)
318
        os.chdir(wd)
319
        self._mk_versioned_file('file0.txt', total_lines=3)
320
321
        out, err = self.run_bzr(['grep', '--null', 'line[1-3]'])
322
        self.assertTrue(out == "file0.txt:line1\0file0.txt:line2\0file0.txt:line3\0")
323
324
        out, err = self.run_bzr(['grep', '-Z', 'line[1-3]'])
325
        self.assertTrue(out == "file0.txt:line1\0file0.txt:line2\0file0.txt:line3\0")
326
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
327
        out, err = self.run_bzr(['grep', '-Z', 'line'])
328
        self.assertTrue(out == "file0.txt:line1\0file0.txt:line2\0file0.txt:line3\0")
329
0.41.6 by Parth Malwankar
renamed --recurse/--no-recurse => --recursive/--no-recursive
330
    def test_versioned_file_in_dir_no_recursive(self):
0.41.17 by Parth Malwankar
added tests.
331
        """(versioned) Should not recurse with --no-recursive"""
332
        wd = 'foobar0'
333
        self.make_branch_and_tree(wd)
334
        os.chdir(wd)
335
        self._mk_versioned_dir('dir0')
336
        self._mk_versioned_file('dir0/file0.txt')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
337
0.41.17 by Parth Malwankar
added tests.
338
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--no-recursive', 'line1'])
339
        self.assertFalse(self._str_contains(out, "file0.txt~.:line1"))
340
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
341
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--no-recursive', 'line\d'])
342
        self.assertFalse(self._str_contains(out, "file0.txt~.:line1"))
343
0.41.17 by Parth Malwankar
added tests.
344
    def test_wtree_file_in_dir_no_recursive(self):
345
        """(wtree) Should not recurse with --no-recursive"""
0.40.13 by Parth Malwankar
added tests for -R and -i
346
        wd = 'foobar0'
347
        self.make_branch_and_tree(wd)
348
        os.chdir(wd)
349
        self._mk_versioned_dir('dir0')
350
        self._mk_versioned_file('dir0/file0.txt')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
351
0.41.6 by Parth Malwankar
renamed --recurse/--no-recurse => --recursive/--no-recursive
352
        out, err = self.run_bzr(['grep', '--no-recursive', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
353
        self.assertFalse(self._str_contains(out, "file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
354
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
355
        out, err = self.run_bzr(['grep', '--no-recursive', 'lin.1'])
356
        self.assertFalse(self._str_contains(out, "file0.txt:line1"))
357
0.40.13 by Parth Malwankar
added tests for -R and -i
358
    def test_versioned_file_in_dir_recurse(self):
0.41.17 by Parth Malwankar
added tests.
359
        """(versioned) Should recurse by default.
360
        """
361
        wd = 'foobar0'
362
        self.make_branch_and_tree(wd)
363
        os.chdir(wd)
364
        self._mk_versioned_dir('dir0')
365
        self._mk_versioned_file('dir0/file0.txt')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
366
367
        out, err = self.run_bzr(['grep', '-r', '-1', '.i.e1'])
368
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~.:line1"))
369
0.41.17 by Parth Malwankar
added tests.
370
        out, err = self.run_bzr(['grep', '-r', '-1', 'line1'])
371
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~.:line1"))
372
373
    def test_wtree_file_in_dir_recurse(self):
374
        """(wtree) Should recurse by default.
375
        """
0.40.13 by Parth Malwankar
added tests for -R and -i
376
        wd = 'foobar0'
377
        self.make_branch_and_tree(wd)
378
        os.chdir(wd)
379
        self._mk_versioned_dir('dir0')
380
        self._mk_versioned_file('dir0/file0.txt')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
381
0.41.4 by Parth Malwankar
--recurse is default.
382
        out, err = self.run_bzr(['grep', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
383
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt:line1"))
0.40.23 by Parth Malwankar
added test case for search while inside dir.
384
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
385
        out, err = self.run_bzr(['grep', 'lin.1'])
386
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt:line1"))
387
0.40.23 by Parth Malwankar
added test case for search while inside dir.
388
    def test_versioned_file_within_dir(self):
0.41.17 by Parth Malwankar
added tests.
389
        """(versioned) Search for pattern while in nested dir.
390
        """
391
        wd = 'foobar0'
392
        self.make_branch_and_tree(wd)
393
        os.chdir(wd)
394
        self._mk_versioned_dir('dir0')
395
        self._mk_versioned_file('dir0/file0.txt')
396
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
397
0.41.17 by Parth Malwankar
added tests.
398
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line1'])
399
        self.assertTrue(self._str_contains(out, "^file0.txt~.:line1"))
400
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
401
        out, err = self.run_bzr(['grep', '-r', 'last:1', '.i.e1'])
402
        self.assertTrue(self._str_contains(out, "^file0.txt~.:line1"))
403
0.41.23 by Parth Malwankar
added tests for --include/exclude
404
    def test_versioned_include_file_within_dir(self):
405
        """(versioned) Ensure --include is respected with file within dir.
406
        """
407
        wd = 'foobar0'
408
        self.make_branch_and_tree(wd)
409
        os.chdir(wd)
410
        self._mk_versioned_dir('dir0')
411
        self._mk_versioned_file('dir0/file0.txt')
412
        self._mk_versioned_file('dir0/file1.aa')
413
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
414
0.41.23 by Parth Malwankar
added tests for --include/exclude
415
        out, err = self.run_bzr(['grep', '-r', 'last:1',
416
            '--include', '*.aa', 'line1'])
417
        self.assertTrue(self._str_contains(out, "^file1.aa~.:line1"))
418
        self.assertFalse(self._str_contains(out, "file0.txt"))
419
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
420
        out, err = self.run_bzr(['grep', '-r', 'last:1',
421
            '--include', '*.aa', 'lin.1'])
422
        self.assertTrue(self._str_contains(out, "^file1.aa~.:line1"))
423
        self.assertFalse(self._str_contains(out, "file0.txt"))
424
0.41.23 by Parth Malwankar
added tests for --include/exclude
425
    def test_versioned_exclude_file_within_dir(self):
426
        """(versioned) Ensure --exclude is respected with file within dir.
427
        """
428
        wd = 'foobar0'
429
        self.make_branch_and_tree(wd)
430
        os.chdir(wd)
431
        self._mk_versioned_dir('dir0')
432
        self._mk_versioned_file('dir0/file0.txt')
433
        self._mk_versioned_file('dir0/file1.aa')
434
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
435
0.41.23 by Parth Malwankar
added tests for --include/exclude
436
        out, err = self.run_bzr(['grep', '-r', 'last:1',
437
            '--exclude', '*.txt', 'line1'])
438
        self.assertTrue(self._str_contains(out, "^file1.aa~.:line1"))
439
        self.assertFalse(self._str_contains(out, "file0.txt"))
440
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
441
        out, err = self.run_bzr(['grep', '-r', 'last:1',
442
            '--exclude', '*.txt', 'l[a-z]ne1'])
443
        self.assertTrue(self._str_contains(out, "^file1.aa~.:line1"))
444
        self.assertFalse(self._str_contains(out, "file0.txt"))
445
0.41.17 by Parth Malwankar
added tests.
446
    def test_wtree_file_within_dir(self):
447
        """(wtree) Search for pattern while in nested dir.
448
        """
0.40.23 by Parth Malwankar
added test case for search while inside dir.
449
        wd = 'foobar0'
450
        self.make_branch_and_tree(wd)
451
        os.chdir(wd)
452
        self._mk_versioned_dir('dir0')
453
        self._mk_versioned_file('dir0/file0.txt')
454
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
455
0.40.23 by Parth Malwankar
added test case for search while inside dir.
456
        out, err = self.run_bzr(['grep', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
457
        self.assertTrue(self._str_contains(out, "^file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
458
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
459
        out, err = self.run_bzr(['grep', 'l[aeiou]ne1'])
460
        self.assertTrue(self._str_contains(out, "^file0.txt:line1"))
461
0.41.23 by Parth Malwankar
added tests for --include/exclude
462
    def test_wtree_include_file_within_dir(self):
463
        """(wtree) Ensure --include is respected with file within dir.
464
        """
465
        wd = 'foobar0'
466
        self.make_branch_and_tree(wd)
467
        os.chdir(wd)
468
        self._mk_versioned_dir('dir0')
469
        self._mk_versioned_file('dir0/file0.txt')
470
        self._mk_versioned_file('dir0/file1.aa')
471
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
472
0.41.23 by Parth Malwankar
added tests for --include/exclude
473
        out, err = self.run_bzr(['grep', '--include', '*.aa', 'line1'])
474
        self.assertTrue(self._str_contains(out, "^file1.aa:line1"))
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
475
476
        out, err = self.run_bzr(['grep', '--include', '*.aa', 'l[ixn]ne1'])
477
        self.assertTrue(self._str_contains(out, "^file1.aa:line1"))
0.41.23 by Parth Malwankar
added tests for --include/exclude
478
        self.assertFalse(self._str_contains(out, "file0.txt"))
479
480
    def test_wtree_exclude_file_within_dir(self):
481
        """(wtree) Ensure --exclude is respected with file within dir.
482
        """
483
        wd = 'foobar0'
484
        self.make_branch_and_tree(wd)
485
        os.chdir(wd)
486
        self._mk_versioned_dir('dir0')
487
        self._mk_versioned_file('dir0/file0.txt')
488
        self._mk_versioned_file('dir0/file1.aa')
489
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
490
491
        out, err = self.run_bzr(['grep', '--exclude', '*.txt', 'li.e1'])
492
        self.assertTrue(self._str_contains(out, "^file1.aa:line1"))
493
        self.assertFalse(self._str_contains(out, "file0.txt"))
494
0.41.23 by Parth Malwankar
added tests for --include/exclude
495
        out, err = self.run_bzr(['grep', '--exclude', '*.txt', 'line1'])
496
        self.assertTrue(self._str_contains(out, "^file1.aa:line1"))
497
        self.assertFalse(self._str_contains(out, "file0.txt"))
498
499
    def test_versioned_include_from_outside_dir(self):
500
        """(versioned) Ensure --include is respected during recursive search.
501
        """
502
        wd = 'foobar0'
503
        self.make_branch_and_tree(wd)
504
        os.chdir(wd)
505
506
        self._mk_versioned_dir('dir0')
507
        self._mk_versioned_file('dir0/file0.aa')
508
509
        self._mk_versioned_dir('dir1')
510
        self._mk_versioned_file('dir1/file1.bb')
511
512
        self._mk_versioned_dir('dir2')
513
        self._mk_versioned_file('dir2/file2.cc')
514
515
        out, err = self.run_bzr(['grep', '-r', 'last:1',
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
516
            '--include', '*.aa', '--include', '*.bb', 'l..e1'])
517
        self.assertTrue(self._str_contains(out, "^dir0/file0.aa~.:line1"))
518
        self.assertTrue(self._str_contains(out, "^dir1/file1.bb~.:line1"))
519
        self.assertFalse(self._str_contains(out, "file1.cc"))
520
521
        out, err = self.run_bzr(['grep', '-r', 'last:1',
0.41.23 by Parth Malwankar
added tests for --include/exclude
522
            '--include', '*.aa', '--include', '*.bb', 'line1'])
523
        self.assertTrue(self._str_contains(out, "^dir0/file0.aa~.:line1"))
524
        self.assertTrue(self._str_contains(out, "^dir1/file1.bb~.:line1"))
525
        self.assertFalse(self._str_contains(out, "file1.cc"))
526
527
    def test_wtree_include_from_outside_dir(self):
528
        """(wtree) Ensure --include is respected during recursive search.
529
        """
530
        wd = 'foobar0'
531
        self.make_branch_and_tree(wd)
532
        os.chdir(wd)
533
534
        self._mk_versioned_dir('dir0')
535
        self._mk_versioned_file('dir0/file0.aa')
536
537
        self._mk_versioned_dir('dir1')
538
        self._mk_versioned_file('dir1/file1.bb')
539
540
        self._mk_versioned_dir('dir2')
541
        self._mk_versioned_file('dir2/file2.cc')
542
543
        out, err = self.run_bzr(['grep', '--include', '*.aa',
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
544
            '--include', '*.bb', 'l.n.1'])
545
        self.assertTrue(self._str_contains(out, "^dir0/file0.aa:line1"))
546
        self.assertTrue(self._str_contains(out, "^dir1/file1.bb:line1"))
547
        self.assertFalse(self._str_contains(out, "file1.cc"))
548
549
        out, err = self.run_bzr(['grep', '--include', '*.aa',
0.41.23 by Parth Malwankar
added tests for --include/exclude
550
            '--include', '*.bb', 'line1'])
551
        self.assertTrue(self._str_contains(out, "^dir0/file0.aa:line1"))
552
        self.assertTrue(self._str_contains(out, "^dir1/file1.bb:line1"))
553
        self.assertFalse(self._str_contains(out, "file1.cc"))
554
555
    def test_versioned_exclude_from_outside_dir(self):
556
        """(versioned) Ensure --exclude is respected during recursive search.
557
        """
558
        wd = 'foobar0'
559
        self.make_branch_and_tree(wd)
560
        os.chdir(wd)
561
562
        self._mk_versioned_dir('dir0')
563
        self._mk_versioned_file('dir0/file0.aa')
564
565
        self._mk_versioned_dir('dir1')
566
        self._mk_versioned_file('dir1/file1.bb')
567
568
        self._mk_versioned_dir('dir2')
569
        self._mk_versioned_file('dir2/file2.cc')
570
571
        out, err = self.run_bzr(['grep', '-r', 'last:1',
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
572
            '--exclude', '*.cc', 'l..e1'])
573
        self.assertTrue(self._str_contains(out, "^dir0/file0.aa~.:line1"))
574
        self.assertTrue(self._str_contains(out, "^dir1/file1.bb~.:line1"))
575
        self.assertFalse(self._str_contains(out, "file1.cc"))
576
577
        out, err = self.run_bzr(['grep', '-r', 'last:1',
0.41.23 by Parth Malwankar
added tests for --include/exclude
578
            '--exclude', '*.cc', 'line1'])
579
        self.assertTrue(self._str_contains(out, "^dir0/file0.aa~.:line1"))
580
        self.assertTrue(self._str_contains(out, "^dir1/file1.bb~.:line1"))
581
        self.assertFalse(self._str_contains(out, "file1.cc"))
582
583
    def test_wtree_exclude_from_outside_dir(self):
584
        """(wtree) Ensure --exclude is respected during recursive search.
585
        """
586
        wd = 'foobar0'
587
        self.make_branch_and_tree(wd)
588
        os.chdir(wd)
589
590
        self._mk_versioned_dir('dir0')
591
        self._mk_versioned_file('dir0/file0.aa')
592
593
        self._mk_versioned_dir('dir1')
594
        self._mk_versioned_file('dir1/file1.bb')
595
596
        self._mk_versioned_dir('dir2')
597
        self._mk_versioned_file('dir2/file2.cc')
598
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
599
        out, err = self.run_bzr(['grep', '--exclude', '*.cc', 'l[hijk]ne1'])
600
        self.assertTrue(self._str_contains(out, "^dir0/file0.aa:line1"))
601
        self.assertTrue(self._str_contains(out, "^dir1/file1.bb:line1"))
602
        self.assertFalse(self._str_contains(out, "file1.cc"))
603
0.41.23 by Parth Malwankar
added tests for --include/exclude
604
        out, err = self.run_bzr(['grep', '--exclude', '*.cc', 'line1'])
605
        self.assertTrue(self._str_contains(out, "^dir0/file0.aa:line1"))
606
        self.assertTrue(self._str_contains(out, "^dir1/file1.bb:line1"))
607
        self.assertFalse(self._str_contains(out, "file1.cc"))
608
609
    def test_workingtree_files_from_outside_dir(self):
0.41.17 by Parth Malwankar
added tests.
610
        """(wtree) Grep for pattern with dirs passed as argument.
611
        """
0.40.41 by Parth Malwankar
added test for dir arg provided by user
612
        wd = 'foobar0'
613
        self.make_branch_and_tree(wd)
614
        os.chdir(wd)
615
616
        self._mk_versioned_dir('dir0')
617
        self._mk_versioned_file('dir0/file0.txt')
618
619
        self._mk_versioned_dir('dir1')
620
        self._mk_versioned_file('dir1/file1.txt')
621
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
622
        out, err = self.run_bzr(['grep', 'l[aeiou]ne1', 'dir0', 'dir1'])
623
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt:line1"))
624
        self.assertTrue(self._str_contains(out, "^dir1/file1.txt:line1"))
625
0.40.41 by Parth Malwankar
added test for dir arg provided by user
626
        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
627
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt:line1"))
628
        self.assertTrue(self._str_contains(out, "^dir1/file1.txt:line1"))
629
0.40.45 by Parth Malwankar
fixed case where only revno:0 is present. added test.
630
    def test_versioned_files_from_outside_dir(self):
0.41.17 by Parth Malwankar
added tests.
631
        """(versioned) Grep for pattern with dirs passed as argument.
632
        """
633
        wd = 'foobar0'
634
        self.make_branch_and_tree(wd)
635
        os.chdir(wd)
636
637
        self._mk_versioned_dir('dir0')
638
        self._mk_versioned_file('dir0/file0.txt')
639
640
        self._mk_versioned_dir('dir1')
641
        self._mk_versioned_file('dir1/file1.txt')
642
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
643
        out, err = self.run_bzr(['grep', '-r', 'last:1', '.ine1', 'dir0', 'dir1'])
644
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~.:line1"))
645
        self.assertTrue(self._str_contains(out, "^dir1/file1.txt~.:line1"))
646
0.41.17 by Parth Malwankar
added tests.
647
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line1', 'dir0', 'dir1'])
648
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~.:line1"))
649
        self.assertTrue(self._str_contains(out, "^dir1/file1.txt~.:line1"))
650
651
    def test_wtree_files_from_outside_dir(self):
652
        """(wtree) Grep for pattern with dirs passed as argument.
653
        """
0.40.45 by Parth Malwankar
fixed case where only revno:0 is present. added test.
654
        wd = 'foobar0'
655
        self.make_branch_and_tree(wd)
656
        os.chdir(wd)
657
658
        self._mk_versioned_dir('dir0')
659
        self._mk_versioned_file('dir0/file0.txt')
660
661
        self._mk_versioned_dir('dir1')
662
        self._mk_versioned_file('dir1/file1.txt')
663
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
664
        out, err = self.run_bzr(['grep', 'li.e1', 'dir0', 'dir1'])
665
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt:line1"))
666
        self.assertTrue(self._str_contains(out, "^dir1/file1.txt:line1"))
667
0.40.45 by Parth Malwankar
fixed case where only revno:0 is present. added test.
668
        out, err = self.run_bzr(['grep', 'line1', 'dir0', 'dir1'])
669
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt:line1"))
670
        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
671
672
    def test_versioned_files_from_outside_two_dirs(self):
0.41.17 by Parth Malwankar
added tests.
673
        """(versioned) Grep for pattern with two levels of nested dir.
674
        """
675
        wd = 'foobar0'
676
        self.make_branch_and_tree(wd)
677
        os.chdir(wd)
678
679
        self._mk_versioned_dir('dir0')
680
        self._mk_versioned_file('dir0/file0.txt')
681
682
        self._mk_versioned_dir('dir1')
683
        self._mk_versioned_file('dir1/file1.txt')
684
685
        self._mk_versioned_dir('dir0/dir00')
686
        self._mk_versioned_file('dir0/dir00/file0.txt')
687
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
688
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'l.ne1', 'dir0/dir00'])
689
        self.assertTrue(self._str_contains(out, "^dir0/dir00/file0.txt~.:line1"))
690
691
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'l.ne1'])
692
        self.assertTrue(self._str_contains(out, "^dir0/dir00/file0.txt~.:line1"))
693
0.41.17 by Parth Malwankar
added tests.
694
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line1', 'dir0/dir00'])
695
        self.assertTrue(self._str_contains(out, "^dir0/dir00/file0.txt~.:line1"))
696
697
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line1'])
698
        self.assertTrue(self._str_contains(out, "^dir0/dir00/file0.txt~.:line1"))
699
700
    def test_wtree_files_from_outside_two_dirs(self):
701
        """(wtree) Grep for pattern with two levels of nested dir.
702
        """
0.40.44 by Parth Malwankar
improved display of path when dir is given as argument
703
        wd = 'foobar0'
704
        self.make_branch_and_tree(wd)
705
        os.chdir(wd)
706
707
        self._mk_versioned_dir('dir0')
708
        self._mk_versioned_file('dir0/file0.txt')
709
710
        self._mk_versioned_dir('dir1')
711
        self._mk_versioned_file('dir1/file1.txt')
712
713
        self._mk_versioned_dir('dir0/dir00')
714
        self._mk_versioned_file('dir0/dir00/file0.txt')
715
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
716
        out, err = self.run_bzr(['grep', 'lin.1', 'dir0/dir00'])
717
        self.assertTrue(self._str_contains(out, "^dir0/dir00/file0.txt:line1"))
718
719
        out, err = self.run_bzr(['grep', 'li.e1'])
720
        self.assertTrue(self._str_contains(out, "^dir0/dir00/file0.txt:line1"))
721
0.40.44 by Parth Malwankar
improved display of path when dir is given as argument
722
        out, err = self.run_bzr(['grep', 'line1', 'dir0/dir00'])
723
        self.assertTrue(self._str_contains(out, "^dir0/dir00/file0.txt:line1"))
724
0.41.4 by Parth Malwankar
--recurse is default.
725
        out, err = self.run_bzr(['grep', 'line1'])
0.40.44 by Parth Malwankar
improved display of path when dir is given as argument
726
        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
727
0.40.25 by Parth Malwankar
added test case for multilevel dir.
728
    def test_versioned_file_within_dir_two_levels(self):
0.41.17 by Parth Malwankar
added tests.
729
        """(versioned) Search for pattern while in nested dir (two levels).
730
        """
731
        wd = 'foobar0'
732
        self.make_branch_and_tree(wd)
733
        os.chdir(wd)
734
        self._mk_versioned_dir('dir0')
735
        self._mk_versioned_dir('dir0/dir1')
736
        self._mk_versioned_file('dir0/dir1/file0.txt')
737
        os.chdir('dir0')
738
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
739
        out, err = self.run_bzr(['grep', '-r', 'last:1', '.ine1'])
740
        self.assertTrue(self._str_contains(out, "^dir1/file0.txt~.:line1"))
741
742
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--from-root', 'l.ne1'])
743
        self.assertTrue(self._str_contains(out, "^dir0/dir1/file0.txt~.:line1"))
744
745
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--no-recursive', 'line1'])
746
        self.assertFalse(self._str_contains(out, "file0.txt"))
747
748
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'lin.1'])
0.41.17 by Parth Malwankar
added tests.
749
        self.assertTrue(self._str_contains(out, "^dir1/file0.txt~.:line1"))
750
751
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--from-root', 'line1'])
752
        self.assertTrue(self._str_contains(out, "^dir0/dir1/file0.txt~.:line1"))
753
754
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--no-recursive', 'line1'])
755
        self.assertFalse(self._str_contains(out, "file0.txt"))
756
757
    def test_wtree_file_within_dir_two_levels(self):
758
        """(wtree) Search for pattern while in nested dir (two levels).
759
        """
0.40.25 by Parth Malwankar
added test case for multilevel dir.
760
        wd = 'foobar0'
761
        self.make_branch_and_tree(wd)
762
        os.chdir(wd)
763
        self._mk_versioned_dir('dir0')
764
        self._mk_versioned_dir('dir0/dir1')
765
        self._mk_versioned_file('dir0/dir1/file0.txt')
766
        os.chdir('dir0')
0.41.4 by Parth Malwankar
--recurse is default.
767
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
768
        out, err = self.run_bzr(['grep', 'l[hij]ne1'])
769
        self.assertTrue(self._str_contains(out, "^dir1/file0.txt:line1"))
770
771
        out, err = self.run_bzr(['grep', '--from-root', 'l.ne1'])
772
        self.assertTrue(self._str_contains(out, "^dir0/dir1/file0.txt:line1"))
773
774
        out, err = self.run_bzr(['grep', '--no-recursive', 'lin.1'])
775
        self.assertFalse(self._str_contains(out, "file0.txt"))
776
0.41.4 by Parth Malwankar
--recurse is default.
777
        out, err = self.run_bzr(['grep', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
778
        self.assertTrue(self._str_contains(out, "^dir1/file0.txt:line1"))
0.41.4 by Parth Malwankar
--recurse is default.
779
0.40.25 by Parth Malwankar
added test case for multilevel dir.
780
        out, err = self.run_bzr(['grep', '--from-root', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
781
        self.assertTrue(self._str_contains(out, "^dir0/dir1/file0.txt:line1"))
0.41.4 by Parth Malwankar
--recurse is default.
782
0.41.6 by Parth Malwankar
renamed --recurse/--no-recurse => --recursive/--no-recursive
783
        out, err = self.run_bzr(['grep', '--no-recursive', 'line1'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
784
        self.assertFalse(self._str_contains(out, "file0.txt"))
0.40.25 by Parth Malwankar
added test case for multilevel dir.
785
0.41.17 by Parth Malwankar
added tests.
786
    def test_versioned_ignore_case_no_match(self):
787
        """(versioned) Match fails without --ignore-case.
788
        """
789
        wd = 'foobar0'
790
        self.make_branch_and_tree(wd)
791
        os.chdir(wd)
792
        self._mk_versioned_file('file0.txt')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
793
0.41.17 by Parth Malwankar
added tests.
794
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'LinE1', 'file0.txt'])
795
        self.assertFalse(self._str_contains(out, "file0.txt~.:line1"))
796
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
797
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'Li.E1', 'file0.txt'])
798
        self.assertFalse(self._str_contains(out, "file0.txt~.:line1"))
799
0.41.17 by Parth Malwankar
added tests.
800
    def test_wtree_ignore_case_no_match(self):
801
        """(wtree) Match fails without --ignore-case.
802
        """
0.40.13 by Parth Malwankar
added tests for -R and -i
803
        wd = 'foobar0'
804
        self.make_branch_and_tree(wd)
805
        os.chdir(wd)
806
        self._mk_versioned_file('file0.txt')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
807
0.40.13 by Parth Malwankar
added tests for -R and -i
808
        out, err = self.run_bzr(['grep', 'LinE1', 'file0.txt'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
809
        self.assertFalse(self._str_contains(out, "file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
810
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
811
        out, err = self.run_bzr(['grep', '.inE1', 'file0.txt'])
812
        self.assertFalse(self._str_contains(out, "file0.txt:line1"))
813
0.41.17 by Parth Malwankar
added tests.
814
    def test_versioned_ignore_case_match(self):
815
        """(versioned) Match fails without --ignore-case.
816
        """
817
        wd = 'foobar0'
818
        self.make_branch_and_tree(wd)
819
        os.chdir(wd)
820
        self._mk_versioned_file('file0.txt')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
821
822
        out, err = self.run_bzr(['grep', '-r', 'last:1',
823
            '-i', 'Li.E1', 'file0.txt'])
824
        self.assertTrue(self._str_contains(out, "file0.txt~.:line1"))
825
0.41.17 by Parth Malwankar
added tests.
826
        out, err = self.run_bzr(['grep', '-r', 'last:1',
827
            '-i', 'LinE1', 'file0.txt'])
828
        self.assertTrue(self._str_contains(out, "file0.txt~.:line1"))
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
829
0.41.17 by Parth Malwankar
added tests.
830
        out, err = self.run_bzr(['grep', '-r', 'last:1',
831
            '--ignore-case', 'LinE1', 'file0.txt'])
832
        self.assertTrue(self._str_contains(out, "^file0.txt~.:line1"))
833
834
    def test_wtree_ignore_case_match(self):
835
        """(wtree) Match fails without --ignore-case.
836
        """
0.40.13 by Parth Malwankar
added tests for -R and -i
837
        wd = 'foobar0'
838
        self.make_branch_and_tree(wd)
839
        os.chdir(wd)
840
        self._mk_versioned_file('file0.txt')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
841
0.40.13 by Parth Malwankar
added tests for -R and -i
842
        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
843
        self.assertTrue(self._str_contains(out, "file0.txt:line1"))
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
844
0.40.24 by Parth Malwankar
added support for --line-number.
845
        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
846
        self.assertTrue(self._str_contains(out, "^file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
847
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
848
        out, err = self.run_bzr(['grep', '--ignore-case', 'Li.E1', 'file0.txt'])
849
        self.assertTrue(self._str_contains(out, "^file0.txt:line1"))
850
0.41.17 by Parth Malwankar
added tests.
851
    def test_versioned_from_root_fail(self):
852
        """(versioned) Match should fail without --from-root.
853
        """
854
        wd = 'foobar0'
855
        self.make_branch_and_tree(wd)
856
        os.chdir(wd)
857
        self._mk_versioned_file('file0.txt')
858
        self._mk_versioned_dir('dir0')
859
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
860
861
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'li.e1'])
862
        self.assertFalse(self._str_contains(out, "file0.txt"))
863
0.41.17 by Parth Malwankar
added tests.
864
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line1'])
865
        self.assertFalse(self._str_contains(out, "file0.txt"))
866
867
    def test_wtree_from_root_fail(self):
868
        """(wtree) Match should fail without --from-root.
869
        """
0.40.14 by Parth Malwankar
added test for --from-root
870
        wd = 'foobar0'
871
        self.make_branch_and_tree(wd)
872
        os.chdir(wd)
873
        self._mk_versioned_file('file0.txt')
874
        self._mk_versioned_dir('dir0')
875
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
876
0.40.14 by Parth Malwankar
added test for --from-root
877
        out, err = self.run_bzr(['grep', 'line1'])
0.41.17 by Parth Malwankar
added tests.
878
        self.assertFalse(self._str_contains(out, "file0.txt"))
879
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
880
        out, err = self.run_bzr(['grep', 'li.e1'])
881
        self.assertFalse(self._str_contains(out, "file0.txt"))
882
0.41.17 by Parth Malwankar
added tests.
883
    def test_versioned_from_root_pass(self):
884
        """(versioned) Match pass with --from-root.
885
        """
886
        wd = 'foobar0'
887
        self.make_branch_and_tree(wd)
888
        os.chdir(wd)
889
        self._mk_versioned_file('file0.txt')
890
        self._mk_versioned_dir('dir0')
891
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
892
893
        out, err = self.run_bzr(['grep', '-r', 'last:1',
894
            '--from-root', 'l.ne1'])
895
        self.assertTrue(self._str_contains(out, "file0.txt~.:line1"))
896
0.41.17 by Parth Malwankar
added tests.
897
        out, err = self.run_bzr(['grep', '-r', 'last:1',
898
            '--from-root', 'line1'])
899
        self.assertTrue(self._str_contains(out, "file0.txt~.:line1"))
900
901
    def test_wtree_from_root_pass(self):
902
        """(wtree) Match pass with --from-root.
903
        """
0.40.14 by Parth Malwankar
added test for --from-root
904
        wd = 'foobar0'
905
        self.make_branch_and_tree(wd)
906
        os.chdir(wd)
907
        self._mk_versioned_file('file0.txt')
908
        self._mk_versioned_dir('dir0')
909
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
910
911
        out, err = self.run_bzr(['grep', '--from-root', 'lin.1'])
912
        self.assertTrue(self._str_contains(out, "file0.txt:line1"))
913
0.40.14 by Parth Malwankar
added test for --from-root
914
        out, err = self.run_bzr(['grep', '--from-root', 'line1'])
0.41.17 by Parth Malwankar
added tests.
915
        self.assertTrue(self._str_contains(out, "file0.txt:line1"))
916
917
    def test_versioned_with_line_number(self):
918
        """(versioned) Search for pattern with --line-number.
919
        """
920
        wd = 'foobar0'
921
        self.make_branch_and_tree(wd)
922
        os.chdir(wd)
923
        self._mk_versioned_file('file0.txt')
924
925
        out, err = self.run_bzr(['grep', '-r', 'last:1',
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
926
            '--line-number', 'li.e3', 'file0.txt'])
927
        self.assertTrue(self._str_contains(out, "file0.txt~.:3:line3"))
928
929
        out, err = self.run_bzr(['grep', '-r', 'last:1',
0.41.17 by Parth Malwankar
added tests.
930
            '--line-number', 'line3', 'file0.txt'])
931
        self.assertTrue(self._str_contains(out, "file0.txt~.:3:line3"))
932
933
        out, err = self.run_bzr(['grep', '-r', 'last:1',
934
            '-n', 'line1', 'file0.txt'])
935
        self.assertTrue(self._str_contains(out, "file0.txt~.:1:line1"))
936
937
    def test_wtree_with_line_number(self):
938
        """(wtree) Search for pattern with --line-number.
939
        """
0.40.24 by Parth Malwankar
added support for --line-number.
940
        wd = 'foobar0'
941
        self.make_branch_and_tree(wd)
942
        os.chdir(wd)
943
        self._mk_versioned_file('file0.txt')
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
944
0.40.24 by Parth Malwankar
added support for --line-number.
945
        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
946
        self.assertTrue(self._str_contains(out, "file0.txt:3:line3"))
947
0.40.24 by Parth Malwankar
added support for --line-number.
948
        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
949
        self.assertTrue(self._str_contains(out, "file0.txt:1:line1"))
0.40.14 by Parth Malwankar
added test for --from-root
950
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
951
        out, err = self.run_bzr(['grep', '-n', '[hjkl]ine1', 'file0.txt'])
952
        self.assertTrue(self._str_contains(out, "file0.txt:1:line1"))
953
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
954
    def test_revno_basic_history_grep_file(self):
0.41.17 by Parth Malwankar
added tests.
955
        """Search for pattern in specific revision number in a file.
956
        """
0.40.34 by Parth Malwankar
added tests for single revision history search
957
        wd = 'foobar0'
958
        fname = 'file0.txt'
959
        self.make_branch_and_tree(wd)
960
        os.chdir(wd)
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
961
        self._mk_versioned_file(fname, total_lines=0)
0.40.34 by Parth Malwankar
added tests for single revision history search
962
        self._update_file(fname, text="v2 text\n")
963
        self._update_file(fname, text="v3 text\n")
964
        self._update_file(fname, text="v4 text\n")
965
966
        # rev 2 should not have text 'v3'
967
        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
968
        self.assertFalse(self._str_contains(out, "file0.txt"))
0.40.34 by Parth Malwankar
added tests for single revision history search
969
970
        # rev 3 should not have text 'v3'
971
        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
972
        self.assertTrue(self._str_contains(out, "file0.txt~3:v3.*"))
0.40.34 by Parth Malwankar
added tests for single revision history search
973
974
        # rev 3 should not have text 'v3' with line number
975
        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
976
        self.assertTrue(self._str_contains(out, "file0.txt~3:2:v3.*"))
0.40.34 by Parth Malwankar
added tests for single revision history search
977
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
978
        # rev 2 should not have text 'v3'
979
        out, err = self.run_bzr(['grep', '-r', '2', '[tuv]3', fname])
980
        self.assertFalse(self._str_contains(out, "file0.txt"))
981
982
        # rev 3 should not have text 'v3'
983
        out, err = self.run_bzr(['grep', '-r', '3', '[tuv]3', fname])
984
        self.assertTrue(self._str_contains(out, "file0.txt~3:v3.*"))
985
986
        # rev 3 should not have text 'v3' with line number
987
        out, err = self.run_bzr(['grep', '-r', '3', '-n', '[tuv]3', fname])
988
        self.assertTrue(self._str_contains(out, "file0.txt~3:2:v3.*"))
989
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
990
    def test_revno_basic_history_grep_full(self):
0.41.17 by Parth Malwankar
added tests.
991
        """Search for pattern in specific revision number in a file.
992
        """
0.40.34 by Parth Malwankar
added tests for single revision history search
993
        wd = 'foobar0'
994
        fname = 'file0.txt'
995
        self.make_branch_and_tree(wd)
996
        os.chdir(wd)
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
997
        self._mk_versioned_file(fname, total_lines=0) # rev1
998
        self._mk_versioned_file('file1.txt')          # rev2
999
        self._update_file(fname, text="v3 text\n")    # rev3
1000
        self._update_file(fname, text="v4 text\n")    # rev4
1001
        self._update_file(fname, text="v5 text\n")    # rev5
0.40.34 by Parth Malwankar
added tests for single revision history search
1002
1003
        # rev 2 should not have text 'v3'
1004
        out, err = self.run_bzr(['grep', '-r', '2', 'v3'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
1005
        self.assertFalse(self._str_contains(out, "file0.txt"))
0.40.34 by Parth Malwankar
added tests for single revision history search
1006
1007
        # rev 3 should not have text 'v3'
1008
        out, err = self.run_bzr(['grep', '-r', '3', 'v3'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
1009
        self.assertTrue(self._str_contains(out, "file0.txt~3:v3"))
0.40.34 by Parth Malwankar
added tests for single revision history search
1010
1011
        # rev 3 should not have text 'v3' with line number
1012
        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
1013
        self.assertTrue(self._str_contains(out, "file0.txt~3:1:v3"))
1014
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1015
        # rev 2 should not have text 'v3'
1016
        out, err = self.run_bzr(['grep', '-r', '2', '[tuv]3'])
1017
        self.assertFalse(self._str_contains(out, "file0.txt"))
1018
1019
        # rev 3 should not have text 'v3'
1020
        out, err = self.run_bzr(['grep', '-r', '3', '[tuv]3'])
1021
        self.assertTrue(self._str_contains(out, "file0.txt~3:v3"))
1022
1023
        # rev 3 should not have text 'v3' with line number
1024
        out, err = self.run_bzr(['grep', '-r', '3', '-n', '[tuv]3'])
1025
        self.assertTrue(self._str_contains(out, "file0.txt~3:1:v3"))
1026
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
1027
    def test_revno_versioned_file_in_dir(self):
0.41.17 by Parth Malwankar
added tests.
1028
        """Grep specific version of file withing dir.
1029
        """
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
1030
        wd = 'foobar0'
1031
        self.make_branch_and_tree(wd)
1032
        os.chdir(wd)
1033
        self._mk_versioned_dir('dir0')                      # rev1
1034
        self._mk_versioned_file('dir0/file0.txt')           # rev2
1035
        self._update_file('dir0/file0.txt', "v3 text\n")    # rev3
1036
        self._update_file('dir0/file0.txt', "v4 text\n")    # rev4
1037
        self._update_file('dir0/file0.txt', "v5 text\n")    # rev5
1038
1039
        # v4 should not be present in revno 3
0.41.4 by Parth Malwankar
--recurse is default.
1040
        out, err = self.run_bzr(['grep', '-r', 'last:3', 'v4'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
1041
        self.assertFalse(self._str_contains(out, "^dir0/file0.txt"))
1042
1043
        # v4 should be present in revno 4
0.41.4 by Parth Malwankar
--recurse is default.
1044
        out, err = self.run_bzr(['grep', '-r', 'last:2', 'v4'])
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
1045
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~4:v4"))
1046
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1047
        # v4 should not be present in revno 3
1048
        out, err = self.run_bzr(['grep', '-r', 'last:3', '[tuv]4'])
1049
        self.assertFalse(self._str_contains(out, "^dir0/file0.txt"))
1050
1051
        # v4 should be present in revno 4
1052
        out, err = self.run_bzr(['grep', '-r', 'last:2', '[tuv]4'])
1053
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~4:v4"))
1054
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
1055
    def test_revno_range_basic_history_grep(self):
0.41.17 by Parth Malwankar
added tests.
1056
        """Search for pattern in revision range for file.
1057
        """
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
1058
        wd = 'foobar0'
1059
        fname = 'file0.txt'
1060
        self.make_branch_and_tree(wd)
1061
        os.chdir(wd)
1062
        self._mk_versioned_file(fname, total_lines=0) # rev1
1063
        self._mk_versioned_file('file1.txt')          # rev2
1064
        self._update_file(fname, text="v3 text\n")    # rev3
1065
        self._update_file(fname, text="v4 text\n")    # rev4
1066
        self._update_file(fname, text="v5 text\n")    # rev5
1067
        self._update_file(fname, text="v6 text\n")    # rev6
1068
1069
        out, err = self.run_bzr(['grep', '-r', '1..', 'v3'])
1070
        self.assertTrue(self._str_contains(out, "file0.txt~3:v3"))
1071
        self.assertTrue(self._str_contains(out, "file0.txt~4:v3"))
1072
        self.assertTrue(self._str_contains(out, "file0.txt~5:v3"))
1073
1074
        out, err = self.run_bzr(['grep', '-r', '1..5', 'v3'])
1075
        self.assertTrue(self._str_contains(out, "file0.txt~3:v3"))
1076
        self.assertTrue(self._str_contains(out, "file0.txt~4:v3"))
1077
        self.assertTrue(self._str_contains(out, "file0.txt~5:v3"))
1078
        self.assertFalse(self._str_contains(out, "file0.txt~6:v3"))
1079
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1080
        out, err = self.run_bzr(['grep', '-r', '1..', '[tuv]3'])
1081
        self.assertTrue(self._str_contains(out, "file0.txt~3:v3"))
1082
        self.assertTrue(self._str_contains(out, "file0.txt~4:v3"))
1083
        self.assertTrue(self._str_contains(out, "file0.txt~5:v3"))
1084
1085
        out, err = self.run_bzr(['grep', '-r', '1..5', '[tuv]3'])
1086
        self.assertTrue(self._str_contains(out, "file0.txt~3:v3"))
1087
        self.assertTrue(self._str_contains(out, "file0.txt~4:v3"))
1088
        self.assertTrue(self._str_contains(out, "file0.txt~5:v3"))
1089
        self.assertFalse(self._str_contains(out, "file0.txt~6:v3"))
1090
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
1091
    def test_revno_range_versioned_file_in_dir(self):
0.41.17 by Parth Malwankar
added tests.
1092
        """Grep rev-range for pattern for file withing a dir.
1093
        """
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
1094
        wd = 'foobar0'
1095
        self.make_branch_and_tree(wd)
1096
        os.chdir(wd)
1097
        self._mk_versioned_dir('dir0')                      # rev1
1098
        self._mk_versioned_file('dir0/file0.txt')           # rev2
1099
        self._update_file('dir0/file0.txt', "v3 text\n")    # rev3
1100
        self._update_file('dir0/file0.txt', "v4 text\n")    # rev4
1101
        self._update_file('dir0/file0.txt', "v5 text\n")    # rev5
1102
        self._update_file('dir0/file0.txt', "v6 text\n")    # rev6
1103
0.41.4 by Parth Malwankar
--recurse is default.
1104
        out, err = self.run_bzr(['grep', '-r', '2..5', 'v3'])
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
1105
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~3:v3"))
1106
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~4:v3"))
1107
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~5:v3"))
1108
        self.assertFalse(self._str_contains(out, "^dir0/file0.txt~6:v3"))
1109
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1110
        out, err = self.run_bzr(['grep', '-r', '2..5', '[tuv]3'])
1111
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~3:v3"))
1112
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~4:v3"))
1113
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~5:v3"))
1114
        self.assertFalse(self._str_contains(out, "^dir0/file0.txt~6:v3"))
1115
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
1116
    def test_revno_range_versioned_file_from_outside_dir(self):
0.41.17 by Parth Malwankar
added tests.
1117
        """Grep rev-range for pattern from outside dir.
1118
        """
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
1119
        wd = 'foobar0'
1120
        self.make_branch_and_tree(wd)
1121
        os.chdir(wd)
1122
        self._mk_versioned_dir('dir0')                      # rev1
1123
        self._mk_versioned_file('dir0/file0.txt')           # rev2
1124
        self._update_file('dir0/file0.txt', "v3 text\n")    # rev3
1125
        self._update_file('dir0/file0.txt', "v4 text\n")    # rev4
1126
        self._update_file('dir0/file0.txt', "v5 text\n")    # rev5
1127
        self._update_file('dir0/file0.txt', "v6 text\n")    # rev6
1128
1129
        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
1130
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~3:v3"))
1131
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~4:v3"))
1132
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~5:v3"))
1133
        self.assertFalse(self._str_contains(out, "^dir0/file0.txt~6:v3"))
0.40.13 by Parth Malwankar
added tests for -R and -i
1134
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1135
        out, err = self.run_bzr(['grep', '-r', '2..5', '[tuv]3', 'dir0'])
1136
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~3:v3"))
1137
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~4:v3"))
1138
        self.assertTrue(self._str_contains(out, "^dir0/file0.txt~5:v3"))
1139
        self.assertFalse(self._str_contains(out, "^dir0/file0.txt~6:v3"))
1140
0.40.46 by Parth Malwankar
--levels=0 now implicitly prints revnos. added test for --levels=0.
1141
    def test_levels(self):
0.41.17 by Parth Malwankar
added tests.
1142
        """--levels=0 should show findings from merged revision.
1143
        """
0.40.46 by Parth Malwankar
--levels=0 now implicitly prints revnos. added test for --levels=0.
1144
        wd0 = 'foobar0'
1145
        wd1 = 'foobar1'
1146
1147
        self.make_branch_and_tree(wd0)
1148
        os.chdir(wd0)
1149
        self._mk_versioned_file('file0.txt')
1150
        os.chdir('..')
1151
1152
        out, err = self.run_bzr(['branch', wd0, wd1])
1153
        os.chdir(wd1)
1154
        self._mk_versioned_file('file1.txt')
1155
        os.chdir(osutils.pathjoin('..', wd0))
1156
1157
        out, err = self.run_bzr(['merge', osutils.pathjoin('..', wd1)])
1158
        out, err = self.run_bzr(['ci', '-m', 'merged'])
1159
1160
        out, err = self.run_bzr(['grep', 'line1'])
1161
        self.assertTrue(self._str_contains(out, "file0.txt:line1"))
1162
        self.assertTrue(self._str_contains(out, "file1.txt:line1"))
1163
0.41.17 by Parth Malwankar
added tests.
1164
        # levels should be ignored by wtree grep
1165
        out, err = self.run_bzr(['grep', '--levels=0', 'line1'])
1166
        self.assertTrue(self._str_contains(out, "file0.txt:line1"))
1167
        self.assertTrue(self._str_contains(out, "file1.txt:line1"))
1168
0.40.77 by Parth Malwankar
fixed test case.
1169
        out, err = self.run_bzr(['grep', '-r', 'last:1..', '--levels=0', 'line1'])
0.40.46 by Parth Malwankar
--levels=0 now implicitly prints revnos. added test for --levels=0.
1170
        self.assertTrue(self._str_contains(out, "file0.txt~2:line1"))
1171
        self.assertTrue(self._str_contains(out, "file1.txt~2:line1"))
1172
        self.assertTrue(self._str_contains(out, "file0.txt~1.1.1:line1"))
1173
        self.assertTrue(self._str_contains(out, "file1.txt~1.1.1:line1"))
1174
0.40.77 by Parth Malwankar
fixed test case.
1175
        out, err = self.run_bzr(['grep', '-r',  '-1..', '-n', '--levels=0', 'line1'])
0.40.46 by Parth Malwankar
--levels=0 now implicitly prints revnos. added test for --levels=0.
1176
        self.assertTrue(self._str_contains(out, "file0.txt~2:1:line1"))
1177
        self.assertTrue(self._str_contains(out, "file1.txt~2:1:line1"))
1178
        self.assertTrue(self._str_contains(out, "file0.txt~1.1.1:1:line1"))
1179
        self.assertTrue(self._str_contains(out, "file1.txt~1.1.1:1:line1"))
1180
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1181
        # levels should be ignored by wtree grep
1182
        out, err = self.run_bzr(['grep', '--levels=0', 'l.ne1'])
1183
        self.assertTrue(self._str_contains(out, "file0.txt:line1"))
1184
        self.assertTrue(self._str_contains(out, "file1.txt:line1"))
1185
1186
        out, err = self.run_bzr(['grep', '-r', 'last:1..', '--levels=0', 'lin.1'])
1187
        self.assertTrue(self._str_contains(out, "file0.txt~2:line1"))
1188
        self.assertTrue(self._str_contains(out, "file1.txt~2:line1"))
1189
        self.assertTrue(self._str_contains(out, "file0.txt~1.1.1:line1"))
1190
        self.assertTrue(self._str_contains(out, "file1.txt~1.1.1:line1"))
1191
1192
        out, err = self.run_bzr(['grep', '-r',  '-1..', '-n', '--levels=0', '.ine1'])
1193
        self.assertTrue(self._str_contains(out, "file0.txt~2:1:line1"))
1194
        self.assertTrue(self._str_contains(out, "file1.txt~2:1:line1"))
1195
        self.assertTrue(self._str_contains(out, "file0.txt~1.1.1:1:line1"))
1196
        self.assertTrue(self._str_contains(out, "file1.txt~1.1.1:1:line1"))
1197
0.41.17 by Parth Malwankar
added tests.
1198
    def test_versioned_binary_file_grep(self):
1199
        """(versioned) Grep for pattern in binary file.
1200
        """
1201
        wd = 'foobar0'
1202
        self.make_branch_and_tree(wd)
1203
        os.chdir(wd)
0.40.60 by Parth Malwankar
'binary file skipped' warning is only shown with --verbose flag
1204
        self._mk_versioned_file('file0.bin')
1205
        self._update_file('file0.bin', "\x00lineNN\x00\n")
1206
1207
        # note: set --verbose/-v flag to get the skip message.
1208
        out, err = self.run_bzr(['grep', '-v', '-r', 'last:1',
1209
            'lineNN', 'file0.bin'])
1210
        self.assertFalse(self._str_contains(out, "file0.bin"))
1211
        self.assertTrue(self._str_contains(err, "Binary file.*file0.bin.*skipped"))
0.41.17 by Parth Malwankar
added tests.
1212
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1213
        out, err = self.run_bzr(['grep', '-v', '-r', 'last:1',
1214
            'line.N', 'file0.bin'])
1215
        self.assertFalse(self._str_contains(out, "file0.bin"))
1216
        self.assertTrue(self._str_contains(err, "Binary file.*file0.bin.*skipped"))
1217
0.41.17 by Parth Malwankar
added tests.
1218
    def test_wtree_binary_file_grep(self):
1219
        """(wtree) Grep for pattern in binary file.
1220
        """
0.40.47 by Parth Malwankar
fixes bug #531336. binary files are now skipped.
1221
        wd = 'foobar0'
1222
        self.make_branch_and_tree(wd)
1223
        os.chdir(wd)
0.40.60 by Parth Malwankar
'binary file skipped' warning is only shown with --verbose flag
1224
        self._mk_versioned_file('file0.bin')
1225
        self._update_file('file0.bin', "\x00lineNN\x00\n")
1226
1227
        # note: set --verbose/-v flag to get the skip message.
1228
        out, err = self.run_bzr(['grep', '-v', 'lineNN', 'file0.bin'])
1229
        self.assertFalse(self._str_contains(out, "file0.bin:line1"))
1230
        self.assertTrue(self._str_contains(err, "Binary file.*file0.bin.*skipped"))
1231
1232
        # binary warning should not be shown without --verbose
1233
        out, err = self.run_bzr(['grep', 'lineNN', 'file0.bin'])
1234
        self.assertFalse(self._str_contains(out, "file0.bin:line1"))
1235
        self.assertFalse(self._str_contains(err, "Binary file"))
0.40.47 by Parth Malwankar
fixes bug #531336. binary files are now skipped.
1236