/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.43.12 by Parth Malwankar
added feature for running color tests conditionally
21
import features
0.43.11 by Parth Malwankar
test cases for colored results.
22
from termcolor import color_string, FG
0.43.12 by Parth Malwankar
added feature for running color tests conditionally
23
0.40.46 by Parth Malwankar
--levels=0 now implicitly prints revnos. added test for --levels=0.
24
from bzrlib import tests, osutils
0.40.11 by Parth Malwankar
added basic test
25
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
26
# NOTE: As bzr-grep optimizes PATTERN search to -F/--fixed-string
27
# for patterns that are not alphanumeric+whitespace, we test grep
28
# specfically with patterns that have special characters so that
29
# regex path is tested. alphanumeric patterns test the -F path.
30
0.43.11 by Parth Malwankar
test cases for colored results.
31
class GrepTestBase(tests.TestCaseWithTransport):
32
    """Base class for testing grep.
33
34
    Provides support methods for creating directory and file revisions.
35
    """
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
36
    _reflags = re.MULTILINE|re.DOTALL
0.40.11 by Parth Malwankar
added basic test
37
0.40.26 by Parth Malwankar
test passing for multiple matches
38
    def _mk_file(self, path, line_prefix, total_lines, versioned):
0.40.13 by Parth Malwankar
added tests for -R and -i
39
        text=''
40
        for i in range(total_lines):
41
            text += line_prefix + str(i+1) + "\n"
42
0.40.12 by Parth Malwankar
added test for versioned file
43
        open(path, 'w').write(text)
44
        if versioned:
45
            self.run_bzr(['add', path])
0.40.25 by Parth Malwankar
added test case for multilevel dir.
46
            self.run_bzr(['ci', '-m', '"' + path + '"'])
0.40.12 by Parth Malwankar
added test for versioned file
47
0.41.14 by Parth Malwankar
updated help and added test.
48
    def _update_file(self, path, text, checkin=True):
0.40.34 by Parth Malwankar
added tests for single revision history search
49
        """append text to file 'path' and check it in"""
50
        open(path, 'a').write(text)
0.41.14 by Parth Malwankar
updated help and added test.
51
        if checkin:
0.41.15 by Parth Malwankar
bzr-grep now searches working copy by default.
52
            self.run_bzr(['ci', path, '-m', '"' + path + '"'])
0.40.34 by Parth Malwankar
added tests for single revision history search
53
0.40.37 by Parth Malwankar
grep now accepts rev range
54
    def _mk_unknown_file(self, path, line_prefix='line', total_lines=10):
0.40.26 by Parth Malwankar
test passing for multiple matches
55
        self._mk_file(path, line_prefix, total_lines, versioned=False)
0.40.13 by Parth Malwankar
added tests for -R and -i
56
57
    def _mk_versioned_file(self, path, line_prefix='line', total_lines=10):
0.40.26 by Parth Malwankar
test passing for multiple matches
58
        self._mk_file(path, line_prefix, total_lines, versioned=True)
0.40.13 by Parth Malwankar
added tests for -R and -i
59
60
    def _mk_dir(self, path, versioned):
61
        os.mkdir(path)
62
        if versioned:
63
            self.run_bzr(['add', path])
0.40.26 by Parth Malwankar
test passing for multiple matches
64
            self.run_bzr(['ci', '-m', '"' + path + '"'])
0.40.13 by Parth Malwankar
added tests for -R and -i
65
0.40.37 by Parth Malwankar
grep now accepts rev range
66
    def _mk_unknown_dir(self, path):
0.40.26 by Parth Malwankar
test passing for multiple matches
67
        self._mk_dir(path, versioned=False)
0.40.13 by Parth Malwankar
added tests for -R and -i
68
69
    def _mk_versioned_dir(self, path):
70
        self._mk_dir(path, versioned=True)
71
0.40.131 by Parth Malwankar
bzr grep now allows grepping with -r even when no tree exists.
72
0.43.11 by Parth Malwankar
test cases for colored results.
73
class TestGrep(GrepTestBase):
74
    """Core functional tests for grep."""
75
0.40.37 by Parth Malwankar
grep now accepts rev range
76
    def test_basic_unknown_file(self):
0.41.13 by Parth Malwankar
working tree grep is now working
77
        """Search for pattern in specfic file.
78
79
        If specified file is unknown, grep it anyway."""
0.40.11 by Parth Malwankar
added basic test
80
        wd = 'foobar0'
81
        self.make_branch_and_tree(wd)
82
        os.chdir(wd)
0.40.37 by Parth Malwankar
grep now accepts rev range
83
        self._mk_unknown_file('file0.txt')
0.41.18 by Parth Malwankar
updated test to ensure that unknown files are skipped by default.
84
0.40.11 by Parth Malwankar
added basic test
85
        out, err = self.run_bzr(['grep', 'line1', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
86
        self.assertContainsRe(out, "file0.txt:line1", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
87
        self.assertEqual(len(out.splitlines()), 2) # finds line1 and line10
0.40.45 by Parth Malwankar
fixed case where only revno:0 is present. added test.
88
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
89
        out, err = self.run_bzr(['grep', 'line\d+', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
90
        self.assertContainsRe(out, "file0.txt:line1", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
91
        self.assertEqual(len(out.splitlines()), 10)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
92
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
93
        # unknown file is not grepped unless explicitely specified
0.41.18 by Parth Malwankar
updated test to ensure that unknown files are skipped by default.
94
        out, err = self.run_bzr(['grep', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
95
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
96
        self.assertEqual(len(out.splitlines()), 0)
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
97
98
        # unknown file is not grepped unless explicitely specified
99
        out, err = self.run_bzr(['grep', 'line1$'])
100
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
101
        self.assertEqual(len(out.splitlines()), 0)
0.41.18 by Parth Malwankar
updated test to ensure that unknown files are skipped by default.
102
0.41.23 by Parth Malwankar
added tests for --include/exclude
103
    def test_ver_basic_file(self):
0.41.17 by Parth Malwankar
added tests.
104
        """(versioned) Search for pattern in specfic file.
105
        """
0.41.14 by Parth Malwankar
updated help and added test.
106
        wd = 'foobar0'
107
        self.make_branch_and_tree(wd)
108
        os.chdir(wd)
109
        self._mk_versioned_file('file0.txt')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
110
0.41.14 by Parth Malwankar
updated help and added test.
111
        out, err = self.run_bzr(['grep', '-r', '1', 'line1', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
112
        self.assertContainsRe(out, "file0.txt~1:line1", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
113
        self.assertEqual(len(out.splitlines()), 2) # finds line1 and line10
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
114
115
        out, err = self.run_bzr(['grep', '-r', '1', 'line[0-9]$', 'file0.txt'])
116
        self.assertContainsRe(out, "file0.txt~1:line1", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
117
        self.assertEqual(len(out.splitlines()), 9)
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
118
119
        # finds all the lines
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
120
        out, err = self.run_bzr(['grep', '-r', '1', 'line[0-9]', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
121
        self.assertContainsRe(out, "file0.txt~1:line1", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
122
        self.assertEqual(len(out.splitlines()), 10)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
123
0.41.17 by Parth Malwankar
added tests.
124
    def test_wtree_basic_file(self):
125
        """(wtree) Search for pattern in specfic file.
126
        """
0.40.12 by Parth Malwankar
added test for versioned file
127
        wd = 'foobar0'
128
        self.make_branch_and_tree(wd)
129
        os.chdir(wd)
0.40.13 by Parth Malwankar
added tests for -R and -i
130
        self._mk_versioned_file('file0.txt')
0.41.14 by Parth Malwankar
updated help and added test.
131
        self._update_file('file0.txt', 'ABC\n', checkin=False)
132
133
        out, err = self.run_bzr(['grep', 'ABC', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
134
        self.assertContainsRe(out, "file0.txt:ABC", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
135
        self.assertEqual(len(out.splitlines()), 1)
0.41.14 by Parth Malwankar
updated help and added test.
136
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
137
        out, err = self.run_bzr(['grep', '[A-Z]{3}', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
138
        self.assertContainsRe(out, "file0.txt:ABC", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
139
        self.assertEqual(len(out.splitlines()), 1)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
140
0.41.14 by Parth Malwankar
updated help and added test.
141
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'ABC', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
142
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
143
        self.assertEqual(len(out.splitlines()), 0)
0.40.12 by Parth Malwankar
added test for versioned file
144
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
145
        out, err = self.run_bzr(['grep', '-r', 'last:1', '[A-Z]{3}', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
146
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
147
        self.assertEqual(len(out.splitlines()), 0)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
148
0.41.23 by Parth Malwankar
added tests for --include/exclude
149
    def test_ver_basic_include(self):
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
150
        """(versioned) Ensure that -I flag is respected.
0.41.22 by Parth Malwankar
added basic --exclude/include tests
151
        """
152
        wd = 'foobar0'
153
        self.make_branch_and_tree(wd)
154
        os.chdir(wd)
155
        self._mk_versioned_file('file0.aa')
156
        self._mk_versioned_file('file0.bb')
157
        self._mk_versioned_file('file0.cc')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
158
0.41.22 by Parth Malwankar
added basic --exclude/include tests
159
        out, err = self.run_bzr(['grep', '-r', 'last:1',
160
            '--include', '*.aa', '--include', '*.bb', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
161
        self.assertContainsRe(out, "file0.aa~.:line1", flags=TestGrep._reflags)
162
        self.assertContainsRe(out, "file0.bb~.:line1", flags=TestGrep._reflags)
163
        self.assertNotContainsRe(out, "file0.cc", flags=TestGrep._reflags)
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
164
        # two lines each (line1, line10) from file0.aa and file0.bb
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
165
        self.assertEqual(len(out.splitlines()), 4)
0.41.22 by Parth Malwankar
added basic --exclude/include tests
166
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
167
        out, err = self.run_bzr(['grep', '-r', 'last:1',
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
168
            '--include', '*.aa', '--include', '*.bb', 'line1$'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
169
        self.assertContainsRe(out, "file0.aa~.:line1", flags=TestGrep._reflags)
170
        self.assertContainsRe(out, "file0.bb~.:line1", flags=TestGrep._reflags)
171
        self.assertNotContainsRe(out, "file0.cc", flags=TestGrep._reflags)
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
172
        # one lines each (line1) from file0.aa and file0.bb
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
173
        self.assertEqual(len(out.splitlines()), 2)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
174
175
        out, err = self.run_bzr(['grep', '-r', 'last:1',
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
176
            '-I', '*.aa', '-I', '*.bb', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
177
        self.assertContainsRe(out, "file0.aa~.:line1", flags=TestGrep._reflags)
178
        self.assertContainsRe(out, "file0.bb~.:line1", flags=TestGrep._reflags)
179
        self.assertNotContainsRe(out, "file0.cc", flags=TestGrep._reflags)
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
180
        # two lines each (line1, line10) from file0.aa and file0.bb
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
181
        self.assertEqual(len(out.splitlines()), 4)
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
182
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
183
        out, err = self.run_bzr(['grep', '-r', 'last:1',
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
184
            '-I', '*.aa', '-I', '*.bb', 'line1$'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
185
        self.assertContainsRe(out, "file0.aa~.:line1", flags=TestGrep._reflags)
186
        self.assertContainsRe(out, "file0.bb~.:line1", flags=TestGrep._reflags)
187
        self.assertNotContainsRe(out, "file0.cc", flags=TestGrep._reflags)
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
188
        # one lines each (line1) from file0.aa and file0.bb
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
189
        self.assertEqual(len(out.splitlines()), 2)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
190
0.41.22 by Parth Malwankar
added basic --exclude/include tests
191
    def test_wtree_basic_include(self):
192
        """(wtree) Ensure that --include flag is respected.
193
        """
194
        wd = 'foobar0'
195
        self.make_branch_and_tree(wd)
196
        os.chdir(wd)
197
        self._mk_versioned_file('file0.aa')
198
        self._mk_versioned_file('file0.bb')
199
        self._mk_versioned_file('file0.cc')
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
200
0.41.22 by Parth Malwankar
added basic --exclude/include tests
201
        out, err = self.run_bzr(['grep', '--include', '*.aa',
202
            '--include', '*.bb', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
203
        self.assertContainsRe(out, "file0.aa:line1", flags=TestGrep._reflags)
204
        self.assertContainsRe(out, "file0.bb:line1", flags=TestGrep._reflags)
205
        self.assertNotContainsRe(out, "file0.cc", flags=TestGrep._reflags)
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
206
        # two lines each (line1, line10) from file0.aa and file0.bb
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
207
        self.assertEqual(len(out.splitlines()), 4)
0.41.22 by Parth Malwankar
added basic --exclude/include tests
208
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
209
        out, err = self.run_bzr(['grep', '--include', '*.aa',
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
210
            '--include', '*.bb', 'line1$'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
211
        self.assertContainsRe(out, "file0.aa:line1", flags=TestGrep._reflags)
212
        self.assertContainsRe(out, "file0.bb:line1", flags=TestGrep._reflags)
213
        self.assertNotContainsRe(out, "file0.cc", flags=TestGrep._reflags)
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
214
        # one line each (line1) from file0.aa and file0.bb
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
215
        self.assertEqual(len(out.splitlines()), 2)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
216
0.41.23 by Parth Malwankar
added tests for --include/exclude
217
    def test_ver_basic_exclude(self):
0.41.22 by Parth Malwankar
added basic --exclude/include tests
218
        """(versioned) Ensure that --exclude flag is respected.
219
        """
220
        wd = 'foobar0'
221
        self.make_branch_and_tree(wd)
222
        os.chdir(wd)
223
        self._mk_versioned_file('file0.aa')
224
        self._mk_versioned_file('file0.bb')
225
        self._mk_versioned_file('file0.cc')
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
226
0.41.22 by Parth Malwankar
added basic --exclude/include tests
227
        out, err = self.run_bzr(['grep', '-r', 'last:1',
228
            '--exclude', '*.cc', 'line1'])
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
229
        self.assertContainsRe(out, "file0.aa~.:line1$", flags=TestGrep._reflags)
230
        self.assertContainsRe(out, "file0.bb~.:line1$", flags=TestGrep._reflags)
231
        self.assertContainsRe(out, "file0.aa~.:line10", flags=TestGrep._reflags)
232
        self.assertContainsRe(out, "file0.bb~.:line10", flags=TestGrep._reflags)
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
233
        self.assertNotContainsRe(out, "file0.cc", flags=TestGrep._reflags)
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
234
        # two lines each (line1, line10) from file0.aa and file0.bb
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
235
        self.assertEqual(len(out.splitlines()), 4)
0.41.22 by Parth Malwankar
added basic --exclude/include tests
236
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
237
        out, err = self.run_bzr(['grep', '-r', 'last:1',
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
238
            '--exclude', '*.cc', 'line1$'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
239
        self.assertContainsRe(out, "file0.aa~.:line1", flags=TestGrep._reflags)
240
        self.assertContainsRe(out, "file0.bb~.:line1", flags=TestGrep._reflags)
241
        self.assertNotContainsRe(out, "file0.cc", flags=TestGrep._reflags)
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
242
        # one line each (line1) from file0.aa and file0.bb
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
243
        self.assertEqual(len(out.splitlines()), 2)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
244
245
        out, err = self.run_bzr(['grep', '-r', 'last:1',
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
246
            '-X', '*.cc', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
247
        self.assertContainsRe(out, "file0.aa~.:line1", flags=TestGrep._reflags)
248
        self.assertContainsRe(out, "file0.bb~.:line1", flags=TestGrep._reflags)
249
        self.assertNotContainsRe(out, "file0.cc", flags=TestGrep._reflags)
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
250
        # two lines each (line1, line10) from file0.aa and file0.bb
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
251
        self.assertEqual(len(out.splitlines()), 4)
0.40.58 by Parth Malwankar
-I and -X are shortnames for --include and --exclude
252
0.41.22 by Parth Malwankar
added basic --exclude/include tests
253
    def test_wtree_basic_exclude(self):
254
        """(wtree) Ensure that --exclude flag is respected.
255
        """
256
        wd = 'foobar0'
257
        self.make_branch_and_tree(wd)
258
        os.chdir(wd)
259
        self._mk_versioned_file('file0.aa')
260
        self._mk_versioned_file('file0.bb')
261
        self._mk_versioned_file('file0.cc')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
262
0.41.22 by Parth Malwankar
added basic --exclude/include tests
263
        out, err = self.run_bzr(['grep', '--exclude', '*.cc', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
264
        self.assertContainsRe(out, "file0.aa:line1", flags=TestGrep._reflags)
265
        self.assertContainsRe(out, "file0.bb:line1", flags=TestGrep._reflags)
266
        self.assertNotContainsRe(out, "file0.cc", flags=TestGrep._reflags)
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
267
        # two lines each (line1, line10) from file0.aa and file0.bb
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
268
        self.assertEqual(len(out.splitlines()), 4)
0.41.22 by Parth Malwankar
added basic --exclude/include tests
269
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
270
        out, err = self.run_bzr(['grep', '--exclude', '*.cc', 'lin.1$'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
271
        self.assertContainsRe(out, "file0.aa:line1", flags=TestGrep._reflags)
272
        self.assertContainsRe(out, "file0.bb:line1", flags=TestGrep._reflags)
273
        self.assertNotContainsRe(out, "file0.cc", flags=TestGrep._reflags)
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
274
        # one line each (line1) from file0.aa and file0.bb
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
275
        self.assertEqual(len(out.splitlines()), 2)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
276
0.41.23 by Parth Malwankar
added tests for --include/exclude
277
    def test_ver_multiple_files(self):
0.41.17 by Parth Malwankar
added tests.
278
        """(versioned) Search for pattern in multiple files.
279
        """
0.41.15 by Parth Malwankar
bzr-grep now searches working copy by default.
280
        wd = 'foobar0'
281
        self.make_branch_and_tree(wd)
282
        os.chdir(wd)
283
        self._mk_versioned_file('file0.txt', total_lines=2)
284
        self._mk_versioned_file('file1.txt', total_lines=2)
285
        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.
286
0.40.103 by Parth Malwankar
made some tests more accurate by checking number of output lines
287
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line[1-2]$'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
288
        self.assertContainsRe(out, "file0.txt~.:line1", flags=TestGrep._reflags)
289
        self.assertContainsRe(out, "file0.txt~.:line2", flags=TestGrep._reflags)
290
        self.assertContainsRe(out, "file1.txt~.:line1", flags=TestGrep._reflags)
291
        self.assertContainsRe(out, "file1.txt~.:line2", flags=TestGrep._reflags)
292
        self.assertContainsRe(out, "file2.txt~.:line1", flags=TestGrep._reflags)
293
        self.assertContainsRe(out, "file2.txt~.:line2", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
294
        self.assertEqual(len(out.splitlines()), 6)
0.41.15 by Parth Malwankar
bzr-grep now searches working copy by default.
295
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
296
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
297
        self.assertContainsRe(out, "file0.txt~.:line1", flags=TestGrep._reflags)
298
        self.assertContainsRe(out, "file0.txt~.:line2", flags=TestGrep._reflags)
299
        self.assertContainsRe(out, "file1.txt~.:line1", flags=TestGrep._reflags)
300
        self.assertContainsRe(out, "file1.txt~.:line2", flags=TestGrep._reflags)
301
        self.assertContainsRe(out, "file2.txt~.:line1", flags=TestGrep._reflags)
302
        self.assertContainsRe(out, "file2.txt~.:line2", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
303
        self.assertEqual(len(out.splitlines()), 6)
0.41.15 by Parth Malwankar
bzr-grep now searches working copy by default.
304
305
    def test_multiple_wtree_files(self):
0.41.17 by Parth Malwankar
added tests.
306
        """(wtree) Search for pattern in multiple files in working tree.
307
        """
0.41.15 by Parth Malwankar
bzr-grep now searches working copy by default.
308
        wd = 'foobar0'
309
        self.make_branch_and_tree(wd)
310
        os.chdir(wd)
311
        self._mk_versioned_file('file0.txt', total_lines=2)
312
        self._mk_versioned_file('file1.txt', total_lines=2)
313
        self._mk_versioned_file('file2.txt', total_lines=2)
314
        self._update_file('file0.txt', 'HELLO\n', checkin=False)
315
        self._update_file('file1.txt', 'HELLO\n', checkin=True)
316
        self._update_file('file2.txt', 'HELLO\n', checkin=False)
317
318
        out, err = self.run_bzr(['grep', 'HELLO',
319
            'file0.txt', 'file1.txt', 'file2.txt'])
320
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
321
        self.assertContainsRe(out, "file0.txt:HELLO", flags=TestGrep._reflags)
322
        self.assertContainsRe(out, "file1.txt:HELLO", flags=TestGrep._reflags)
323
        self.assertContainsRe(out, "file2.txt:HELLO", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
324
        self.assertEqual(len(out.splitlines()), 3)
0.41.15 by Parth Malwankar
bzr-grep now searches working copy by default.
325
326
        out, err = self.run_bzr(['grep', 'HELLO', '-r', 'last:1',
327
            'file0.txt', 'file1.txt', 'file2.txt'])
328
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
329
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
330
        self.assertContainsRe(out, "file1.txt~.:HELLO", flags=TestGrep._reflags)
331
        self.assertNotContainsRe(out, "file2.txt", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
332
        self.assertEqual(len(out.splitlines()), 1)
0.40.25 by Parth Malwankar
added test case for multilevel dir.
333
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
334
        out, err = self.run_bzr(['grep', 'HE..O',
335
            'file0.txt', 'file1.txt', 'file2.txt'])
336
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
337
        self.assertContainsRe(out, "file0.txt:HELLO", flags=TestGrep._reflags)
338
        self.assertContainsRe(out, "file1.txt:HELLO", flags=TestGrep._reflags)
339
        self.assertContainsRe(out, "file2.txt:HELLO", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
340
        self.assertEqual(len(out.splitlines()), 3)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
341
342
        out, err = self.run_bzr(['grep', 'HE..O', '-r', 'last:1',
343
            'file0.txt', 'file1.txt', 'file2.txt'])
344
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
345
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
346
        self.assertContainsRe(out, "file1.txt~.:HELLO", flags=TestGrep._reflags)
347
        self.assertNotContainsRe(out, "file2.txt", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
348
        self.assertEqual(len(out.splitlines()), 1)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
349
0.41.23 by Parth Malwankar
added tests for --include/exclude
350
    def test_ver_null_option(self):
0.41.17 by Parth Malwankar
added tests.
351
        """(versioned) --null option should use NUL instead of newline.
352
        """
353
        wd = 'foobar0'
354
        self.make_branch_and_tree(wd)
355
        os.chdir(wd)
356
        self._mk_versioned_file('file0.txt', total_lines=3)
357
0.40.71 by Parth Malwankar
fixed test_ver_null_option to pass on windows.
358
        nref = ud.normalize(u'NFC', u"file0.txt~1:line1\0file0.txt~1:line2\0file0.txt~1:line3\0")
359
0.41.17 by Parth Malwankar
added tests.
360
        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.
361
        nout = ud.normalize(u'NFC', out.decode('utf-8', 'ignore'))
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
362
        self.assertEqual(nout, nref)
363
        self.assertEqual(len(out.splitlines()), 1)
0.41.17 by Parth Malwankar
added tests.
364
365
        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.
366
        nout = ud.normalize(u'NFC', out.decode('utf-8', 'ignore'))
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
367
        self.assertEqual(nout, nref)
368
        self.assertEqual(len(out.splitlines()), 1)
0.41.17 by Parth Malwankar
added tests.
369
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
370
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--null', 'line'])
371
        nout = ud.normalize(u'NFC', out.decode('utf-8', 'ignore'))
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
372
        self.assertEqual(nout, nref)
373
        self.assertEqual(len(out.splitlines()), 1)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
374
0.41.17 by Parth Malwankar
added tests.
375
    def test_wtree_null_option(self):
376
        """(wtree) --null option should use NUL instead of newline.
377
        """
0.40.27 by Parth Malwankar
added test for null option
378
        wd = 'foobar0'
379
        self.make_branch_and_tree(wd)
380
        os.chdir(wd)
381
        self._mk_versioned_file('file0.txt', total_lines=3)
382
383
        out, err = self.run_bzr(['grep', '--null', 'line[1-3]'])
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
384
        self.assertEqual(out, "file0.txt:line1\0file0.txt:line2\0file0.txt:line3\0")
385
        self.assertEqual(len(out.splitlines()), 1)
0.40.27 by Parth Malwankar
added test for null option
386
387
        out, err = self.run_bzr(['grep', '-Z', 'line[1-3]'])
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
388
        self.assertEqual(out, "file0.txt:line1\0file0.txt:line2\0file0.txt:line3\0")
389
        self.assertEqual(len(out.splitlines()), 1)
0.40.27 by Parth Malwankar
added test for null option
390
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
391
        out, err = self.run_bzr(['grep', '-Z', 'line'])
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
392
        self.assertEqual(out, "file0.txt:line1\0file0.txt:line2\0file0.txt:line3\0")
393
        self.assertEqual(len(out.splitlines()), 1)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
394
0.41.6 by Parth Malwankar
renamed --recurse/--no-recurse => --recursive/--no-recursive
395
    def test_versioned_file_in_dir_no_recursive(self):
0.41.17 by Parth Malwankar
added tests.
396
        """(versioned) Should not recurse with --no-recursive"""
397
        wd = 'foobar0'
398
        self.make_branch_and_tree(wd)
399
        os.chdir(wd)
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
400
        self._mk_versioned_file('fileX.txt', line_prefix='lin')
0.41.17 by Parth Malwankar
added tests.
401
        self._mk_versioned_dir('dir0')
402
        self._mk_versioned_file('dir0/file0.txt')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
403
0.41.17 by Parth Malwankar
added tests.
404
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--no-recursive', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
405
        self.assertNotContainsRe(out, "file0.txt~.:line1", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
406
        self.assertEqual(len(out.splitlines()), 0)
0.41.17 by Parth Malwankar
added tests.
407
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
408
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--no-recursive', 'line1$'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
409
        self.assertNotContainsRe(out, "file0.txt~.:line1", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
410
        self.assertEqual(len(out.splitlines()), 0)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
411
0.41.17 by Parth Malwankar
added tests.
412
    def test_wtree_file_in_dir_no_recursive(self):
413
        """(wtree) Should not recurse with --no-recursive"""
0.40.13 by Parth Malwankar
added tests for -R and -i
414
        wd = 'foobar0'
415
        self.make_branch_and_tree(wd)
416
        os.chdir(wd)
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
417
        self._mk_versioned_file('fileX.txt', line_prefix='lin')
0.40.13 by Parth Malwankar
added tests for -R and -i
418
        self._mk_versioned_dir('dir0')
419
        self._mk_versioned_file('dir0/file0.txt')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
420
0.41.6 by Parth Malwankar
renamed --recurse/--no-recurse => --recursive/--no-recursive
421
        out, err = self.run_bzr(['grep', '--no-recursive', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
422
        self.assertNotContainsRe(out, "file0.txt:line1", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
423
        self.assertEqual(len(out.splitlines()), 0)
0.40.13 by Parth Malwankar
added tests for -R and -i
424
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
425
        out, err = self.run_bzr(['grep', '--no-recursive', 'lin.1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
426
        self.assertNotContainsRe(out, "file0.txt:line1", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
427
        self.assertEqual(len(out.splitlines()), 0)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
428
0.40.13 by Parth Malwankar
added tests for -R and -i
429
    def test_versioned_file_in_dir_recurse(self):
0.41.17 by Parth Malwankar
added tests.
430
        """(versioned) Should recurse by default.
431
        """
432
        wd = 'foobar0'
433
        self.make_branch_and_tree(wd)
434
        os.chdir(wd)
435
        self._mk_versioned_dir('dir0')
436
        self._mk_versioned_file('dir0/file0.txt')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
437
438
        out, err = self.run_bzr(['grep', '-r', '-1', '.i.e1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
439
        self.assertContainsRe(out, "^dir0/file0.txt~.:line1", flags=TestGrep._reflags)
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
440
        # find line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
441
        self.assertEqual(len(out.splitlines()), 2)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
442
0.41.17 by Parth Malwankar
added tests.
443
        out, err = self.run_bzr(['grep', '-r', '-1', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
444
        self.assertContainsRe(out, "^dir0/file0.txt~.:line1", flags=TestGrep._reflags)
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
445
        # find line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
446
        self.assertEqual(len(out.splitlines()), 2)
0.41.17 by Parth Malwankar
added tests.
447
448
    def test_wtree_file_in_dir_recurse(self):
449
        """(wtree) Should recurse by default.
450
        """
0.40.13 by Parth Malwankar
added tests for -R and -i
451
        wd = 'foobar0'
452
        self.make_branch_and_tree(wd)
453
        os.chdir(wd)
454
        self._mk_versioned_dir('dir0')
455
        self._mk_versioned_file('dir0/file0.txt')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
456
0.41.4 by Parth Malwankar
--recurse is default.
457
        out, err = self.run_bzr(['grep', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
458
        self.assertContainsRe(out, "^dir0/file0.txt:line1", flags=TestGrep._reflags)
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
459
        # find line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
460
        self.assertEqual(len(out.splitlines()), 2)
0.40.23 by Parth Malwankar
added test case for search while inside dir.
461
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
462
        out, err = self.run_bzr(['grep', 'lin.1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
463
        self.assertContainsRe(out, "^dir0/file0.txt:line1", flags=TestGrep._reflags)
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
464
        # find line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
465
        self.assertEqual(len(out.splitlines()), 2)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
466
0.40.23 by Parth Malwankar
added test case for search while inside dir.
467
    def test_versioned_file_within_dir(self):
0.41.17 by Parth Malwankar
added tests.
468
        """(versioned) Search for pattern while in nested dir.
469
        """
470
        wd = 'foobar0'
471
        self.make_branch_and_tree(wd)
472
        os.chdir(wd)
473
        self._mk_versioned_dir('dir0')
474
        self._mk_versioned_file('dir0/file0.txt')
475
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
476
0.41.17 by Parth Malwankar
added tests.
477
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
478
        self.assertContainsRe(out, "^file0.txt~.:line1", flags=TestGrep._reflags)
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
479
        # finds line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
480
        self.assertEqual(len(out.splitlines()), 2)
0.41.17 by Parth Malwankar
added tests.
481
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
482
        out, err = self.run_bzr(['grep', '-r', 'last:1', '.i.e1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
483
        self.assertContainsRe(out, "^file0.txt~.:line1", flags=TestGrep._reflags)
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
484
        # finds line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
485
        self.assertEqual(len(out.splitlines()), 2)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
486
0.41.23 by Parth Malwankar
added tests for --include/exclude
487
    def test_versioned_include_file_within_dir(self):
488
        """(versioned) Ensure --include is respected with file within dir.
489
        """
490
        wd = 'foobar0'
491
        self.make_branch_and_tree(wd)
492
        os.chdir(wd)
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
493
        self._mk_versioned_dir('dir0')                  # revno 1
494
        self._mk_versioned_file('dir0/file0.txt')       # revno 2
495
        self._mk_versioned_file('dir0/file1.aa')        # revno 3
496
        self._update_file('dir0/file1.aa', 'hello\n')   # revno 4
497
        self._update_file('dir0/file0.txt', 'hello\n')  # revno 5
0.41.23 by Parth Malwankar
added tests for --include/exclude
498
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
499
0.41.23 by Parth Malwankar
added tests for --include/exclude
500
        out, err = self.run_bzr(['grep', '-r', 'last:1',
501
            '--include', '*.aa', 'line1'])
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
502
        self.assertContainsRe(out, "^file1.aa~5:line1$", flags=TestGrep._reflags)
503
        self.assertContainsRe(out, "^file1.aa~5:line10$", flags=TestGrep._reflags)
504
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
505
        # finds line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
506
        self.assertEqual(len(out.splitlines()), 2)
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
507
508
        out, err = self.run_bzr(['grep', '-r', 'last:2..last:1',
509
            '--include', '*.aa', 'line1'])
510
        self.assertContainsRe(out, "^file1.aa~4:line1$", flags=TestGrep._reflags)
511
        self.assertContainsRe(out, "^file1.aa~4:line10$", flags=TestGrep._reflags)
512
        self.assertContainsRe(out, "^file1.aa~5:line1$", flags=TestGrep._reflags)
513
        self.assertContainsRe(out, "^file1.aa~5:line10$", flags=TestGrep._reflags)
514
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
515
        # finds line1 and line10 over two revisions
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
516
        self.assertEqual(len(out.splitlines()), 4)
0.41.23 by Parth Malwankar
added tests for --include/exclude
517
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
518
        out, err = self.run_bzr(['grep', '-r', 'last:1',
519
            '--include', '*.aa', 'lin.1'])
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
520
        self.assertContainsRe(out, "^file1.aa~5:line1$", flags=TestGrep._reflags)
521
        self.assertContainsRe(out, "^file1.aa~5:line10$", flags=TestGrep._reflags)
522
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
523
        # finds line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
524
        self.assertEqual(len(out.splitlines()), 2)
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
525
526
        out, err = self.run_bzr(['grep', '-r', 'last:3..last:1',
527
            '--include', '*.aa', 'lin.1'])
528
        self.assertContainsRe(out, "^file1.aa~3:line1$", flags=TestGrep._reflags)
529
        self.assertContainsRe(out, "^file1.aa~4:line1$", flags=TestGrep._reflags)
530
        self.assertContainsRe(out, "^file1.aa~5:line1$", flags=TestGrep._reflags)
531
        self.assertContainsRe(out, "^file1.aa~3:line10$", flags=TestGrep._reflags)
532
        self.assertContainsRe(out, "^file1.aa~4:line10$", flags=TestGrep._reflags)
533
        self.assertContainsRe(out, "^file1.aa~5:line10$", flags=TestGrep._reflags)
534
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
535
        # finds line1 and line10 over 3 revisions
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
536
        self.assertEqual(len(out.splitlines()), 6)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
537
0.41.23 by Parth Malwankar
added tests for --include/exclude
538
    def test_versioned_exclude_file_within_dir(self):
539
        """(versioned) Ensure --exclude is respected with file within dir.
540
        """
541
        wd = 'foobar0'
542
        self.make_branch_and_tree(wd)
543
        os.chdir(wd)
544
        self._mk_versioned_dir('dir0')
545
        self._mk_versioned_file('dir0/file0.txt')
546
        self._mk_versioned_file('dir0/file1.aa')
547
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
548
0.41.23 by Parth Malwankar
added tests for --include/exclude
549
        out, err = self.run_bzr(['grep', '-r', 'last:1',
550
            '--exclude', '*.txt', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
551
        self.assertContainsRe(out, "^file1.aa~.:line1", flags=TestGrep._reflags)
552
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
553
        # finds line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
554
        self.assertEqual(len(out.splitlines()), 2)
0.41.23 by Parth Malwankar
added tests for --include/exclude
555
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
556
        out, err = self.run_bzr(['grep', '-r', 'last:1',
557
            '--exclude', '*.txt', 'l[a-z]ne1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
558
        self.assertContainsRe(out, "^file1.aa~.:line1", flags=TestGrep._reflags)
559
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
560
        # finds line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
561
        self.assertEqual(len(out.splitlines()), 2)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
562
0.41.17 by Parth Malwankar
added tests.
563
    def test_wtree_file_within_dir(self):
564
        """(wtree) Search for pattern while in nested dir.
565
        """
0.40.23 by Parth Malwankar
added test case for search while inside dir.
566
        wd = 'foobar0'
567
        self.make_branch_and_tree(wd)
568
        os.chdir(wd)
569
        self._mk_versioned_dir('dir0')
570
        self._mk_versioned_file('dir0/file0.txt')
571
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
572
0.40.23 by Parth Malwankar
added test case for search while inside dir.
573
        out, err = self.run_bzr(['grep', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
574
        self.assertContainsRe(out, "^file0.txt:line1", flags=TestGrep._reflags)
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
575
        # finds line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
576
        self.assertEqual(len(out.splitlines()), 2)
0.40.13 by Parth Malwankar
added tests for -R and -i
577
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
578
        out, err = self.run_bzr(['grep', 'l[aeiou]ne1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
579
        self.assertContainsRe(out, "^file0.txt:line1", flags=TestGrep._reflags)
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
580
        # finds line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
581
        self.assertEqual(len(out.splitlines()), 2)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
582
0.41.23 by Parth Malwankar
added tests for --include/exclude
583
    def test_wtree_include_file_within_dir(self):
584
        """(wtree) Ensure --include is respected with file within dir.
585
        """
586
        wd = 'foobar0'
587
        self.make_branch_and_tree(wd)
588
        os.chdir(wd)
589
        self._mk_versioned_dir('dir0')
590
        self._mk_versioned_file('dir0/file0.txt')
591
        self._mk_versioned_file('dir0/file1.aa')
592
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
593
0.41.23 by Parth Malwankar
added tests for --include/exclude
594
        out, err = self.run_bzr(['grep', '--include', '*.aa', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
595
        self.assertContainsRe(out, "^file1.aa:line1", flags=TestGrep._reflags)
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
596
        # finds line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
597
        self.assertEqual(len(out.splitlines()), 2)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
598
599
        out, err = self.run_bzr(['grep', '--include', '*.aa', 'l[ixn]ne1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
600
        self.assertContainsRe(out, "^file1.aa:line1", flags=TestGrep._reflags)
601
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.104 by Parth Malwankar
made more tests more specific for accurate results.
602
        # finds line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
603
        self.assertEqual(len(out.splitlines()), 2)
0.41.23 by Parth Malwankar
added tests for --include/exclude
604
605
    def test_wtree_exclude_file_within_dir(self):
606
        """(wtree) Ensure --exclude is respected with file within dir.
607
        """
608
        wd = 'foobar0'
609
        self.make_branch_and_tree(wd)
610
        os.chdir(wd)
611
        self._mk_versioned_dir('dir0')
612
        self._mk_versioned_file('dir0/file0.txt')
613
        self._mk_versioned_file('dir0/file1.aa')
614
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
615
616
        out, err = self.run_bzr(['grep', '--exclude', '*.txt', 'li.e1'])
0.40.105 by Parth Malwankar
fixed bug in ordering of user provided versions.
617
        self.assertContainsRe(out, "^file1.aa:line1$", flags=TestGrep._reflags)
618
        self.assertContainsRe(out, "^file1.aa:line10$", flags=TestGrep._reflags)
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
619
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.105 by Parth Malwankar
fixed bug in ordering of user provided versions.
620
        # finds line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
621
        self.assertEqual(len(out.splitlines()), 2)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
622
0.41.23 by Parth Malwankar
added tests for --include/exclude
623
        out, err = self.run_bzr(['grep', '--exclude', '*.txt', 'line1'])
0.40.105 by Parth Malwankar
fixed bug in ordering of user provided versions.
624
        self.assertContainsRe(out, "^file1.aa:line1$", flags=TestGrep._reflags)
625
        self.assertContainsRe(out, "^file1.aa:line10$", flags=TestGrep._reflags)
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
626
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.105 by Parth Malwankar
fixed bug in ordering of user provided versions.
627
        # finds line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
628
        self.assertEqual(len(out.splitlines()), 2)
0.41.23 by Parth Malwankar
added tests for --include/exclude
629
630
    def test_versioned_include_from_outside_dir(self):
631
        """(versioned) Ensure --include is respected during recursive search.
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.aa')
639
640
        self._mk_versioned_dir('dir1')
641
        self._mk_versioned_file('dir1/file1.bb')
642
643
        self._mk_versioned_dir('dir2')
644
        self._mk_versioned_file('dir2/file2.cc')
645
646
        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.
647
            '--include', '*.aa', '--include', '*.bb', 'l..e1'])
0.40.105 by Parth Malwankar
fixed bug in ordering of user provided versions.
648
        self.assertContainsRe(out, "^dir0/file0.aa~.:line1$", flags=TestGrep._reflags)
649
        self.assertContainsRe(out, "^dir1/file1.bb~.:line1$", flags=TestGrep._reflags)
650
        self.assertContainsRe(out, "^dir0/file0.aa~.:line10$", flags=TestGrep._reflags)
651
        self.assertContainsRe(out, "^dir1/file1.bb~.:line10$", flags=TestGrep._reflags)
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
652
        self.assertNotContainsRe(out, "file1.cc", flags=TestGrep._reflags)
0.40.105 by Parth Malwankar
fixed bug in ordering of user provided versions.
653
        # finds line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
654
        self.assertEqual(len(out.splitlines()), 4)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
655
656
        out, err = self.run_bzr(['grep', '-r', 'last:1',
0.41.23 by Parth Malwankar
added tests for --include/exclude
657
            '--include', '*.aa', '--include', '*.bb', 'line1'])
0.40.105 by Parth Malwankar
fixed bug in ordering of user provided versions.
658
        self.assertContainsRe(out, "^dir0/file0.aa~.:line1$", flags=TestGrep._reflags)
659
        self.assertContainsRe(out, "^dir1/file1.bb~.:line1$", flags=TestGrep._reflags)
660
        self.assertContainsRe(out, "^dir0/file0.aa~.:line10$", flags=TestGrep._reflags)
661
        self.assertContainsRe(out, "^dir1/file1.bb~.:line10$", flags=TestGrep._reflags)
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
662
        self.assertNotContainsRe(out, "file1.cc", flags=TestGrep._reflags)
0.40.105 by Parth Malwankar
fixed bug in ordering of user provided versions.
663
        # finds line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
664
        self.assertEqual(len(out.splitlines()), 4)
0.41.23 by Parth Malwankar
added tests for --include/exclude
665
666
    def test_wtree_include_from_outside_dir(self):
667
        """(wtree) Ensure --include is respected during recursive search.
668
        """
669
        wd = 'foobar0'
670
        self.make_branch_and_tree(wd)
671
        os.chdir(wd)
672
673
        self._mk_versioned_dir('dir0')
674
        self._mk_versioned_file('dir0/file0.aa')
675
676
        self._mk_versioned_dir('dir1')
677
        self._mk_versioned_file('dir1/file1.bb')
678
679
        self._mk_versioned_dir('dir2')
680
        self._mk_versioned_file('dir2/file2.cc')
681
682
        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.
683
            '--include', '*.bb', 'l.n.1'])
0.40.105 by Parth Malwankar
fixed bug in ordering of user provided versions.
684
        self.assertContainsRe(out, "^dir0/file0.aa:line1$", flags=TestGrep._reflags)
685
        self.assertContainsRe(out, "^dir1/file1.bb:line1$", flags=TestGrep._reflags)
686
        self.assertContainsRe(out, "^dir0/file0.aa:line10$", flags=TestGrep._reflags)
687
        self.assertContainsRe(out, "^dir1/file1.bb:line10$", flags=TestGrep._reflags)
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
688
        self.assertNotContainsRe(out, "file1.cc", flags=TestGrep._reflags)
0.40.105 by Parth Malwankar
fixed bug in ordering of user provided versions.
689
        # finds line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
690
        self.assertEqual(len(out.splitlines()), 4)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
691
692
        out, err = self.run_bzr(['grep', '--include', '*.aa',
0.41.23 by Parth Malwankar
added tests for --include/exclude
693
            '--include', '*.bb', 'line1'])
0.40.105 by Parth Malwankar
fixed bug in ordering of user provided versions.
694
        self.assertContainsRe(out, "^dir0/file0.aa:line1$", flags=TestGrep._reflags)
695
        self.assertContainsRe(out, "^dir1/file1.bb:line1$", flags=TestGrep._reflags)
696
        self.assertContainsRe(out, "^dir0/file0.aa:line10$", flags=TestGrep._reflags)
697
        self.assertContainsRe(out, "^dir1/file1.bb:line10$", flags=TestGrep._reflags)
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
698
        self.assertNotContainsRe(out, "file1.cc", flags=TestGrep._reflags)
0.40.105 by Parth Malwankar
fixed bug in ordering of user provided versions.
699
        # finds line1 and line10
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
700
        self.assertEqual(len(out.splitlines()), 4)
0.41.23 by Parth Malwankar
added tests for --include/exclude
701
702
    def test_versioned_exclude_from_outside_dir(self):
703
        """(versioned) Ensure --exclude is respected during recursive search.
704
        """
705
        wd = 'foobar0'
706
        self.make_branch_and_tree(wd)
707
        os.chdir(wd)
708
709
        self._mk_versioned_dir('dir0')
710
        self._mk_versioned_file('dir0/file0.aa')
711
712
        self._mk_versioned_dir('dir1')
713
        self._mk_versioned_file('dir1/file1.bb')
714
715
        self._mk_versioned_dir('dir2')
716
        self._mk_versioned_file('dir2/file2.cc')
717
718
        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.
719
            '--exclude', '*.cc', 'l..e1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
720
        self.assertContainsRe(out, "^dir0/file0.aa~.:line1", flags=TestGrep._reflags)
721
        self.assertContainsRe(out, "^dir1/file1.bb~.:line1", flags=TestGrep._reflags)
722
        self.assertNotContainsRe(out, "file1.cc", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
723
724
        out, err = self.run_bzr(['grep', '-r', 'last:1',
0.41.23 by Parth Malwankar
added tests for --include/exclude
725
            '--exclude', '*.cc', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
726
        self.assertContainsRe(out, "^dir0/file0.aa~.:line1", flags=TestGrep._reflags)
727
        self.assertContainsRe(out, "^dir1/file1.bb~.:line1", flags=TestGrep._reflags)
728
        self.assertNotContainsRe(out, "file1.cc", flags=TestGrep._reflags)
0.41.23 by Parth Malwankar
added tests for --include/exclude
729
730
    def test_wtree_exclude_from_outside_dir(self):
731
        """(wtree) Ensure --exclude is respected during recursive search.
732
        """
733
        wd = 'foobar0'
734
        self.make_branch_and_tree(wd)
735
        os.chdir(wd)
736
737
        self._mk_versioned_dir('dir0')
738
        self._mk_versioned_file('dir0/file0.aa')
739
740
        self._mk_versioned_dir('dir1')
741
        self._mk_versioned_file('dir1/file1.bb')
742
743
        self._mk_versioned_dir('dir2')
744
        self._mk_versioned_file('dir2/file2.cc')
745
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
746
        out, err = self.run_bzr(['grep', '--exclude', '*.cc', 'l[hijk]ne1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
747
        self.assertContainsRe(out, "^dir0/file0.aa:line1", flags=TestGrep._reflags)
748
        self.assertContainsRe(out, "^dir1/file1.bb:line1", flags=TestGrep._reflags)
749
        self.assertNotContainsRe(out, "file1.cc", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
750
0.41.23 by Parth Malwankar
added tests for --include/exclude
751
        out, err = self.run_bzr(['grep', '--exclude', '*.cc', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
752
        self.assertContainsRe(out, "^dir0/file0.aa:line1", flags=TestGrep._reflags)
753
        self.assertContainsRe(out, "^dir1/file1.bb:line1", flags=TestGrep._reflags)
754
        self.assertNotContainsRe(out, "file1.cc", flags=TestGrep._reflags)
0.41.23 by Parth Malwankar
added tests for --include/exclude
755
756
    def test_workingtree_files_from_outside_dir(self):
0.41.17 by Parth Malwankar
added tests.
757
        """(wtree) Grep for pattern with dirs passed as argument.
758
        """
0.40.41 by Parth Malwankar
added test for dir arg provided by user
759
        wd = 'foobar0'
760
        self.make_branch_and_tree(wd)
761
        os.chdir(wd)
762
763
        self._mk_versioned_dir('dir0')
764
        self._mk_versioned_file('dir0/file0.txt')
765
766
        self._mk_versioned_dir('dir1')
767
        self._mk_versioned_file('dir1/file1.txt')
768
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
769
        out, err = self.run_bzr(['grep', 'l[aeiou]ne1', 'dir0', 'dir1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
770
        self.assertContainsRe(out, "^dir0/file0.txt:line1", flags=TestGrep._reflags)
771
        self.assertContainsRe(out, "^dir1/file1.txt:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
772
0.40.41 by Parth Malwankar
added test for dir arg provided by user
773
        out, err = self.run_bzr(['grep', 'line1', 'dir0', 'dir1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
774
        self.assertContainsRe(out, "^dir0/file0.txt:line1", flags=TestGrep._reflags)
775
        self.assertContainsRe(out, "^dir1/file1.txt:line1", flags=TestGrep._reflags)
0.40.44 by Parth Malwankar
improved display of path when dir is given as argument
776
0.40.45 by Parth Malwankar
fixed case where only revno:0 is present. added test.
777
    def test_versioned_files_from_outside_dir(self):
0.41.17 by Parth Malwankar
added tests.
778
        """(versioned) Grep for pattern with dirs passed as argument.
779
        """
780
        wd = 'foobar0'
781
        self.make_branch_and_tree(wd)
782
        os.chdir(wd)
783
784
        self._mk_versioned_dir('dir0')
785
        self._mk_versioned_file('dir0/file0.txt')
786
787
        self._mk_versioned_dir('dir1')
788
        self._mk_versioned_file('dir1/file1.txt')
789
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
790
        out, err = self.run_bzr(['grep', '-r', 'last:1', '.ine1', 'dir0', 'dir1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
791
        self.assertContainsRe(out, "^dir0/file0.txt~.:line1", flags=TestGrep._reflags)
792
        self.assertContainsRe(out, "^dir1/file1.txt~.:line1", flags=TestGrep._reflags)
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', 'dir0', 'dir1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
795
        self.assertContainsRe(out, "^dir0/file0.txt~.:line1", flags=TestGrep._reflags)
796
        self.assertContainsRe(out, "^dir1/file1.txt~.:line1", flags=TestGrep._reflags)
0.41.17 by Parth Malwankar
added tests.
797
798
    def test_wtree_files_from_outside_dir(self):
799
        """(wtree) Grep for pattern with dirs passed as argument.
800
        """
0.40.45 by Parth Malwankar
fixed case where only revno:0 is present. added test.
801
        wd = 'foobar0'
802
        self.make_branch_and_tree(wd)
803
        os.chdir(wd)
804
805
        self._mk_versioned_dir('dir0')
806
        self._mk_versioned_file('dir0/file0.txt')
807
808
        self._mk_versioned_dir('dir1')
809
        self._mk_versioned_file('dir1/file1.txt')
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', 'li.e1', 'dir0', 'dir1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
812
        self.assertContainsRe(out, "^dir0/file0.txt:line1", flags=TestGrep._reflags)
813
        self.assertContainsRe(out, "^dir1/file1.txt:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
814
0.40.45 by Parth Malwankar
fixed case where only revno:0 is present. added test.
815
        out, err = self.run_bzr(['grep', 'line1', 'dir0', 'dir1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
816
        self.assertContainsRe(out, "^dir0/file0.txt:line1", flags=TestGrep._reflags)
817
        self.assertContainsRe(out, "^dir1/file1.txt:line1", flags=TestGrep._reflags)
0.40.44 by Parth Malwankar
improved display of path when dir is given as argument
818
819
    def test_versioned_files_from_outside_two_dirs(self):
0.41.17 by Parth Malwankar
added tests.
820
        """(versioned) Grep for pattern with two levels of nested dir.
821
        """
822
        wd = 'foobar0'
823
        self.make_branch_and_tree(wd)
824
        os.chdir(wd)
825
826
        self._mk_versioned_dir('dir0')
827
        self._mk_versioned_file('dir0/file0.txt')
828
829
        self._mk_versioned_dir('dir1')
830
        self._mk_versioned_file('dir1/file1.txt')
831
832
        self._mk_versioned_dir('dir0/dir00')
833
        self._mk_versioned_file('dir0/dir00/file0.txt')
834
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
835
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'l.ne1', 'dir0/dir00'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
836
        self.assertContainsRe(out, "^dir0/dir00/file0.txt~.:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
837
838
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'l.ne1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
839
        self.assertContainsRe(out, "^dir0/dir00/file0.txt~.:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
840
0.41.17 by Parth Malwankar
added tests.
841
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line1', 'dir0/dir00'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
842
        self.assertContainsRe(out, "^dir0/dir00/file0.txt~.:line1", flags=TestGrep._reflags)
0.41.17 by Parth Malwankar
added tests.
843
844
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
845
        self.assertContainsRe(out, "^dir0/dir00/file0.txt~.:line1", flags=TestGrep._reflags)
0.41.17 by Parth Malwankar
added tests.
846
847
    def test_wtree_files_from_outside_two_dirs(self):
848
        """(wtree) Grep for pattern with two levels of nested dir.
849
        """
0.40.44 by Parth Malwankar
improved display of path when dir is given as argument
850
        wd = 'foobar0'
851
        self.make_branch_and_tree(wd)
852
        os.chdir(wd)
853
854
        self._mk_versioned_dir('dir0')
855
        self._mk_versioned_file('dir0/file0.txt')
856
857
        self._mk_versioned_dir('dir1')
858
        self._mk_versioned_file('dir1/file1.txt')
859
860
        self._mk_versioned_dir('dir0/dir00')
861
        self._mk_versioned_file('dir0/dir00/file0.txt')
862
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
863
        out, err = self.run_bzr(['grep', 'lin.1', 'dir0/dir00'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
864
        self.assertContainsRe(out, "^dir0/dir00/file0.txt:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
865
866
        out, err = self.run_bzr(['grep', 'li.e1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
867
        self.assertContainsRe(out, "^dir0/dir00/file0.txt:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
868
0.40.44 by Parth Malwankar
improved display of path when dir is given as argument
869
        out, err = self.run_bzr(['grep', 'line1', 'dir0/dir00'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
870
        self.assertContainsRe(out, "^dir0/dir00/file0.txt:line1", flags=TestGrep._reflags)
0.40.44 by Parth Malwankar
improved display of path when dir is given as argument
871
0.41.4 by Parth Malwankar
--recurse is default.
872
        out, err = self.run_bzr(['grep', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
873
        self.assertContainsRe(out, "^dir0/dir00/file0.txt:line1", flags=TestGrep._reflags)
0.40.41 by Parth Malwankar
added test for dir arg provided by user
874
0.40.25 by Parth Malwankar
added test case for multilevel dir.
875
    def test_versioned_file_within_dir_two_levels(self):
0.41.17 by Parth Malwankar
added tests.
876
        """(versioned) Search for pattern while in nested dir (two levels).
877
        """
878
        wd = 'foobar0'
879
        self.make_branch_and_tree(wd)
880
        os.chdir(wd)
881
        self._mk_versioned_dir('dir0')
882
        self._mk_versioned_dir('dir0/dir1')
883
        self._mk_versioned_file('dir0/dir1/file0.txt')
884
        os.chdir('dir0')
885
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
886
        out, err = self.run_bzr(['grep', '-r', 'last:1', '.ine1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
887
        self.assertContainsRe(out, "^dir1/file0.txt~.:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
888
889
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--from-root', 'l.ne1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
890
        self.assertContainsRe(out, "^dir0/dir1/file0.txt~.:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
891
892
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--no-recursive', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
893
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
894
895
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'lin.1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
896
        self.assertContainsRe(out, "^dir1/file0.txt~.:line1", flags=TestGrep._reflags)
0.41.17 by Parth Malwankar
added tests.
897
898
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--from-root', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
899
        self.assertContainsRe(out, "^dir0/dir1/file0.txt~.:line1", flags=TestGrep._reflags)
0.41.17 by Parth Malwankar
added tests.
900
901
        out, err = self.run_bzr(['grep', '-r', 'last:1', '--no-recursive', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
902
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
903
        self.assertEqual(len(out.splitlines()), 0)
0.41.17 by Parth Malwankar
added tests.
904
905
    def test_wtree_file_within_dir_two_levels(self):
906
        """(wtree) Search for pattern while in nested dir (two levels).
907
        """
0.40.25 by Parth Malwankar
added test case for multilevel dir.
908
        wd = 'foobar0'
909
        self.make_branch_and_tree(wd)
910
        os.chdir(wd)
911
        self._mk_versioned_dir('dir0')
912
        self._mk_versioned_dir('dir0/dir1')
913
        self._mk_versioned_file('dir0/dir1/file0.txt')
914
        os.chdir('dir0')
0.41.4 by Parth Malwankar
--recurse is default.
915
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
916
        out, err = self.run_bzr(['grep', 'l[hij]ne1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
917
        self.assertContainsRe(out, "^dir1/file0.txt:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
918
919
        out, err = self.run_bzr(['grep', '--from-root', 'l.ne1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
920
        self.assertContainsRe(out, "^dir0/dir1/file0.txt:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
921
922
        out, err = self.run_bzr(['grep', '--no-recursive', 'lin.1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
923
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
924
0.41.4 by Parth Malwankar
--recurse is default.
925
        out, err = self.run_bzr(['grep', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
926
        self.assertContainsRe(out, "^dir1/file0.txt:line1", flags=TestGrep._reflags)
0.41.4 by Parth Malwankar
--recurse is default.
927
0.40.25 by Parth Malwankar
added test case for multilevel dir.
928
        out, err = self.run_bzr(['grep', '--from-root', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
929
        self.assertContainsRe(out, "^dir0/dir1/file0.txt:line1", flags=TestGrep._reflags)
0.41.4 by Parth Malwankar
--recurse is default.
930
0.41.6 by Parth Malwankar
renamed --recurse/--no-recurse => --recursive/--no-recursive
931
        out, err = self.run_bzr(['grep', '--no-recursive', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
932
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.25 by Parth Malwankar
added test case for multilevel dir.
933
0.41.17 by Parth Malwankar
added tests.
934
    def test_versioned_ignore_case_no_match(self):
935
        """(versioned) Match fails without --ignore-case.
936
        """
937
        wd = 'foobar0'
938
        self.make_branch_and_tree(wd)
939
        os.chdir(wd)
940
        self._mk_versioned_file('file0.txt')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
941
0.41.17 by Parth Malwankar
added tests.
942
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'LinE1', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
943
        self.assertNotContainsRe(out, "file0.txt~.:line1", flags=TestGrep._reflags)
0.41.17 by Parth Malwankar
added tests.
944
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
945
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'Li.E1', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
946
        self.assertNotContainsRe(out, "file0.txt~.:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
947
0.41.17 by Parth Malwankar
added tests.
948
    def test_wtree_ignore_case_no_match(self):
949
        """(wtree) Match fails without --ignore-case.
950
        """
0.40.13 by Parth Malwankar
added tests for -R and -i
951
        wd = 'foobar0'
952
        self.make_branch_and_tree(wd)
953
        os.chdir(wd)
954
        self._mk_versioned_file('file0.txt')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
955
0.40.13 by Parth Malwankar
added tests for -R and -i
956
        out, err = self.run_bzr(['grep', 'LinE1', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
957
        self.assertNotContainsRe(out, "file0.txt:line1", flags=TestGrep._reflags)
0.40.13 by Parth Malwankar
added tests for -R and -i
958
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
959
        out, err = self.run_bzr(['grep', '.inE1', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
960
        self.assertNotContainsRe(out, "file0.txt:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
961
0.41.17 by Parth Malwankar
added tests.
962
    def test_versioned_ignore_case_match(self):
963
        """(versioned) Match fails without --ignore-case.
964
        """
965
        wd = 'foobar0'
966
        self.make_branch_and_tree(wd)
967
        os.chdir(wd)
968
        self._mk_versioned_file('file0.txt')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
969
970
        out, err = self.run_bzr(['grep', '-r', 'last:1',
971
            '-i', 'Li.E1', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
972
        self.assertContainsRe(out, "file0.txt~.:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
973
0.41.17 by Parth Malwankar
added tests.
974
        out, err = self.run_bzr(['grep', '-r', 'last:1',
975
            '-i', 'LinE1', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
976
        self.assertContainsRe(out, "file0.txt~.:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
977
0.41.17 by Parth Malwankar
added tests.
978
        out, err = self.run_bzr(['grep', '-r', 'last:1',
979
            '--ignore-case', 'LinE1', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
980
        self.assertContainsRe(out, "^file0.txt~.:line1", flags=TestGrep._reflags)
0.41.17 by Parth Malwankar
added tests.
981
982
    def test_wtree_ignore_case_match(self):
983
        """(wtree) Match fails without --ignore-case.
984
        """
0.40.13 by Parth Malwankar
added tests for -R and -i
985
        wd = 'foobar0'
986
        self.make_branch_and_tree(wd)
987
        os.chdir(wd)
988
        self._mk_versioned_file('file0.txt')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
989
0.40.13 by Parth Malwankar
added tests for -R and -i
990
        out, err = self.run_bzr(['grep', '-i', 'LinE1', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
991
        self.assertContainsRe(out, "file0.txt:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
992
0.40.24 by Parth Malwankar
added support for --line-number.
993
        out, err = self.run_bzr(['grep', '--ignore-case', 'LinE1', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
994
        self.assertContainsRe(out, "^file0.txt:line1", flags=TestGrep._reflags)
0.40.13 by Parth Malwankar
added tests for -R and -i
995
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
996
        out, err = self.run_bzr(['grep', '--ignore-case', 'Li.E1', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
997
        self.assertContainsRe(out, "^file0.txt:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
998
0.41.17 by Parth Malwankar
added tests.
999
    def test_versioned_from_root_fail(self):
1000
        """(versioned) Match should fail without --from-root.
1001
        """
1002
        wd = 'foobar0'
1003
        self.make_branch_and_tree(wd)
1004
        os.chdir(wd)
1005
        self._mk_versioned_file('file0.txt')
1006
        self._mk_versioned_dir('dir0')
1007
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1008
1009
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'li.e1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1010
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1011
0.41.17 by Parth Malwankar
added tests.
1012
        out, err = self.run_bzr(['grep', '-r', 'last:1', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1013
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.41.17 by Parth Malwankar
added tests.
1014
1015
    def test_wtree_from_root_fail(self):
1016
        """(wtree) Match should fail without --from-root.
1017
        """
0.40.14 by Parth Malwankar
added test for --from-root
1018
        wd = 'foobar0'
1019
        self.make_branch_and_tree(wd)
1020
        os.chdir(wd)
1021
        self._mk_versioned_file('file0.txt')
1022
        self._mk_versioned_dir('dir0')
1023
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1024
0.40.14 by Parth Malwankar
added test for --from-root
1025
        out, err = self.run_bzr(['grep', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1026
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.41.17 by Parth Malwankar
added tests.
1027
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1028
        out, err = self.run_bzr(['grep', 'li.e1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1029
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1030
0.41.17 by Parth Malwankar
added tests.
1031
    def test_versioned_from_root_pass(self):
1032
        """(versioned) Match pass with --from-root.
1033
        """
1034
        wd = 'foobar0'
1035
        self.make_branch_and_tree(wd)
1036
        os.chdir(wd)
1037
        self._mk_versioned_file('file0.txt')
1038
        self._mk_versioned_dir('dir0')
1039
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1040
1041
        out, err = self.run_bzr(['grep', '-r', 'last:1',
1042
            '--from-root', 'l.ne1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1043
        self.assertContainsRe(out, "file0.txt~.:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1044
0.41.17 by Parth Malwankar
added tests.
1045
        out, err = self.run_bzr(['grep', '-r', 'last:1',
1046
            '--from-root', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1047
        self.assertContainsRe(out, "file0.txt~.:line1", flags=TestGrep._reflags)
0.41.17 by Parth Malwankar
added tests.
1048
1049
    def test_wtree_from_root_pass(self):
1050
        """(wtree) Match pass with --from-root.
1051
        """
0.40.14 by Parth Malwankar
added test for --from-root
1052
        wd = 'foobar0'
1053
        self.make_branch_and_tree(wd)
1054
        os.chdir(wd)
1055
        self._mk_versioned_file('file0.txt')
1056
        self._mk_versioned_dir('dir0')
1057
        os.chdir('dir0')
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1058
1059
        out, err = self.run_bzr(['grep', '--from-root', 'lin.1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1060
        self.assertContainsRe(out, "file0.txt:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1061
0.40.14 by Parth Malwankar
added test for --from-root
1062
        out, err = self.run_bzr(['grep', '--from-root', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1063
        self.assertContainsRe(out, "file0.txt:line1", flags=TestGrep._reflags)
0.41.17 by Parth Malwankar
added tests.
1064
1065
    def test_versioned_with_line_number(self):
1066
        """(versioned) Search for pattern with --line-number.
1067
        """
1068
        wd = 'foobar0'
1069
        self.make_branch_and_tree(wd)
1070
        os.chdir(wd)
1071
        self._mk_versioned_file('file0.txt')
1072
1073
        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.
1074
            '--line-number', 'li.e3', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1075
        self.assertContainsRe(out, "file0.txt~.:3:line3", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1076
1077
        out, err = self.run_bzr(['grep', '-r', 'last:1',
0.41.17 by Parth Malwankar
added tests.
1078
            '--line-number', 'line3', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1079
        self.assertContainsRe(out, "file0.txt~.:3:line3", flags=TestGrep._reflags)
0.41.17 by Parth Malwankar
added tests.
1080
1081
        out, err = self.run_bzr(['grep', '-r', 'last:1',
1082
            '-n', 'line1', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1083
        self.assertContainsRe(out, "file0.txt~.:1:line1", flags=TestGrep._reflags)
0.41.17 by Parth Malwankar
added tests.
1084
0.47.3 by Martin
Fix previously untested bug with regexp and line numbers introduced by optimisation
1085
        out, err = self.run_bzr(['grep', '-n', 'line[0-9]', 'file0.txt'])
1086
        self.assertContainsRe(out, "file0.txt:3:line3", flags=TestGrep._reflags)
1087
0.41.17 by Parth Malwankar
added tests.
1088
    def test_wtree_with_line_number(self):
1089
        """(wtree) Search for pattern with --line-number.
1090
        """
0.40.24 by Parth Malwankar
added support for --line-number.
1091
        wd = 'foobar0'
1092
        self.make_branch_and_tree(wd)
1093
        os.chdir(wd)
1094
        self._mk_versioned_file('file0.txt')
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
1095
0.40.24 by Parth Malwankar
added support for --line-number.
1096
        out, err = self.run_bzr(['grep', '--line-number', 'line3', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1097
        self.assertContainsRe(out, "file0.txt:3:line3", flags=TestGrep._reflags)
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
1098
0.40.24 by Parth Malwankar
added support for --line-number.
1099
        out, err = self.run_bzr(['grep', '-n', 'line1', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1100
        self.assertContainsRe(out, "file0.txt:1:line1", flags=TestGrep._reflags)
0.40.14 by Parth Malwankar
added test for --from-root
1101
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1102
        out, err = self.run_bzr(['grep', '-n', '[hjkl]ine1', 'file0.txt'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1103
        self.assertContainsRe(out, "file0.txt:1:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1104
0.47.3 by Martin
Fix previously untested bug with regexp and line numbers introduced by optimisation
1105
        out, err = self.run_bzr(['grep', '-n', 'line[0-9]', 'file0.txt'])
1106
        self.assertContainsRe(out, "file0.txt:3:line3", flags=TestGrep._reflags)
1107
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
1108
    def test_revno_basic_history_grep_file(self):
0.41.17 by Parth Malwankar
added tests.
1109
        """Search for pattern in specific revision number in a file.
1110
        """
0.40.34 by Parth Malwankar
added tests for single revision history search
1111
        wd = 'foobar0'
1112
        fname = 'file0.txt'
1113
        self.make_branch_and_tree(wd)
1114
        os.chdir(wd)
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
1115
        self._mk_versioned_file(fname, total_lines=0)
0.40.34 by Parth Malwankar
added tests for single revision history search
1116
        self._update_file(fname, text="v2 text\n")
1117
        self._update_file(fname, text="v3 text\n")
1118
        self._update_file(fname, text="v4 text\n")
1119
1120
        # rev 2 should not have text 'v3'
1121
        out, err = self.run_bzr(['grep', '-r', '2', 'v3', fname])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1122
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.34 by Parth Malwankar
added tests for single revision history search
1123
1124
        # rev 3 should not have text 'v3'
1125
        out, err = self.run_bzr(['grep', '-r', '3', 'v3', fname])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1126
        self.assertContainsRe(out, "file0.txt~3:v3.*", flags=TestGrep._reflags)
0.40.34 by Parth Malwankar
added tests for single revision history search
1127
1128
        # rev 3 should not have text 'v3' with line number
1129
        out, err = self.run_bzr(['grep', '-r', '3', '-n', 'v3', fname])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1130
        self.assertContainsRe(out, "file0.txt~3:2:v3.*", flags=TestGrep._reflags)
0.40.34 by Parth Malwankar
added tests for single revision history search
1131
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1132
        # rev 2 should not have text 'v3'
1133
        out, err = self.run_bzr(['grep', '-r', '2', '[tuv]3', fname])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1134
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1135
1136
        # rev 3 should not have text 'v3'
1137
        out, err = self.run_bzr(['grep', '-r', '3', '[tuv]3', fname])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1138
        self.assertContainsRe(out, "file0.txt~3:v3.*", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1139
1140
        # rev 3 should not have text 'v3' with line number
1141
        out, err = self.run_bzr(['grep', '-r', '3', '-n', '[tuv]3', fname])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1142
        self.assertContainsRe(out, "file0.txt~3:2:v3.*", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1143
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
1144
    def test_revno_basic_history_grep_full(self):
0.41.17 by Parth Malwankar
added tests.
1145
        """Search for pattern in specific revision number in a file.
1146
        """
0.40.34 by Parth Malwankar
added tests for single revision history search
1147
        wd = 'foobar0'
1148
        fname = 'file0.txt'
1149
        self.make_branch_and_tree(wd)
1150
        os.chdir(wd)
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
1151
        self._mk_versioned_file(fname, total_lines=0) # rev1
1152
        self._mk_versioned_file('file1.txt')          # rev2
1153
        self._update_file(fname, text="v3 text\n")    # rev3
1154
        self._update_file(fname, text="v4 text\n")    # rev4
1155
        self._update_file(fname, text="v5 text\n")    # rev5
0.40.34 by Parth Malwankar
added tests for single revision history search
1156
1157
        # rev 2 should not have text 'v3'
1158
        out, err = self.run_bzr(['grep', '-r', '2', 'v3'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1159
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.34 by Parth Malwankar
added tests for single revision history search
1160
1161
        # rev 3 should not have text 'v3'
1162
        out, err = self.run_bzr(['grep', '-r', '3', 'v3'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1163
        self.assertContainsRe(out, "file0.txt~3:v3", flags=TestGrep._reflags)
0.40.34 by Parth Malwankar
added tests for single revision history search
1164
1165
        # rev 3 should not have text 'v3' with line number
1166
        out, err = self.run_bzr(['grep', '-r', '3', '-n', 'v3'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1167
        self.assertContainsRe(out, "file0.txt~3:1:v3", flags=TestGrep._reflags)
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
1168
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1169
        # rev 2 should not have text 'v3'
1170
        out, err = self.run_bzr(['grep', '-r', '2', '[tuv]3'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1171
        self.assertNotContainsRe(out, "file0.txt", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1172
1173
        # rev 3 should not have text 'v3'
1174
        out, err = self.run_bzr(['grep', '-r', '3', '[tuv]3'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1175
        self.assertContainsRe(out, "file0.txt~3:v3", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1176
1177
        # rev 3 should not have text 'v3' with line number
1178
        out, err = self.run_bzr(['grep', '-r', '3', '-n', '[tuv]3'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1179
        self.assertContainsRe(out, "file0.txt~3:1:v3", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1180
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
1181
    def test_revno_versioned_file_in_dir(self):
0.41.17 by Parth Malwankar
added tests.
1182
        """Grep specific version of file withing dir.
1183
        """
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
1184
        wd = 'foobar0'
1185
        self.make_branch_and_tree(wd)
1186
        os.chdir(wd)
1187
        self._mk_versioned_dir('dir0')                      # rev1
1188
        self._mk_versioned_file('dir0/file0.txt')           # rev2
1189
        self._update_file('dir0/file0.txt', "v3 text\n")    # rev3
1190
        self._update_file('dir0/file0.txt', "v4 text\n")    # rev4
1191
        self._update_file('dir0/file0.txt', "v5 text\n")    # rev5
1192
1193
        # v4 should not be present in revno 3
0.41.4 by Parth Malwankar
--recurse is default.
1194
        out, err = self.run_bzr(['grep', '-r', 'last:3', 'v4'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1195
        self.assertNotContainsRe(out, "^dir0/file0.txt", flags=TestGrep._reflags)
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
1196
1197
        # v4 should be present in revno 4
0.41.4 by Parth Malwankar
--recurse is default.
1198
        out, err = self.run_bzr(['grep', '-r', 'last:2', 'v4'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1199
        self.assertContainsRe(out, "^dir0/file0.txt~4:v4", flags=TestGrep._reflags)
0.40.35 by Parth Malwankar
fixed asserts and added test for revno based grep
1200
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1201
        # v4 should not be present in revno 3
1202
        out, err = self.run_bzr(['grep', '-r', 'last:3', '[tuv]4'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1203
        self.assertNotContainsRe(out, "^dir0/file0.txt", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1204
1205
        # v4 should be present in revno 4
1206
        out, err = self.run_bzr(['grep', '-r', 'last:2', '[tuv]4'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1207
        self.assertContainsRe(out, "^dir0/file0.txt~4:v4", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1208
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
1209
    def test_revno_range_basic_history_grep(self):
0.41.17 by Parth Malwankar
added tests.
1210
        """Search for pattern in revision range for file.
1211
        """
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
1212
        wd = 'foobar0'
1213
        fname = 'file0.txt'
1214
        self.make_branch_and_tree(wd)
1215
        os.chdir(wd)
1216
        self._mk_versioned_file(fname, total_lines=0) # rev1
1217
        self._mk_versioned_file('file1.txt')          # rev2
1218
        self._update_file(fname, text="v3 text\n")    # rev3
1219
        self._update_file(fname, text="v4 text\n")    # rev4
1220
        self._update_file(fname, text="v5 text\n")    # rev5
1221
        self._update_file(fname, text="v6 text\n")    # rev6
1222
1223
        out, err = self.run_bzr(['grep', '-r', '1..', 'v3'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1224
        self.assertContainsRe(out, "file0.txt~3:v3", flags=TestGrep._reflags)
1225
        self.assertContainsRe(out, "file0.txt~4:v3", flags=TestGrep._reflags)
1226
        self.assertContainsRe(out, "file0.txt~5:v3", flags=TestGrep._reflags)
0.40.105 by Parth Malwankar
fixed bug in ordering of user provided versions.
1227
        self.assertContainsRe(out, "file0.txt~6:v3", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1228
        self.assertEqual(len(out.splitlines()), 4)
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
1229
0.40.106 by Parth Malwankar
fixed error in dotted rev reverse search.
1230
        out, err = self.run_bzr(['grep', '-r', '..1', 'v3'])
1231
        # searching only rev1 gives nothing
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1232
        self.assertEqual(len(out.splitlines()), 0)
0.40.106 by Parth Malwankar
fixed error in dotted rev reverse search.
1233
1234
        out, err = self.run_bzr(['grep', '-r', '..6', 'v3'])
1235
        self.assertContainsRe(out, "file0.txt~3:v3", flags=TestGrep._reflags)
1236
        self.assertContainsRe(out, "file0.txt~4:v3", flags=TestGrep._reflags)
1237
        self.assertContainsRe(out, "file0.txt~5:v3", flags=TestGrep._reflags)
1238
        self.assertContainsRe(out, "file0.txt~6:v3", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1239
        self.assertEqual(len(out.splitlines()), 4)
0.40.106 by Parth Malwankar
fixed error in dotted rev reverse search.
1240
1241
        out, err = self.run_bzr(['grep', '-r', '..', 'v3'])
1242
        self.assertContainsRe(out, "file0.txt~3:v3", flags=TestGrep._reflags)
1243
        self.assertContainsRe(out, "file0.txt~4:v3", flags=TestGrep._reflags)
1244
        self.assertContainsRe(out, "file0.txt~5:v3", flags=TestGrep._reflags)
1245
        self.assertContainsRe(out, "file0.txt~6:v3", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1246
        self.assertEqual(len(out.splitlines()), 4)
0.40.106 by Parth Malwankar
fixed error in dotted rev reverse search.
1247
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
1248
        out, err = self.run_bzr(['grep', '-r', '1..5', 'v3'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1249
        self.assertContainsRe(out, "file0.txt~3:v3", flags=TestGrep._reflags)
1250
        self.assertContainsRe(out, "file0.txt~4:v3", flags=TestGrep._reflags)
1251
        self.assertContainsRe(out, "file0.txt~5:v3", flags=TestGrep._reflags)
1252
        self.assertNotContainsRe(out, "file0.txt~6:v3", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1253
        self.assertEqual(len(out.splitlines()), 3)
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
1254
0.40.106 by Parth Malwankar
fixed error in dotted rev reverse search.
1255
        out, err = self.run_bzr(['grep', '-r', '5..1', 'v3'])
1256
        self.assertContainsRe(out, "file0.txt~3:v3", flags=TestGrep._reflags)
1257
        self.assertContainsRe(out, "file0.txt~4:v3", flags=TestGrep._reflags)
1258
        self.assertContainsRe(out, "file0.txt~5:v3", flags=TestGrep._reflags)
1259
        self.assertNotContainsRe(out, "file0.txt~6:v3", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1260
        self.assertEqual(len(out.splitlines()), 3)
0.40.106 by Parth Malwankar
fixed error in dotted rev reverse search.
1261
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1262
        out, err = self.run_bzr(['grep', '-r', '1..', '[tuv]3'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1263
        self.assertContainsRe(out, "file0.txt~3:v3", flags=TestGrep._reflags)
1264
        self.assertContainsRe(out, "file0.txt~4:v3", flags=TestGrep._reflags)
1265
        self.assertContainsRe(out, "file0.txt~5:v3", flags=TestGrep._reflags)
0.40.105 by Parth Malwankar
fixed bug in ordering of user provided versions.
1266
        self.assertContainsRe(out, "file0.txt~6:v3", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1267
        self.assertEqual(len(out.splitlines()), 4)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1268
1269
        out, err = self.run_bzr(['grep', '-r', '1..5', '[tuv]3'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1270
        self.assertContainsRe(out, "file0.txt~3:v3", flags=TestGrep._reflags)
1271
        self.assertContainsRe(out, "file0.txt~4:v3", flags=TestGrep._reflags)
1272
        self.assertContainsRe(out, "file0.txt~5:v3", flags=TestGrep._reflags)
1273
        self.assertNotContainsRe(out, "file0.txt~6:v3", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1274
        self.assertEqual(len(out.splitlines()), 3)
0.40.105 by Parth Malwankar
fixed bug in ordering of user provided versions.
1275
1276
        out, err = self.run_bzr(['grep', '-r', '5..1', '[tuv]3'])
1277
        self.assertContainsRe(out, "file0.txt~3:v3", flags=TestGrep._reflags)
1278
        self.assertContainsRe(out, "file0.txt~4:v3", flags=TestGrep._reflags)
1279
        self.assertContainsRe(out, "file0.txt~5:v3", flags=TestGrep._reflags)
1280
        self.assertNotContainsRe(out, "file0.txt~6:v3", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1281
        self.assertEqual(len(out.splitlines()), 3)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1282
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
1283
    def test_revno_range_versioned_file_in_dir(self):
0.41.17 by Parth Malwankar
added tests.
1284
        """Grep rev-range for pattern for file withing a dir.
1285
        """
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
1286
        wd = 'foobar0'
1287
        self.make_branch_and_tree(wd)
1288
        os.chdir(wd)
1289
        self._mk_versioned_dir('dir0')                      # rev1
1290
        self._mk_versioned_file('dir0/file0.txt')           # rev2
1291
        self._update_file('dir0/file0.txt', "v3 text\n")    # rev3
1292
        self._update_file('dir0/file0.txt', "v4 text\n")    # rev4
1293
        self._update_file('dir0/file0.txt', "v5 text\n")    # rev5
1294
        self._update_file('dir0/file0.txt', "v6 text\n")    # rev6
1295
0.41.4 by Parth Malwankar
--recurse is default.
1296
        out, err = self.run_bzr(['grep', '-r', '2..5', 'v3'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1297
        self.assertContainsRe(out, "^dir0/file0.txt~3:v3", flags=TestGrep._reflags)
1298
        self.assertContainsRe(out, "^dir0/file0.txt~4:v3", flags=TestGrep._reflags)
1299
        self.assertContainsRe(out, "^dir0/file0.txt~5:v3", flags=TestGrep._reflags)
1300
        self.assertNotContainsRe(out, "^dir0/file0.txt~6:v3", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1301
        self.assertEqual(len(out.splitlines()), 3)
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
1302
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1303
        out, err = self.run_bzr(['grep', '-r', '2..5', '[tuv]3'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1304
        self.assertContainsRe(out, "^dir0/file0.txt~3:v3", flags=TestGrep._reflags)
1305
        self.assertContainsRe(out, "^dir0/file0.txt~4:v3", flags=TestGrep._reflags)
1306
        self.assertContainsRe(out, "^dir0/file0.txt~5:v3", flags=TestGrep._reflags)
1307
        self.assertNotContainsRe(out, "^dir0/file0.txt~6:v3", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1308
        self.assertEqual(len(out.splitlines()), 3)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1309
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
1310
    def test_revno_range_versioned_file_from_outside_dir(self):
0.41.17 by Parth Malwankar
added tests.
1311
        """Grep rev-range for pattern from outside dir.
1312
        """
0.40.38 by Parth Malwankar
added --levels options. added tests for range search.
1313
        wd = 'foobar0'
1314
        self.make_branch_and_tree(wd)
1315
        os.chdir(wd)
1316
        self._mk_versioned_dir('dir0')                      # rev1
1317
        self._mk_versioned_file('dir0/file0.txt')           # rev2
1318
        self._update_file('dir0/file0.txt', "v3 text\n")    # rev3
1319
        self._update_file('dir0/file0.txt', "v4 text\n")    # rev4
1320
        self._update_file('dir0/file0.txt', "v5 text\n")    # rev5
1321
        self._update_file('dir0/file0.txt', "v6 text\n")    # rev6
1322
1323
        out, err = self.run_bzr(['grep', '-r', '2..5', 'v3', 'dir0'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1324
        self.assertContainsRe(out, "^dir0/file0.txt~3:v3", flags=TestGrep._reflags)
1325
        self.assertContainsRe(out, "^dir0/file0.txt~4:v3", flags=TestGrep._reflags)
1326
        self.assertContainsRe(out, "^dir0/file0.txt~5:v3", flags=TestGrep._reflags)
1327
        self.assertNotContainsRe(out, "^dir0/file0.txt~6:v3", flags=TestGrep._reflags)
0.40.13 by Parth Malwankar
added tests for -R and -i
1328
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1329
        out, err = self.run_bzr(['grep', '-r', '2..5', '[tuv]3', 'dir0'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1330
        self.assertContainsRe(out, "^dir0/file0.txt~3:v3", flags=TestGrep._reflags)
1331
        self.assertContainsRe(out, "^dir0/file0.txt~4:v3", flags=TestGrep._reflags)
1332
        self.assertContainsRe(out, "^dir0/file0.txt~5:v3", flags=TestGrep._reflags)
1333
        self.assertNotContainsRe(out, "^dir0/file0.txt~6:v3", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1334
0.40.46 by Parth Malwankar
--levels=0 now implicitly prints revnos. added test for --levels=0.
1335
    def test_levels(self):
0.41.17 by Parth Malwankar
added tests.
1336
        """--levels=0 should show findings from merged revision.
1337
        """
0.40.46 by Parth Malwankar
--levels=0 now implicitly prints revnos. added test for --levels=0.
1338
        wd0 = 'foobar0'
1339
        wd1 = 'foobar1'
1340
1341
        self.make_branch_and_tree(wd0)
1342
        os.chdir(wd0)
1343
        self._mk_versioned_file('file0.txt')
1344
        os.chdir('..')
1345
1346
        out, err = self.run_bzr(['branch', wd0, wd1])
1347
        os.chdir(wd1)
1348
        self._mk_versioned_file('file1.txt')
1349
        os.chdir(osutils.pathjoin('..', wd0))
1350
1351
        out, err = self.run_bzr(['merge', osutils.pathjoin('..', wd1)])
1352
        out, err = self.run_bzr(['ci', '-m', 'merged'])
1353
1354
        out, err = self.run_bzr(['grep', 'line1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1355
        self.assertContainsRe(out, "file0.txt:line1", flags=TestGrep._reflags)
1356
        self.assertContainsRe(out, "file1.txt:line1", flags=TestGrep._reflags)
0.40.46 by Parth Malwankar
--levels=0 now implicitly prints revnos. added test for --levels=0.
1357
0.41.17 by Parth Malwankar
added tests.
1358
        # levels should be ignored by wtree grep
1359
        out, err = self.run_bzr(['grep', '--levels=0', 'line1'])
0.40.108 by Parth Malwankar
made tests more accurate
1360
        self.assertContainsRe(out, "^file0.txt:line1$", flags=TestGrep._reflags)
1361
        self.assertContainsRe(out, "^file1.txt:line1$", flags=TestGrep._reflags)
1362
        self.assertContainsRe(out, "^file0.txt:line10$", flags=TestGrep._reflags)
1363
        self.assertContainsRe(out, "^file1.txt:line10$", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1364
        self.assertEqual(len(out.splitlines()), 4)
0.41.17 by Parth Malwankar
added tests.
1365
0.40.77 by Parth Malwankar
fixed test case.
1366
        out, err = self.run_bzr(['grep', '-r', 'last:1..', '--levels=0', 'line1'])
0.40.108 by Parth Malwankar
made tests more accurate
1367
        self.assertContainsRe(out, "^file0.txt~2:line1$", flags=TestGrep._reflags)
1368
        self.assertContainsRe(out, "^file1.txt~2:line1$", flags=TestGrep._reflags)
1369
        self.assertContainsRe(out, "^file0.txt~1.1.1:line1$", flags=TestGrep._reflags)
1370
        self.assertContainsRe(out, "^file1.txt~1.1.1:line1$", flags=TestGrep._reflags)
1371
        self.assertContainsRe(out, "^file0.txt~2:line10$", flags=TestGrep._reflags)
1372
        self.assertContainsRe(out, "^file1.txt~2:line10$", flags=TestGrep._reflags)
1373
        self.assertContainsRe(out, "^file0.txt~1.1.1:line10$", flags=TestGrep._reflags)
1374
        self.assertContainsRe(out, "^file1.txt~1.1.1:line10$", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1375
        self.assertEqual(len(out.splitlines()), 8)
0.40.46 by Parth Malwankar
--levels=0 now implicitly prints revnos. added test for --levels=0.
1376
0.40.77 by Parth Malwankar
fixed test case.
1377
        out, err = self.run_bzr(['grep', '-r',  '-1..', '-n', '--levels=0', 'line1'])
0.40.108 by Parth Malwankar
made tests more accurate
1378
        self.assertContainsRe(out, "^file0.txt~2:1:line1$", flags=TestGrep._reflags)
1379
        self.assertContainsRe(out, "^file1.txt~2:1:line1$", flags=TestGrep._reflags)
1380
        self.assertContainsRe(out, "^file0.txt~1.1.1:1:line1$", flags=TestGrep._reflags)
1381
        self.assertContainsRe(out, "^file1.txt~1.1.1:1:line1$", flags=TestGrep._reflags)
1382
        self.assertContainsRe(out, "^file0.txt~2:10:line10$", flags=TestGrep._reflags)
1383
        self.assertContainsRe(out, "^file1.txt~2:10:line10$", flags=TestGrep._reflags)
1384
        self.assertContainsRe(out, "^file0.txt~1.1.1:10:line10$", flags=TestGrep._reflags)
1385
        self.assertContainsRe(out, "^file1.txt~1.1.1:10:line10$", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1386
        self.assertEqual(len(out.splitlines()), 8)
0.40.46 by Parth Malwankar
--levels=0 now implicitly prints revnos. added test for --levels=0.
1387
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1388
        # levels should be ignored by wtree grep
1389
        out, err = self.run_bzr(['grep', '--levels=0', 'l.ne1'])
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1390
        self.assertContainsRe(out, "^file0.txt:line1$", flags=TestGrep._reflags)
1391
        self.assertContainsRe(out, "^file1.txt:line1$", flags=TestGrep._reflags)
1392
        self.assertContainsRe(out, "^file0.txt:line10$", flags=TestGrep._reflags)
1393
        self.assertContainsRe(out, "^file1.txt:line10$", flags=TestGrep._reflags)
1394
        self.assertEqual(len(out.splitlines()), 4)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1395
1396
        out, err = self.run_bzr(['grep', '-r', 'last:1..', '--levels=0', 'lin.1'])
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1397
        self.assertContainsRe(out, "^file0.txt~2:line1$", flags=TestGrep._reflags)
1398
        self.assertContainsRe(out, "^file1.txt~2:line1$", flags=TestGrep._reflags)
1399
        self.assertContainsRe(out, "^file0.txt~1.1.1:line1$", flags=TestGrep._reflags)
1400
        self.assertContainsRe(out, "^file1.txt~1.1.1:line1$", flags=TestGrep._reflags)
1401
        self.assertContainsRe(out, "^file0.txt~2:line10$", flags=TestGrep._reflags)
1402
        self.assertContainsRe(out, "^file1.txt~2:line10$", flags=TestGrep._reflags)
1403
        self.assertContainsRe(out, "^file0.txt~1.1.1:line10$", flags=TestGrep._reflags)
1404
        self.assertContainsRe(out, "^file1.txt~1.1.1:line10$", flags=TestGrep._reflags)
1405
        self.assertEqual(len(out.splitlines()), 8)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1406
1407
        out, err = self.run_bzr(['grep', '-r',  '-1..', '-n', '--levels=0', '.ine1'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1408
        self.assertContainsRe(out, "file0.txt~2:1:line1", flags=TestGrep._reflags)
1409
        self.assertContainsRe(out, "file1.txt~2:1:line1", flags=TestGrep._reflags)
1410
        self.assertContainsRe(out, "file0.txt~1.1.1:1:line1", flags=TestGrep._reflags)
1411
        self.assertContainsRe(out, "file1.txt~1.1.1:1:line1", flags=TestGrep._reflags)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1412
0.40.97 by Parth Malwankar
fixed caching bug for rev range.
1413
    def test_dotted_rev_grep(self):
1414
        """Grep in dotted revs
1415
        """
1416
        wd0 = 'foobar0'
1417
        wd1 = 'foobar1'
1418
1419
        self.make_branch_and_tree(wd0)
1420
        os.chdir(wd0)
1421
        self._mk_versioned_file('file0.txt')
1422
        os.chdir('..')
1423
1424
        out, err = self.run_bzr(['branch', wd0, wd1])
1425
        os.chdir(wd1)
1426
        self._mk_versioned_file('file1.txt')        # revno 1.1.1
1427
        self._update_file('file1.txt', "text 0\n")  # revno 1.1.2
1428
        self._update_file('file1.txt', "text 1\n")  # revno 1.1.3
1429
        self._update_file('file1.txt', "text 2\n")  # revno 1.1.4
1430
        os.chdir(osutils.pathjoin('..', wd0))
1431
1432
        out, err = self.run_bzr(['merge', osutils.pathjoin('..', wd1)])
1433
        out, err = self.run_bzr(['ci', '-m', 'merged'])
1434
1435
        out, err = self.run_bzr(['grep', '-r', '1.1.1..1.1.4', 'text'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1436
        self.assertContainsRe(out, "file1.txt~1.1.2:text 0", flags=TestGrep._reflags)
1437
        self.assertContainsRe(out, "file1.txt~1.1.3:text 1", flags=TestGrep._reflags)
1438
        self.assertContainsRe(out, "file1.txt~1.1.3:text 1", flags=TestGrep._reflags)
1439
        self.assertContainsRe(out, "file1.txt~1.1.4:text 0", flags=TestGrep._reflags)
1440
        self.assertContainsRe(out, "file1.txt~1.1.4:text 1", flags=TestGrep._reflags)
1441
        self.assertContainsRe(out, "file1.txt~1.1.4:text 2", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1442
        self.assertEqual(len(out.splitlines()), 6)
0.40.97 by Parth Malwankar
fixed caching bug for rev range.
1443
0.40.106 by Parth Malwankar
fixed error in dotted rev reverse search.
1444
        out, err = self.run_bzr(['grep', '-r', '1.1.4..1.1.1', 'text'])
1445
        self.assertContainsRe(out, "file1.txt~1.1.2:text 0", flags=TestGrep._reflags)
1446
        self.assertContainsRe(out, "file1.txt~1.1.3:text 1", flags=TestGrep._reflags)
1447
        self.assertContainsRe(out, "file1.txt~1.1.3:text 1", flags=TestGrep._reflags)
1448
        self.assertContainsRe(out, "file1.txt~1.1.4:text 0", flags=TestGrep._reflags)
1449
        self.assertContainsRe(out, "file1.txt~1.1.4:text 1", flags=TestGrep._reflags)
1450
        self.assertContainsRe(out, "file1.txt~1.1.4:text 2", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1451
        self.assertEqual(len(out.splitlines()), 6)
0.40.106 by Parth Malwankar
fixed error in dotted rev reverse search.
1452
0.40.97 by Parth Malwankar
fixed caching bug for rev range.
1453
        out, err = self.run_bzr(['grep', '--levels=1', '-r', '1.1.1..1.1.4', 'text'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1454
        self.assertContainsRe(out, "file1.txt~1.1.2:text 0", flags=TestGrep._reflags)
1455
        self.assertContainsRe(out, "file1.txt~1.1.3:text 1", flags=TestGrep._reflags)
1456
        self.assertContainsRe(out, "file1.txt~1.1.3:text 1", flags=TestGrep._reflags)
1457
        self.assertContainsRe(out, "file1.txt~1.1.4:text 0", flags=TestGrep._reflags)
1458
        self.assertContainsRe(out, "file1.txt~1.1.4:text 1", flags=TestGrep._reflags)
1459
        self.assertContainsRe(out, "file1.txt~1.1.4:text 2", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1460
        self.assertEqual(len(out.splitlines()), 6)
0.40.98 by Parth Malwankar
made some tests more accurate by adding check to total output lines
1461
1462
        out, err = self.run_bzr(['grep', '-r', '1..1.1.4', 'text'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1463
        self.assertContainsRe(out, "file1.txt~1.1.2:text 0", flags=TestGrep._reflags)
1464
        self.assertContainsRe(out, "file1.txt~1.1.3:text 1", flags=TestGrep._reflags)
1465
        self.assertContainsRe(out, "file1.txt~1.1.3:text 1", flags=TestGrep._reflags)
1466
        self.assertContainsRe(out, "file1.txt~1.1.4:text 0", flags=TestGrep._reflags)
1467
        self.assertContainsRe(out, "file1.txt~1.1.4:text 1", flags=TestGrep._reflags)
1468
        self.assertContainsRe(out, "file1.txt~1.1.4:text 2", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1469
        self.assertEqual(len(out.splitlines()), 6)
0.40.97 by Parth Malwankar
fixed caching bug for rev range.
1470
1471
0.41.17 by Parth Malwankar
added tests.
1472
    def test_versioned_binary_file_grep(self):
1473
        """(versioned) Grep for pattern in binary file.
1474
        """
1475
        wd = 'foobar0'
1476
        self.make_branch_and_tree(wd)
1477
        os.chdir(wd)
0.40.107 by Parth Malwankar
made tests more precise
1478
        self._mk_versioned_file('file.txt')
0.40.60 by Parth Malwankar
'binary file skipped' warning is only shown with --verbose flag
1479
        self._mk_versioned_file('file0.bin')
1480
        self._update_file('file0.bin', "\x00lineNN\x00\n")
1481
1482
        # note: set --verbose/-v flag to get the skip message.
1483
        out, err = self.run_bzr(['grep', '-v', '-r', 'last:1',
1484
            'lineNN', 'file0.bin'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1485
        self.assertNotContainsRe(out, "file0.bin", flags=TestGrep._reflags)
1486
        self.assertContainsRe(err, "Binary file.*file0.bin.*skipped", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1487
        self.assertEqual(len(out.splitlines()), 0)
1488
        self.assertEqual(len(err.splitlines()), 1)
0.41.17 by Parth Malwankar
added tests.
1489
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1490
        out, err = self.run_bzr(['grep', '-v', '-r', 'last:1',
1491
            'line.N', 'file0.bin'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1492
        self.assertNotContainsRe(out, "file0.bin", flags=TestGrep._reflags)
1493
        self.assertContainsRe(err, "Binary file.*file0.bin.*skipped", flags=TestGrep._reflags)
0.40.109 by Parth Malwankar
changed assertTrue to assertEqual
1494
        self.assertEqual(len(out.splitlines()), 0)
1495
        self.assertEqual(len(err.splitlines()), 1)
0.40.87 by Parth Malwankar
updated tests for better coverage of pattern and fixed-string match.
1496
0.41.17 by Parth Malwankar
added tests.
1497
    def test_wtree_binary_file_grep(self):
1498
        """(wtree) Grep for pattern in binary file.
1499
        """
0.40.47 by Parth Malwankar
fixes bug #531336. binary files are now skipped.
1500
        wd = 'foobar0'
1501
        self.make_branch_and_tree(wd)
1502
        os.chdir(wd)
0.40.60 by Parth Malwankar
'binary file skipped' warning is only shown with --verbose flag
1503
        self._mk_versioned_file('file0.bin')
1504
        self._update_file('file0.bin', "\x00lineNN\x00\n")
1505
1506
        # note: set --verbose/-v flag to get the skip message.
1507
        out, err = self.run_bzr(['grep', '-v', 'lineNN', 'file0.bin'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1508
        self.assertNotContainsRe(out, "file0.bin:line1", flags=TestGrep._reflags)
1509
        self.assertContainsRe(err, "Binary file.*file0.bin.*skipped", flags=TestGrep._reflags)
0.40.60 by Parth Malwankar
'binary file skipped' warning is only shown with --verbose flag
1510
1511
        # binary warning should not be shown without --verbose
1512
        out, err = self.run_bzr(['grep', 'lineNN', 'file0.bin'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1513
        self.assertNotContainsRe(out, "file0.bin:line1", flags=TestGrep._reflags)
1514
        self.assertNotContainsRe(err, "Binary file", flags=TestGrep._reflags)
0.40.47 by Parth Malwankar
fixes bug #531336. binary files are now skipped.
1515
0.40.96 by Parth Malwankar
added test to ensure that various revspecs work.
1516
    def test_revspec(self):
1517
        """Ensure various revspecs work
1518
        """
1519
        wd = 'foobar0'
1520
        self.make_branch_and_tree(wd)
1521
        os.chdir(wd)
1522
        self._mk_versioned_dir('dir0')                      # rev1
1523
        self._mk_versioned_file('dir0/file0.txt')           # rev2
1524
        self._update_file('dir0/file0.txt', "v3 text\n")    # rev3
1525
        self._update_file('dir0/file0.txt', "v4 text\n")    # rev4
1526
        self._update_file('dir0/file0.txt', "v5 text\n")    # rev5
1527
1528
        out, err = self.run_bzr(['grep', '-r', 'revno:1..2', 'v3'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1529
        self.assertNotContainsRe(out, "file0", flags=TestGrep._reflags)
0.40.110 by Parth Malwankar
made some tests more precise
1530
        self.assertEqual(len(out.splitlines()), 0)
0.40.96 by Parth Malwankar
added test to ensure that various revspecs work.
1531
1532
        out, err = self.run_bzr(['grep', '-r', 'revno:4..', 'v4'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1533
        self.assertContainsRe(out, "^dir0/file0.txt", flags=TestGrep._reflags)
0.40.110 by Parth Malwankar
made some tests more precise
1534
        self.assertEqual(len(out.splitlines()), 2) # find v4 in rev4 and rev5
0.40.96 by Parth Malwankar
added test to ensure that various revspecs work.
1535
1536
        out, err = self.run_bzr(['grep', '-r', '..revno:3', 'v4'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1537
        self.assertNotContainsRe(out, "file0", flags=TestGrep._reflags)
0.40.110 by Parth Malwankar
made some tests more precise
1538
        self.assertEqual(len(out.splitlines()), 0)
0.40.96 by Parth Malwankar
added test to ensure that various revspecs work.
1539
1540
        out, err = self.run_bzr(['grep', '-r', '..revno:3', 'v3'])
0.40.99 by Parth Malwankar
updated tests to use assertContainsRe/assertNotContainsRe
1541
        self.assertContainsRe(out, "^dir0/file0.txt", flags=TestGrep._reflags)
0.40.110 by Parth Malwankar
made some tests more precise
1542
        self.assertEqual(len(out.splitlines()), 1)
0.40.96 by Parth Malwankar
added test to ensure that various revspecs work.
1543
0.40.114 by Parth Malwankar
test for wtree -l/--files-with-matches
1544
    def test_wtree_files_with_matches(self):
1545
        """(wtree) Ensure --files-with-matches, -l works
1546
        """
1547
        wd = 'foobar0'
1548
        self.make_branch_and_tree(wd)
1549
        os.chdir(wd)
1550
1551
        self._mk_versioned_file('file0.txt', total_lines=2)
1552
        self._mk_versioned_file('file1.txt', total_lines=2)
1553
        self._mk_versioned_dir('dir0')
1554
        self._mk_versioned_file('dir0/file00.txt', total_lines=2)
1555
        self._mk_versioned_file('dir0/file01.txt', total_lines=2)
1556
1557
        self._update_file('file0.txt', 'HELLO\n', checkin=False)
1558
        self._update_file('dir0/file00.txt', 'HELLO\n', checkin=False)
1559
0.40.123 by Parth Malwankar
added regex tests for wtree -l search
1560
        # fixed-string
0.40.114 by Parth Malwankar
test for wtree -l/--files-with-matches
1561
        out, err = self.run_bzr(['grep', '--files-with-matches', 'HELLO'])
1562
1563
        self.assertContainsRe(out, "^file0.txt$", flags=TestGrep._reflags)
1564
        self.assertContainsRe(out, "^dir0/file00.txt$", flags=TestGrep._reflags)
1565
        self.assertEqual(len(out.splitlines()), 2)
1566
0.40.123 by Parth Malwankar
added regex tests for wtree -l search
1567
        # regex
1568
        out, err = self.run_bzr(['grep', '--files-with-matches', 'HE.LO'])
1569
1570
        self.assertContainsRe(out, "^file0.txt$", flags=TestGrep._reflags)
1571
        self.assertContainsRe(out, "^dir0/file00.txt$", flags=TestGrep._reflags)
1572
        self.assertEqual(len(out.splitlines()), 2)
1573
1574
        # fixed-string
0.40.114 by Parth Malwankar
test for wtree -l/--files-with-matches
1575
        out, err = self.run_bzr(['grep', '-l', 'HELLO'])
1576
1577
        self.assertContainsRe(out, "^file0.txt$", flags=TestGrep._reflags)
1578
        self.assertContainsRe(out, "^dir0/file00.txt$", flags=TestGrep._reflags)
1579
        self.assertEqual(len(out.splitlines()), 2)
1580
0.40.123 by Parth Malwankar
added regex tests for wtree -l search
1581
        # regex
1582
        out, err = self.run_bzr(['grep', '-l', 'HE.LO'])
1583
1584
        self.assertContainsRe(out, "^file0.txt$", flags=TestGrep._reflags)
1585
        self.assertContainsRe(out, "^dir0/file00.txt$", flags=TestGrep._reflags)
1586
        self.assertEqual(len(out.splitlines()), 2)
1587
1588
        # fixed-string
0.40.114 by Parth Malwankar
test for wtree -l/--files-with-matches
1589
        out, err = self.run_bzr(['grep', '-l', 'HELLO', 'dir0', 'file1.txt'])
1590
1591
        self.assertContainsRe(out, "^dir0/file00.txt$", flags=TestGrep._reflags)
1592
        self.assertEqual(len(out.splitlines()), 1)
1593
0.40.123 by Parth Malwankar
added regex tests for wtree -l search
1594
        # regex
1595
        out, err = self.run_bzr(['grep', '-l', '.ELLO', 'dir0', 'file1.txt'])
1596
1597
        self.assertContainsRe(out, "^dir0/file00.txt$", flags=TestGrep._reflags)
1598
        self.assertEqual(len(out.splitlines()), 1)
1599
1600
        # fixed-string
0.40.114 by Parth Malwankar
test for wtree -l/--files-with-matches
1601
        out, err = self.run_bzr(['grep', '-l', 'HELLO', 'file0.txt'])
1602
1603
        self.assertContainsRe(out, "^file0.txt$", flags=TestGrep._reflags)
1604
        self.assertEqual(len(out.splitlines()), 1)
1605
0.40.123 by Parth Malwankar
added regex tests for wtree -l search
1606
        # regex
1607
        out, err = self.run_bzr(['grep', '-l', '.ELLO', 'file0.txt'])
1608
1609
        self.assertContainsRe(out, "^file0.txt$", flags=TestGrep._reflags)
1610
        self.assertEqual(len(out.splitlines()), 1)
1611
1612
        # fixed-string
0.40.114 by Parth Malwankar
test for wtree -l/--files-with-matches
1613
        out, err = self.run_bzr(['grep', '--no-recursive', '-l', 'HELLO'])
1614
1615
        self.assertContainsRe(out, "^file0.txt$", flags=TestGrep._reflags)
1616
        self.assertEqual(len(out.splitlines()), 1)
1617
0.40.123 by Parth Malwankar
added regex tests for wtree -l search
1618
        # regex
1619
        out, err = self.run_bzr(['grep', '--no-recursive', '-l', '.ELLO'])
1620
1621
        self.assertContainsRe(out, "^file0.txt$", flags=TestGrep._reflags)
1622
        self.assertEqual(len(out.splitlines()), 1)
1623
0.40.115 by Parth Malwankar
added test for versioned grep.
1624
    def test_ver_files_with_matches(self):
1625
        """(ver) Ensure --files-with-matches, -l works
1626
        """
1627
        wd = 'foobar0'
1628
        self.make_branch_and_tree(wd)
1629
        os.chdir(wd)
1630
1631
        self._mk_versioned_file('file0.txt', total_lines=2)         # rev 1
1632
        self._mk_versioned_file('file1.txt', total_lines=2)         # rev 2
1633
        self._mk_versioned_dir('dir0')                              # rev 3
1634
        self._mk_versioned_file('dir0/file00.txt', total_lines=2)   # rev 4
1635
        self._mk_versioned_file('dir0/file01.txt', total_lines=2)   # rev 5
1636
1637
        self._update_file('file0.txt', 'HELLO\n')                   # rev 6
1638
        self._update_file('dir0/file00.txt', 'HELLO\n')             # rev 7
1639
0.40.120 by Parth Malwankar
added tests for regex search for -l/--files-with-matches
1640
        # fixed-string
1641
        out, err = self.run_bzr(['grep', '-r', '-1', '--files-with-matches',
1642
            'HELLO'])
1643
1644
        self.assertContainsRe(out, "^file0.txt~7$", flags=TestGrep._reflags)
1645
        self.assertContainsRe(out, "^dir0/file00.txt~7$", flags=TestGrep._reflags)
1646
        self.assertEqual(len(out.splitlines()), 2)
1647
1648
        # regex
1649
        out, err = self.run_bzr(['grep', '-r', '-1', '--files-with-matches',
1650
            'H.LLO'])
1651
1652
        self.assertContainsRe(out, "^file0.txt~7$", flags=TestGrep._reflags)
1653
        self.assertContainsRe(out, "^dir0/file00.txt~7$", flags=TestGrep._reflags)
1654
        self.assertEqual(len(out.splitlines()), 2)
1655
1656
        # fixed-string
1657
        out, err = self.run_bzr(['grep', '-r', '6..7', '--files-with-matches',
1658
            'HELLO'])
1659
1660
        self.assertContainsRe(out, "^file0.txt~6$", flags=TestGrep._reflags)
1661
        self.assertContainsRe(out, "^file0.txt~7$", flags=TestGrep._reflags)
1662
        self.assertContainsRe(out, "^dir0/file00.txt~7$", flags=TestGrep._reflags)
1663
        self.assertEqual(len(out.splitlines()), 3)
1664
1665
        # regex
1666
        out, err = self.run_bzr(['grep', '-r', '6..7', '--files-with-matches',
1667
            'H.LLO'])
1668
1669
        self.assertContainsRe(out, "^file0.txt~6$", flags=TestGrep._reflags)
1670
        self.assertContainsRe(out, "^file0.txt~7$", flags=TestGrep._reflags)
1671
        self.assertContainsRe(out, "^dir0/file00.txt~7$", flags=TestGrep._reflags)
1672
        self.assertEqual(len(out.splitlines()), 3)
1673
1674
        # fixed-string
0.40.115 by Parth Malwankar
added test for versioned grep.
1675
        out, err = self.run_bzr(['grep', '-r', '-1', '-l', 'HELLO'])
1676
1677
        self.assertContainsRe(out, "^file0.txt~7$", flags=TestGrep._reflags)
1678
        self.assertContainsRe(out, "^dir0/file00.txt~7$", flags=TestGrep._reflags)
1679
        self.assertEqual(len(out.splitlines()), 2)
1680
0.40.120 by Parth Malwankar
added tests for regex search for -l/--files-with-matches
1681
        # regex
1682
        out, err = self.run_bzr(['grep', '-r', '-1', '-l', 'H.LLO'])
1683
1684
        self.assertContainsRe(out, "^file0.txt~7$", flags=TestGrep._reflags)
1685
        self.assertContainsRe(out, "^dir0/file00.txt~7$", flags=TestGrep._reflags)
1686
        self.assertEqual(len(out.splitlines()), 2)
1687
1688
        # fixed-string
0.40.115 by Parth Malwankar
added test for versioned grep.
1689
        out, err = self.run_bzr(['grep', '-l', 'HELLO', '-r', '-1',
1690
            'dir0', 'file1.txt'])
1691
1692
        self.assertContainsRe(out, "^dir0/file00.txt~7$", flags=TestGrep._reflags)
1693
        self.assertEqual(len(out.splitlines()), 1)
1694
0.40.120 by Parth Malwankar
added tests for regex search for -l/--files-with-matches
1695
        # regex
1696
        out, err = self.run_bzr(['grep', '-l', 'H.LLO', '-r', '-1',
1697
            'dir0', 'file1.txt'])
1698
1699
        self.assertContainsRe(out, "^dir0/file00.txt~7$", flags=TestGrep._reflags)
1700
        self.assertEqual(len(out.splitlines()), 1)
1701
1702
        # fixed-string
0.40.115 by Parth Malwankar
added test for versioned grep.
1703
        out, err = self.run_bzr(['grep', '-l', 'HELLO',
1704
            '-r', '-2', 'file0.txt'])
1705
1706
        self.assertContainsRe(out, "^file0.txt~6$", flags=TestGrep._reflags)
1707
        self.assertEqual(len(out.splitlines()), 1)
1708
0.40.120 by Parth Malwankar
added tests for regex search for -l/--files-with-matches
1709
        # regex
1710
        out, err = self.run_bzr(['grep', '-l', 'HE.LO',
1711
            '-r', '-2', 'file0.txt'])
1712
1713
        self.assertContainsRe(out, "^file0.txt~6$", flags=TestGrep._reflags)
1714
        self.assertEqual(len(out.splitlines()), 1)
1715
1716
        # fixed-string
0.40.115 by Parth Malwankar
added test for versioned grep.
1717
        out, err = self.run_bzr(['grep', '--no-recursive', '-r', '-1',
1718
            '-l', 'HELLO'])
1719
1720
        self.assertContainsRe(out, "^file0.txt~7$", flags=TestGrep._reflags)
1721
        self.assertEqual(len(out.splitlines()), 1)
1722
0.40.120 by Parth Malwankar
added tests for regex search for -l/--files-with-matches
1723
        # regex
1724
        out, err = self.run_bzr(['grep', '--no-recursive', '-r', '-1',
1725
            '-l', '.ELLO'])
1726
1727
        self.assertContainsRe(out, "^file0.txt~7$", flags=TestGrep._reflags)
1728
        self.assertEqual(len(out.splitlines()), 1)
0.40.114 by Parth Malwankar
test for wtree -l/--files-with-matches
1729
0.40.124 by Parth Malwankar
added test for wtree grep with -L/--files-without-match
1730
    def test_wtree_files_without_matches(self):
0.40.126 by Parth Malwankar
renamed --files-without-matches => --files-without-match
1731
        """(wtree) Ensure --files-without-match, -L works
0.40.124 by Parth Malwankar
added test for wtree grep with -L/--files-without-match
1732
        """
1733
        wd = 'foobar0'
1734
        self.make_branch_and_tree(wd)
1735
        os.chdir(wd)
1736
1737
        self._mk_versioned_file('file0.txt', total_lines=2)
1738
        self._mk_versioned_file('file1.txt', total_lines=2)
1739
        self._mk_versioned_dir('dir0')
1740
        self._mk_versioned_file('dir0/file00.txt', total_lines=2)
1741
        self._mk_versioned_file('dir0/file01.txt', total_lines=2)
1742
1743
        self._update_file('file0.txt', 'HELLO\n', checkin=False)
1744
        self._update_file('dir0/file00.txt', 'HELLO\n', checkin=False)
1745
1746
        # fixed-string
0.40.126 by Parth Malwankar
renamed --files-without-matches => --files-without-match
1747
        out, err = self.run_bzr(['grep', '--files-without-match', 'HELLO'])
0.40.124 by Parth Malwankar
added test for wtree grep with -L/--files-without-match
1748
1749
        self.assertContainsRe(out, "^file1.txt$", flags=TestGrep._reflags)
1750
        self.assertContainsRe(out, "^dir0/file01.txt$", flags=TestGrep._reflags)
1751
        self.assertEqual(len(out.splitlines()), 2)
1752
1753
        # regex
0.40.126 by Parth Malwankar
renamed --files-without-matches => --files-without-match
1754
        out, err = self.run_bzr(['grep', '--files-without-match', 'HE.LO'])
0.40.124 by Parth Malwankar
added test for wtree grep with -L/--files-without-match
1755
1756
        self.assertContainsRe(out, "^file1.txt$", flags=TestGrep._reflags)
1757
        self.assertContainsRe(out, "^dir0/file01.txt$", flags=TestGrep._reflags)
1758
        self.assertEqual(len(out.splitlines()), 2)
1759
1760
        # fixed-string
1761
        out, err = self.run_bzr(['grep', '-L', 'HELLO'])
1762
1763
        self.assertContainsRe(out, "^file1.txt$", flags=TestGrep._reflags)
1764
        self.assertContainsRe(out, "^dir0/file01.txt$", flags=TestGrep._reflags)
1765
        self.assertEqual(len(out.splitlines()), 2)
1766
1767
        # regex
1768
        out, err = self.run_bzr(['grep', '-L', 'HE.LO'])
1769
1770
        self.assertContainsRe(out, "^file1.txt$", flags=TestGrep._reflags)
1771
        self.assertContainsRe(out, "^dir0/file01.txt$", flags=TestGrep._reflags)
1772
        self.assertEqual(len(out.splitlines()), 2)
1773
1774
        # fixed-string
1775
        out, err = self.run_bzr(['grep', '-L', 'HELLO', 'dir0', 'file1.txt'])
1776
1777
        self.assertContainsRe(out, "^file1.txt$", flags=TestGrep._reflags)
1778
        self.assertContainsRe(out, "^dir0/file01.txt$", flags=TestGrep._reflags)
1779
        self.assertEqual(len(out.splitlines()), 2)
1780
1781
        # regex
1782
        out, err = self.run_bzr(['grep', '-L', '.ELLO', 'dir0', 'file1.txt'])
1783
1784
        self.assertContainsRe(out, "^file1.txt$", flags=TestGrep._reflags)
1785
        self.assertContainsRe(out, "^dir0/file01.txt$", flags=TestGrep._reflags)
1786
        self.assertEqual(len(out.splitlines()), 2)
1787
1788
        # fixed-string
1789
        out, err = self.run_bzr(['grep', '-L', 'HELLO', 'file1.txt'])
1790
1791
        self.assertContainsRe(out, "^file1.txt$", flags=TestGrep._reflags)
1792
        self.assertEqual(len(out.splitlines()), 1)
1793
1794
        # regex
1795
        out, err = self.run_bzr(['grep', '-L', '.ELLO', 'file1.txt'])
1796
1797
        self.assertContainsRe(out, "^file1.txt$", flags=TestGrep._reflags)
1798
        self.assertEqual(len(out.splitlines()), 1)
1799
1800
        # fixed-string
1801
        out, err = self.run_bzr(['grep', '--no-recursive', '-L', 'HELLO'])
1802
1803
        self.assertContainsRe(out, "^file1.txt$", flags=TestGrep._reflags)
1804
        self.assertEqual(len(out.splitlines()), 1)
1805
1806
        # regex
1807
        out, err = self.run_bzr(['grep', '--no-recursive', '-L', '.ELLO'])
1808
1809
        self.assertContainsRe(out, "^file1.txt$", flags=TestGrep._reflags)
1810
        self.assertEqual(len(out.splitlines()), 1)
1811
0.40.122 by Parth Malwankar
added test for versioned -L and some fixes.
1812
    def test_ver_files_without_matches(self):
0.40.126 by Parth Malwankar
renamed --files-without-matches => --files-without-match
1813
        """(ver) Ensure --files-without-match, -L works
0.40.122 by Parth Malwankar
added test for versioned -L and some fixes.
1814
        """
1815
        wd = 'foobar0'
1816
        self.make_branch_and_tree(wd)
1817
        os.chdir(wd)
1818
1819
        self._mk_versioned_file('file0.txt', total_lines=2)         # rev 1
1820
        self._mk_versioned_file('file1.txt', total_lines=2)         # rev 2
1821
        self._mk_versioned_dir('dir0')                              # rev 3
1822
        self._mk_versioned_file('dir0/file00.txt', total_lines=2)   # rev 4
1823
        self._mk_versioned_file('dir0/file01.txt', total_lines=2)   # rev 5
1824
1825
        self._update_file('file0.txt', 'HELLO\n')                   # rev 6
1826
        self._update_file('dir0/file00.txt', 'HELLO\n')             # rev 7
1827
1828
        # fixed-string
0.40.126 by Parth Malwankar
renamed --files-without-matches => --files-without-match
1829
        out, err = self.run_bzr(['grep', '-r', '-1', '--files-without-match',
0.40.122 by Parth Malwankar
added test for versioned -L and some fixes.
1830
            'HELLO'])
1831
1832
        self.assertContainsRe(out, "^file1.txt~7$", flags=TestGrep._reflags)
1833
        self.assertContainsRe(out, "^dir0/file01.txt~7$", flags=TestGrep._reflags)
1834
        self.assertEqual(len(out.splitlines()), 2)
1835
1836
        # regex
0.40.126 by Parth Malwankar
renamed --files-without-matches => --files-without-match
1837
        out, err = self.run_bzr(['grep', '-r', '-1', '--files-without-match',
0.40.122 by Parth Malwankar
added test for versioned -L and some fixes.
1838
            'H.LLO'])
1839
1840
        self.assertContainsRe(out, "^file1.txt~7$", flags=TestGrep._reflags)
1841
        self.assertContainsRe(out, "^dir0/file01.txt~7$", flags=TestGrep._reflags)
1842
        self.assertEqual(len(out.splitlines()), 2)
1843
1844
        # fixed-string
0.40.126 by Parth Malwankar
renamed --files-without-matches => --files-without-match
1845
        out, err = self.run_bzr(['grep', '-r', '6..7', '--files-without-match',
0.40.122 by Parth Malwankar
added test for versioned -L and some fixes.
1846
            'HELLO'])
1847
1848
        self.assertContainsRe(out, "^file1.txt~6$", flags=TestGrep._reflags)
1849
        self.assertContainsRe(out, "^dir0/file00.txt~6$", flags=TestGrep._reflags)
1850
        self.assertContainsRe(out, "^dir0/file01.txt~6$", flags=TestGrep._reflags)
1851
        self.assertContainsRe(out, "^file1.txt~7$", flags=TestGrep._reflags)
1852
        self.assertContainsRe(out, "^dir0/file01.txt~7$", flags=TestGrep._reflags)
1853
        self.assertEqual(len(out.splitlines()), 5)
1854
1855
        # regex
0.40.126 by Parth Malwankar
renamed --files-without-matches => --files-without-match
1856
        out, err = self.run_bzr(['grep', '-r', '6..7', '--files-without-match',
0.40.122 by Parth Malwankar
added test for versioned -L and some fixes.
1857
            'H.LLO'])
1858
1859
        self.assertContainsRe(out, "^file1.txt~6$", flags=TestGrep._reflags)
1860
        self.assertContainsRe(out, "^dir0/file00.txt~6$", flags=TestGrep._reflags)
1861
        self.assertContainsRe(out, "^dir0/file01.txt~6$", flags=TestGrep._reflags)
1862
        self.assertContainsRe(out, "^file1.txt~7$", flags=TestGrep._reflags)
1863
        self.assertContainsRe(out, "^dir0/file01.txt~7$", flags=TestGrep._reflags)
1864
        self.assertEqual(len(out.splitlines()), 5)
1865
1866
        # fixed-string
1867
        out, err = self.run_bzr(['grep', '-r', '-1', '-L', 'HELLO'])
1868
1869
        self.assertContainsRe(out, "^file1.txt~7$", flags=TestGrep._reflags)
1870
        self.assertContainsRe(out, "^dir0/file01.txt~7$", flags=TestGrep._reflags)
1871
        self.assertEqual(len(out.splitlines()), 2)
1872
1873
        # regex
1874
        out, err = self.run_bzr(['grep', '-r', '-1', '-L', 'H.LLO'])
1875
1876
        self.assertContainsRe(out, "^file1.txt~7$", flags=TestGrep._reflags)
1877
        self.assertContainsRe(out, "^dir0/file01.txt~7$", flags=TestGrep._reflags)
1878
        self.assertEqual(len(out.splitlines()), 2)
1879
1880
        # fixed-string
1881
        out, err = self.run_bzr(['grep', '-L', 'HELLO', '-r', '-1',
1882
            'dir0', 'file1.txt'])
1883
1884
        self.assertContainsRe(out, "^file1.txt~7$", flags=TestGrep._reflags)
1885
        self.assertContainsRe(out, "^dir0/file01.txt~7$", flags=TestGrep._reflags)
1886
        self.assertEqual(len(out.splitlines()), 2)
1887
1888
        # regex
1889
        out, err = self.run_bzr(['grep', '-L', 'H.LLO', '-r', '-1',
1890
            'dir0', 'file1.txt'])
1891
1892
        self.assertContainsRe(out, "^file1.txt~7$", flags=TestGrep._reflags)
1893
        self.assertContainsRe(out, "^dir0/file01.txt~7$", flags=TestGrep._reflags)
1894
        self.assertEqual(len(out.splitlines()), 2)
1895
1896
        # fixed-string
1897
        out, err = self.run_bzr(['grep', '-L', 'HELLO',
1898
            '-r', '-2', 'file1.txt'])
1899
1900
        self.assertContainsRe(out, "^file1.txt~6$", flags=TestGrep._reflags)
1901
        self.assertEqual(len(out.splitlines()), 1)
1902
1903
        # regex
1904
        out, err = self.run_bzr(['grep', '-L', 'HE.LO',
1905
            '-r', '-2', 'file1.txt'])
1906
1907
        self.assertContainsRe(out, "^file1.txt~6$", flags=TestGrep._reflags)
1908
        self.assertEqual(len(out.splitlines()), 1)
1909
1910
        # fixed-string
1911
        out, err = self.run_bzr(['grep', '--no-recursive', '-r', '-1',
1912
            '-L', 'HELLO'])
1913
1914
        self.assertContainsRe(out, "^file1.txt~7$", flags=TestGrep._reflags)
1915
        self.assertEqual(len(out.splitlines()), 1)
1916
1917
        # regex
1918
        out, err = self.run_bzr(['grep', '--no-recursive', '-r', '-1',
1919
            '-L', '.ELLO'])
1920
1921
        self.assertContainsRe(out, "^file1.txt~7$", flags=TestGrep._reflags)
1922
        self.assertEqual(len(out.splitlines()), 1)
1923
0.40.131 by Parth Malwankar
bzr grep now allows grepping with -r even when no tree exists.
1924
    def test_no_tree(self):
1925
        """Ensure grep works without working tree.
1926
        """
1927
        wd0 = 'foobar0'
1928
        wd1 = 'foobar1'
1929
        self.make_branch_and_tree(wd0)
1930
        os.chdir(wd0)
1931
        self._mk_versioned_file('file0.txt')
1932
        os.chdir('..')
1933
        out, err = self.run_bzr(['branch', '--no-tree', wd0, wd1])
1934
        os.chdir(wd1)
1935
1936
        out, err = self.run_bzr(['grep', 'line1'], 3)
1937
        self.assertContainsRe(err, "Cannot search working tree", flags=TestGrep._reflags)
1938
        self.assertEqual(out, '')
1939
1940
        out, err = self.run_bzr(['grep', '-r', '1', 'line1'])
1941
        self.assertContainsRe(out, "file0.txt~1:line1", flags=TestGrep._reflags)
1942
        self.assertEqual(len(out.splitlines()), 2) # finds line1 and line10
1943
0.43.11 by Parth Malwankar
test cases for colored results.
1944
0.46.21 by Martin
Fix and test bytes/unicode issue but there's more to do in this area
1945
class TestNonAscii(GrepTestBase):
1946
    """Tests for non-ascii filenames and file contents"""
1947
1948
    _test_needs_features = [tests.UnicodeFilenameFeature]
1949
1950
    def test_unicode_only_file(self):
1951
        """Test filename and contents that requires a unicode encoding"""
1952
        tree = self.make_branch_and_tree(".")
1953
        contents = [u"\u1234"]
1954
        self.build_tree(contents)
1955
        tree.add(contents)
1956
        tree.commit("Initial commit")
1957
        as_utf8 = u"\u1234".encode("UTF-8")
1958
1959
        # GZ 2010-06-07: Note we can't actually grep for \u1234 as the pattern
1960
        #                is mangled according to the user encoding.
1961
        streams = self.run_bzr(["grep", "--files-with-matches",
1962
            u"contents"], encoding="UTF-8")
1963
        self.assertEqual(streams, (as_utf8 + "\n", ""))
1964
1965
        streams = self.run_bzr(["grep", "-r", "1", "--files-with-matches",
1966
            u"contents"], encoding="UTF-8")
1967
        self.assertEqual(streams, (as_utf8 + "~1\n", ""))
1968
1969
        fileencoding = osutils.get_user_encoding()
1970
        as_mangled = as_utf8.decode(fileencoding, "replace").encode("UTF-8")
1971
1972
        streams = self.run_bzr(["grep", "-n",
1973
            u"contents"], encoding="UTF-8")
1974
        self.assertEqual(streams, ("%s:1:contents of %s\n" %
1975
            (as_utf8, as_mangled), ""))
1976
1977
        streams = self.run_bzr(["grep", "-n", "-r", "1",
1978
            u"contents"], encoding="UTF-8")
1979
        self.assertEqual(streams, ("%s~1:1:contents of %s\n" %
1980
            (as_utf8, as_mangled), ""))
1981
1982
0.43.11 by Parth Malwankar
test cases for colored results.
1983
class TestColorGrep(GrepTestBase):
1984
    """Tests for the --color option."""
0.43.12 by Parth Malwankar
added feature for running color tests conditionally
1985
0.46.17 by Martin
Fix previously untested issue with colour and match-only, and test a related issue
1986
    # GZ 2010-06-05: Does this really require the feature? Nothing prints.
0.43.12 by Parth Malwankar
added feature for running color tests conditionally
1987
    _test_needs_features = [features.color_feature]
1988
0.43.11 by Parth Malwankar
test cases for colored results.
1989
    _rev_sep = color_string('~', fg=FG.BOLD_YELLOW)
1990
    _sep = color_string(':', fg=FG.BOLD_CYAN)
1991
1992
    def test_color_option(self):
1993
        """Ensure options for color are valid.
1994
        """
1995
        out, err = self.run_bzr(['grep', '--color', 'foo', 'bar'], 3)
1996
        self.assertEqual(out, '')
1997
        self.assertContainsRe(err, 'Valid values for --color are', flags=TestGrep._reflags)
1998
0.46.17 by Martin
Fix previously untested issue with colour and match-only, and test a related issue
1999
    def test_ver_matching_files(self):
2000
        """(versioned) Search for matches or no matches only"""
2001
        tree = self.make_branch_and_tree(".")
2002
        contents = ["d/", "d/aaa", "bbb"]
2003
        self.build_tree(contents)
2004
        tree.add(contents)
2005
        tree.commit("Initial commit")
2006
2007
        # GZ 2010-06-05: Maybe modify the working tree here
2008
2009
        streams = self.run_bzr(["grep", "--color", "always", "-r", "1",
2010
            "--files-with-matches", "aaa"])
2011
        self.assertEqual(streams, ("".join([
2012
            FG.MAGENTA, "d/aaa", self._rev_sep, "1", "\n"
2013
            ]), ""))
2014
2015
        streams = self.run_bzr(["grep", "--color", "always", "-r", "1",
2016
            "--files-without-match", "aaa"])
2017
        self.assertEqual(streams, ("".join([
2018
            FG.MAGENTA, "bbb", self._rev_sep, "1", "\n"
2019
            ]), ""))
2020
2021
    def test_wtree_matching_files(self):
2022
        """(wtree) Search for matches or no matches only"""
2023
        tree = self.make_branch_and_tree(".")
2024
        contents = ["d/", "d/aaa", "bbb"]
2025
        self.build_tree(contents)
2026
        tree.add(contents)
2027
        tree.commit("Initial commit")
2028
2029
        # GZ 2010-06-05: Maybe modify the working tree here
2030
2031
        streams = self.run_bzr(["grep", "--color", "always",
2032
            "--files-with-matches", "aaa"])
2033
        self.assertEqual(streams, ("".join([
2034
            FG.MAGENTA, "d/aaa", FG.NONE, "\n"
2035
            ]), ""))
2036
2037
        streams = self.run_bzr(["grep", "--color", "always",
2038
            "--files-without-match", "aaa"])
2039
        self.assertEqual(streams, ("".join([
2040
            FG.MAGENTA, "bbb", FG.NONE, "\n"
2041
            ]), ""))
2042
0.43.11 by Parth Malwankar
test cases for colored results.
2043
    def test_ver_basic_file(self):
2044
        """(versioned) Search for pattern in specfic file.
2045
        """
2046
        wd = 'foobar0'
2047
        self.make_branch_and_tree(wd)
2048
        os.chdir(wd)
2049
        lp = 'foo is foobar'
2050
        self._mk_versioned_file('file0.txt', line_prefix=lp, total_lines=1)
2051
2052
        # prepare colored result
2053
        foo = color_string('foo', fg=FG.BOLD_RED)
0.46.4 by Martin
Move remaining formatting setup out of _file_grep and save a colour switch as a side effect
2054
        res = (FG.MAGENTA + 'file0.txt'
0.43.11 by Parth Malwankar
test cases for colored results.
2055
            + self._rev_sep + '1' + self._sep
2056
            + foo + ' is ' + foo + 'bar1' + '\n')
0.40.133 by Parth Malwankar
added test case to check --color=auto
2057
        txt_res = 'file0.txt~1:foo is foobar1\n'
0.43.11 by Parth Malwankar
test cases for colored results.
2058
0.46.4 by Martin
Move remaining formatting setup out of _file_grep and save a colour switch as a side effect
2059
        nres = (FG.MAGENTA + 'file0.txt'
0.43.11 by Parth Malwankar
test cases for colored results.
2060
            + self._rev_sep + '1' + self._sep + '1' + self._sep
2061
            + foo + ' is ' + foo + 'bar1' + '\n')
2062
2063
        out, err = self.run_bzr(['grep', '--color',
2064
            'always', '-r', '1', 'foo'])
2065
        self.assertEqual(out, res)
2066
        self.assertEqual(len(out.splitlines()), 1)
2067
0.40.133 by Parth Malwankar
added test case to check --color=auto
2068
        # auto should produce plain text result
2069
        # as stdout is redireched here.
2070
        out, err = self.run_bzr(['grep', '--color',
2071
            'auto', '-r', '1', 'foo'])
2072
        self.assertEqual(out, txt_res)
2073
        self.assertEqual(len(out.splitlines()), 1)
2074
0.43.11 by Parth Malwankar
test cases for colored results.
2075
        out, err = self.run_bzr(['grep', '-i', '--color',
2076
            'always', '-r', '1', 'FOO'])
2077
        self.assertEqual(out, res)
2078
        self.assertEqual(len(out.splitlines()), 1)
2079
2080
        out, err = self.run_bzr(['grep', '--color',
2081
            'always', '-r', '1', 'f.o'])
2082
        self.assertEqual(out, res)
2083
        self.assertEqual(len(out.splitlines()), 1)
2084
2085
        out, err = self.run_bzr(['grep', '-i', '--color',
2086
            'always', '-r', '1', 'F.O'])
2087
        self.assertEqual(out, res)
2088
        self.assertEqual(len(out.splitlines()), 1)
2089
2090
        out, err = self.run_bzr(['grep', '-n', '--color',
2091
            'always', '-r', '1', 'foo'])
2092
        self.assertEqual(out, nres)
2093
        self.assertEqual(len(out.splitlines()), 1)
2094
2095
        out, err = self.run_bzr(['grep', '-n', '-i', '--color',
2096
            'always', '-r', '1', 'FOO'])
2097
        self.assertEqual(out, nres)
2098
        self.assertEqual(len(out.splitlines()), 1)
2099
2100
        out, err = self.run_bzr(['grep', '-n', '--color',
2101
            'always', '-r', '1', 'f.o'])
2102
        self.assertEqual(out, nres)
2103
        self.assertEqual(len(out.splitlines()), 1)
2104
2105
        out, err = self.run_bzr(['grep', '-n', '-i', '--color',
2106
            'always', '-r', '1', 'F.O'])
2107
        self.assertEqual(out, nres)
2108
        self.assertEqual(len(out.splitlines()), 1)
2109
2110
    def test_wtree_basic_file(self):
2111
        """(wtree) Search for pattern in specfic file.
2112
        """
2113
        wd = 'foobar0'
2114
        self.make_branch_and_tree(wd)
2115
        os.chdir(wd)
2116
        lp = 'foo is foobar'
2117
        self._mk_versioned_file('file0.txt', line_prefix=lp, total_lines=1)
2118
2119
        # prepare colored result
2120
        foo = color_string('foo', fg=FG.BOLD_RED)
0.46.4 by Martin
Move remaining formatting setup out of _file_grep and save a colour switch as a side effect
2121
        res = (FG.MAGENTA + 'file0.txt'
0.43.11 by Parth Malwankar
test cases for colored results.
2122
            + self._sep + foo + ' is ' + foo + 'bar1' + '\n')
2123
0.46.4 by Martin
Move remaining formatting setup out of _file_grep and save a colour switch as a side effect
2124
        nres = (FG.MAGENTA + 'file0.txt'
0.43.11 by Parth Malwankar
test cases for colored results.
2125
            + self._sep + '1' + self._sep
2126
            + foo + ' is ' + foo + 'bar1' + '\n')
2127
2128
        out, err = self.run_bzr(['grep', '--color',
2129
            'always', 'foo'])
2130
        self.assertEqual(out, res)
2131
        self.assertEqual(len(out.splitlines()), 1)
2132
2133
        out, err = self.run_bzr(['grep', '-i', '--color',
2134
            'always', 'FOO'])
2135
        self.assertEqual(out, res)
2136
        self.assertEqual(len(out.splitlines()), 1)
2137
2138
        out, err = self.run_bzr(['grep', '--color',
2139
            'always', 'f.o'])
2140
        self.assertEqual(out, res)
2141
        self.assertEqual(len(out.splitlines()), 1)
2142
2143
        out, err = self.run_bzr(['grep', '-i', '--color',
2144
            'always', 'F.O'])
2145
        self.assertEqual(out, res)
2146
        self.assertEqual(len(out.splitlines()), 1)
2147
2148
        out, err = self.run_bzr(['grep', '-n', '--color',
2149
            'always', 'foo'])
2150
        self.assertEqual(out, nres)
2151
        self.assertEqual(len(out.splitlines()), 1)
2152
2153
        out, err = self.run_bzr(['grep', '-n', '-i', '--color',
2154
            'always', 'FOO'])
2155
        self.assertEqual(out, nres)
2156
        self.assertEqual(len(out.splitlines()), 1)
2157
2158
        out, err = self.run_bzr(['grep', '-n', '--color',
2159
            'always', 'f.o'])
2160
        self.assertEqual(out, nres)
2161
        self.assertEqual(len(out.splitlines()), 1)
2162
2163
        out, err = self.run_bzr(['grep', '-n', '-i', '--color',
2164
            'always', 'F.O'])
2165
        self.assertEqual(out, nres)
2166
        self.assertEqual(len(out.splitlines()), 1)
2167
0.48.9 by Parth Malwankar
added inital test for 'grep -p'
2168
2169
# copied from bzrlib.tests.blackbox.test_diff
2170
def subst_dates(string):
2171
    """Replace date strings with constant values."""
2172
    return re.sub(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} [-\+]\d{4}',
2173
                  'YYYY-MM-DD HH:MM:SS +ZZZZ', string)
2174
2175
2176
class TestGrepDiff(tests.TestCaseWithTransport):
2177
2178
    def make_example_branch(self):
2179
        tree = self.make_branch_and_tree('.')
2180
        self.build_tree_contents([
2181
            ('hello', 'foo\n'),
2182
            ('goodbye', 'baz\n')])
2183
        tree.add(['hello'])
2184
        tree.commit('setup')
2185
        tree.add(['goodbye'])
2186
        tree.commit('setup')
2187
        return tree
2188
2189
    def test_grep_diff_basic(self):
2190
        """grep -p basic test."""
2191
        tree = self.make_example_branch()
2192
        self.build_tree_contents([('hello', 'hello world!\n')])
2193
        tree.commit('updated hello')
2194
        out, err = self.run_bzr(['grep', '-p', 'hello'])
2195
        self.assertEquals(err, '')
2196
        self.assertEqualDiff(subst_dates(out), '''\
0.48.10 by Parth Malwankar
more tests for 'grep --diff'
2197
=== revno:3 ===
0.48.9 by Parth Malwankar
added inital test for 'grep -p'
2198
  === modified file 'hello'
2199
    --- hello	YYYY-MM-DD HH:MM:SS +ZZZZ
2200
    +++ hello	YYYY-MM-DD HH:MM:SS +ZZZZ
2201
    +hello world!
0.48.10 by Parth Malwankar
more tests for 'grep --diff'
2202
=== revno:1 ===
0.48.9 by Parth Malwankar
added inital test for 'grep -p'
2203
  === added file 'hello'
2204
    --- hello	YYYY-MM-DD HH:MM:SS +ZZZZ
2205
    +++ hello	YYYY-MM-DD HH:MM:SS +ZZZZ
2206
''')
2207
0.48.10 by Parth Malwankar
more tests for 'grep --diff'
2208
    def test_grep_diff_revision(self):
2209
        """grep -p specific revision."""
2210
        tree = self.make_example_branch()
2211
        self.build_tree_contents([('hello', 'hello world!\n')])
2212
        tree.commit('updated hello')
2213
        out, err = self.run_bzr(['grep', '-p', '-r', '3', 'hello'])
2214
        self.assertEquals(err, '')
2215
        self.assertEqualDiff(subst_dates(out), '''\
2216
=== revno:3 ===
2217
  === modified file 'hello'
2218
    --- hello	YYYY-MM-DD HH:MM:SS +ZZZZ
2219
    +++ hello	YYYY-MM-DD HH:MM:SS +ZZZZ
2220
    +hello world!
2221
''')
2222
2223
    def test_grep_diff_revision_range(self):
2224
        """grep -p revision range."""
2225
        tree = self.make_example_branch()
2226
        self.build_tree_contents([('hello', 'hello world!1\n')]) # rev 3
2227
        tree.commit('rev3')
2228
        self.build_tree_contents([('blah', 'hello world!2\n')]) # rev 4
2229
        tree.add('blah')
2230
        tree.commit('rev4')
2231
        open('hello', 'a').write('hello world!3\n')
2232
        #self.build_tree_contents([('hello', 'hello world!3\n')]) # rev 5
2233
        tree.commit('rev5')
2234
        out, err = self.run_bzr(['grep', '-p', '-r', '2..5', 'hello'])
2235
        self.assertEquals(err, '')
2236
        self.assertEqualDiff(subst_dates(out), '''\
2237
=== revno:5 ===
2238
  === modified file 'hello'
2239
    --- hello	YYYY-MM-DD HH:MM:SS +ZZZZ
2240
    +++ hello	YYYY-MM-DD HH:MM:SS +ZZZZ
2241
    +hello world!3
2242
=== revno:4 ===
2243
  === added file 'blah'
2244
    +hello world!2
2245
=== revno:3 ===
2246
  === modified file 'hello'
2247
    --- hello	YYYY-MM-DD HH:MM:SS +ZZZZ
2248
    +++ hello	YYYY-MM-DD HH:MM:SS +ZZZZ
2249
    +hello world!1
2250
''')
2251
2252
    def test_grep_diff_color(self):
2253
        """grep -p color test."""
2254
        tree = self.make_example_branch()
2255
        self.build_tree_contents([('hello', 'hello world!\n')])
2256
        tree.commit('updated hello')
2257
        out, err = self.run_bzr(['grep', '--diff', '-r', '3',
2258
            '--color', 'always', 'hello'])
2259
        self.assertEquals(err, '')
2260
        revno = color_string('=== revno:3 ===', fg=FG.BOLD_BLUE) + '\n'
2261
        filename = color_string("  === modified file 'hello'", fg=FG.BOLD_MAGENTA) + '\n'
2262
        redhello = color_string('hello', fg=FG.BOLD_RED)
2263
        diffstr = '''\
2264
    --- hello	YYYY-MM-DD HH:MM:SS +ZZZZ
2265
    +++ hello	YYYY-MM-DD HH:MM:SS +ZZZZ
2266
    +hello world!
2267
'''
2268
        diffstr = diffstr.replace('hello', redhello)
2269
        self.assertEqualDiff(subst_dates(out), revno + filename + diffstr)
2270
2271
    def test_grep_norevs(self):
2272
        """grep -p with zero revisions."""
2273
        out, err = self.run_bzr(['init'])
2274
        out, err = self.run_bzr(['grep', '--diff', 'foo'], 3)
2275
        self.assertEquals(out, '')
2276
        self.assertContainsRe(err, "ERROR:.*revision.* does not exist in branch")
0.48.9 by Parth Malwankar
added inital test for 'grep -p'
2277