/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.40.11 by Parth Malwankar
added basic test
1
# Copyright (C) 2010 Canonical Ltd
2
# Copyright (C) 2010 Parth Malwankar <parth.malwankar@gmail.com>
3
#
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
18
import os
19
import re
20
21
from bzrlib import tests
22
23
class TestGrep(tests.TestCaseWithTransport):
0.40.25 by Parth Malwankar
added test case for multilevel dir.
24
    def _str_contains(self, base, pattern, flags=re.MULTILINE|re.DOTALL):
0.40.26 by Parth Malwankar
test passing for multiple matches
25
        res = re.findall(pattern, base, flags)
26
        return res != []
0.40.11 by Parth Malwankar
added basic test
27
0.40.26 by Parth Malwankar
test passing for multiple matches
28
    def _mk_file(self, path, line_prefix, total_lines, versioned):
0.40.13 by Parth Malwankar
added tests for -R and -i
29
        text=''
30
        for i in range(total_lines):
31
            text += line_prefix + str(i+1) + "\n"
32
0.40.12 by Parth Malwankar
added test for versioned file
33
        open(path, 'w').write(text)
34
        if versioned:
35
            self.run_bzr(['add', path])
0.40.25 by Parth Malwankar
added test case for multilevel dir.
36
            self.run_bzr(['ci', '-m', '"' + path + '"'])
0.40.12 by Parth Malwankar
added test for versioned file
37
0.40.34 by Parth Malwankar
added tests for single revision history search
38
    def _update_file(self, path, text):
39
        """append text to file 'path' and check it in"""
40
        open(path, 'a').write(text)
41
        self.run_bzr(['ci', '-m', '"' + path + '"'])
42
0.40.13 by Parth Malwankar
added tests for -R and -i
43
    def _mk_unversioned_file(self, path, line_prefix='line', total_lines=10):
0.40.26 by Parth Malwankar
test passing for multiple matches
44
        self._mk_file(path, line_prefix, total_lines, versioned=False)
0.40.13 by Parth Malwankar
added tests for -R and -i
45
46
    def _mk_versioned_file(self, path, line_prefix='line', total_lines=10):
0.40.26 by Parth Malwankar
test passing for multiple matches
47
        self._mk_file(path, line_prefix, total_lines, versioned=True)
0.40.13 by Parth Malwankar
added tests for -R and -i
48
49
    def _mk_dir(self, path, versioned):
50
        os.mkdir(path)
51
        if versioned:
52
            self.run_bzr(['add', path])
0.40.26 by Parth Malwankar
test passing for multiple matches
53
            self.run_bzr(['ci', '-m', '"' + path + '"'])
0.40.13 by Parth Malwankar
added tests for -R and -i
54
55
    def _mk_unversioned_dir(self, path):
0.40.26 by Parth Malwankar
test passing for multiple matches
56
        self._mk_dir(path, versioned=False)
0.40.13 by Parth Malwankar
added tests for -R and -i
57
58
    def _mk_versioned_dir(self, path):
59
        self._mk_dir(path, versioned=True)
60
61
    def test_basic_unversioned_file(self):
0.40.16 by Parth Malwankar
tree.get_file_lines is now used to get lines of text
62
        """search for pattern in specfic file. should issue warning."""
0.40.11 by Parth Malwankar
added basic test
63
        wd = 'foobar0'
64
        self.make_branch_and_tree(wd)
65
        os.chdir(wd)
0.40.13 by Parth Malwankar
added tests for -R and -i
66
        self._mk_unversioned_file('file0.txt')
0.40.11 by Parth Malwankar
added basic test
67
        out, err = self.run_bzr(['grep', 'line1', 'file0.txt'])
0.40.24 by Parth Malwankar
added support for --line-number.
68
        self.assertFalse(out, self._str_contains(out, "file0.txt:line1"))
0.40.33 by Parth Malwankar
better message while skipping unversioned file
69
        self.assertTrue(err, self._str_contains(err, "warning: skipped.*file0.txt.*\."))
0.40.11 by Parth Malwankar
added basic test
70
0.40.13 by Parth Malwankar
added tests for -R and -i
71
    def test_basic_versioned_file(self):
0.40.12 by Parth Malwankar
added test for versioned file
72
        """search for pattern in specfic file"""
73
        wd = 'foobar0'
74
        self.make_branch_and_tree(wd)
75
        os.chdir(wd)
0.40.13 by Parth Malwankar
added tests for -R and -i
76
        self._mk_versioned_file('file0.txt')
0.40.12 by Parth Malwankar
added test for versioned file
77
        out, err = self.run_bzr(['grep', 'line1', 'file0.txt'])
0.40.24 by Parth Malwankar
added support for --line-number.
78
        self.assertTrue(out, self._str_contains(out, "file0.txt:line1"))
0.40.33 by Parth Malwankar
better message while skipping unversioned file
79
        self.assertFalse(err, self._str_contains(err, "warning: skipped.*file0.txt.*\."))
0.40.12 by Parth Malwankar
added test for versioned file
80
0.40.26 by Parth Malwankar
test passing for multiple matches
81
    def test_multiple_files(self):
82
        """search for pattern in multiple files"""
0.40.25 by Parth Malwankar
added test case for multilevel dir.
83
        wd = 'foobar0'
84
        self.make_branch_and_tree(wd)
85
        os.chdir(wd)
0.40.26 by Parth Malwankar
test passing for multiple matches
86
        self._mk_versioned_file('file0.txt', total_lines=2)
87
        self._mk_versioned_file('file1.txt', total_lines=2)
88
        self._mk_versioned_file('file2.txt', total_lines=2)
89
        out, err = self.run_bzr(['grep', 'line[1-2]'])
90
91
        self.assertTrue(out, self._str_contains(out, "file0.txt:line1"))
92
        self.assertTrue(out, self._str_contains(out, "file0.txt:line2"))
93
        self.assertTrue(out, self._str_contains(out, "file1.txt:line1"))
94
        self.assertTrue(out, self._str_contains(out, "file1.txt:line2"))
95
        self.assertTrue(out, self._str_contains(out, "file2.txt:line1"))
96
        self.assertTrue(out, self._str_contains(out, "file2.txt:line2"))
0.40.25 by Parth Malwankar
added test case for multilevel dir.
97
0.40.27 by Parth Malwankar
added test for null option
98
    def test_null_option(self):
99
        """--null option should use NUL instead of newline"""
100
        wd = 'foobar0'
101
        self.make_branch_and_tree(wd)
102
        os.chdir(wd)
103
        self._mk_versioned_file('file0.txt', total_lines=3)
104
105
        out, err = self.run_bzr(['grep', '--null', 'line[1-3]'])
106
        self.assertTrue(out == "file0.txt:line1\0file0.txt:line2\0file0.txt:line3\0")
107
108
        out, err = self.run_bzr(['grep', '-Z', 'line[1-3]'])
109
        self.assertTrue(out == "file0.txt:line1\0file0.txt:line2\0file0.txt:line3\0")
110
0.40.13 by Parth Malwankar
added tests for -R and -i
111
    def test_versioned_file_in_dir_no_recurse(self):
112
        """should not recurse without -R"""
113
        wd = 'foobar0'
114
        self.make_branch_and_tree(wd)
115
        os.chdir(wd)
116
        self._mk_versioned_dir('dir0')
117
        self._mk_versioned_file('dir0/file0.txt')
118
        out, err = self.run_bzr(['grep', 'line1'])
0.40.24 by Parth Malwankar
added support for --line-number.
119
        self.assertFalse(out, self._str_contains(out, "file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
120
121
    def test_versioned_file_in_dir_recurse(self):
122
        """should find pattern in hierarchy with -R"""
123
        wd = 'foobar0'
124
        self.make_branch_and_tree(wd)
125
        os.chdir(wd)
126
        self._mk_versioned_dir('dir0')
127
        self._mk_versioned_file('dir0/file0.txt')
128
        out, err = self.run_bzr(['grep', '-R', 'line1'])
0.40.24 by Parth Malwankar
added support for --line-number.
129
        self.assertTrue(out, self._str_contains(out, "^dir0/file0.txt:line1"))
130
        out, err = self.run_bzr(['grep', '--recursive', 'line1'])
131
        self.assertTrue(out, self._str_contains(out, "^dir0/file0.txt:line1"))
0.40.23 by Parth Malwankar
added test case for search while inside dir.
132
133
    def test_versioned_file_within_dir(self):
134
        """search for pattern while in nested dir"""
135
        wd = 'foobar0'
136
        self.make_branch_and_tree(wd)
137
        os.chdir(wd)
138
        self._mk_versioned_dir('dir0')
139
        self._mk_versioned_file('dir0/file0.txt')
140
        os.chdir('dir0')
141
        out, err = self.run_bzr(['grep', 'line1'])
0.40.24 by Parth Malwankar
added support for --line-number.
142
        self.assertTrue(out, self._str_contains(out, "^file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
143
0.40.25 by Parth Malwankar
added test case for multilevel dir.
144
    def test_versioned_file_within_dir_two_levels(self):
145
        """search for pattern while in nested dir (two levels)"""
146
        wd = 'foobar0'
147
        self.make_branch_and_tree(wd)
148
        os.chdir(wd)
149
        self._mk_versioned_dir('dir0')
150
        self._mk_versioned_dir('dir0/dir1')
151
        self._mk_versioned_file('dir0/dir1/file0.txt')
152
        os.chdir('dir0')
153
        out, err = self.run_bzr(['grep', '-R', 'line1'])
154
        self.assertTrue(out, self._str_contains(out, "^dir1/file0.txt:line1"))
155
        out, err = self.run_bzr(['grep', '--from-root', 'line1'])
156
        self.assertTrue(out, self._str_contains(out, "^dir0/dir1/file0.txt:line1"))
157
        out, err = self.run_bzr(['grep', 'line1'])
158
        self.assertFalse(out, self._str_contains(out, "file0.txt"))
159
0.40.13 by Parth Malwankar
added tests for -R and -i
160
    def test_ignore_case_no_match(self):
161
        """match fails without --ignore-case"""
162
        wd = 'foobar0'
163
        self.make_branch_and_tree(wd)
164
        os.chdir(wd)
165
        self._mk_versioned_file('file0.txt')
166
        out, err = self.run_bzr(['grep', 'LinE1', 'file0.txt'])
0.40.24 by Parth Malwankar
added support for --line-number.
167
        self.assertFalse(out, self._str_contains(out, "file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
168
169
    def test_ignore_case_match(self):
170
        """match fails without --ignore-case"""
171
        wd = 'foobar0'
172
        self.make_branch_and_tree(wd)
173
        os.chdir(wd)
174
        self._mk_versioned_file('file0.txt')
175
        out, err = self.run_bzr(['grep', '-i', 'LinE1', 'file0.txt'])
0.40.24 by Parth Malwankar
added support for --line-number.
176
        self.assertTrue(out, self._str_contains(out, "file0.txt:line1"))
177
        out, err = self.run_bzr(['grep', '--ignore-case', 'LinE1', 'file0.txt'])
178
        self.assertTrue(out, self._str_contains(out, "^file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
179
0.40.15 by Parth Malwankar
some fixes and test updates
180
    def test_from_root_fail(self):
0.40.14 by Parth Malwankar
added test for --from-root
181
        """match should fail without --from-root"""
182
        wd = 'foobar0'
183
        self.make_branch_and_tree(wd)
184
        os.chdir(wd)
185
        self._mk_versioned_file('file0.txt')
186
        self._mk_versioned_dir('dir0')
187
        os.chdir('dir0')
188
        out, err = self.run_bzr(['grep', 'line1'])
0.40.24 by Parth Malwankar
added support for --line-number.
189
        self.assertFalse(out, self._str_contains(out, ".*file0.txt:line1"))
0.40.14 by Parth Malwankar
added test for --from-root
190
0.40.15 by Parth Malwankar
some fixes and test updates
191
    def test_from_root_pass(self):
0.40.14 by Parth Malwankar
added test for --from-root
192
        """match pass with --from-root"""
193
        wd = 'foobar0'
194
        self.make_branch_and_tree(wd)
195
        os.chdir(wd)
196
        self._mk_versioned_file('file0.txt')
197
        self._mk_versioned_dir('dir0')
198
        os.chdir('dir0')
199
        out, err = self.run_bzr(['grep', '--from-root', 'line1'])
0.40.24 by Parth Malwankar
added support for --line-number.
200
        self.assertTrue(out, self._str_contains(out, ".*file0.txt:line1"))
201
202
    def test_with_line_number(self):
203
        """search for pattern with --line-number"""
204
        wd = 'foobar0'
205
        self.make_branch_and_tree(wd)
206
        os.chdir(wd)
207
        self._mk_versioned_file('file0.txt')
208
        out, err = self.run_bzr(['grep', '--line-number', 'line3', 'file0.txt'])
209
        self.assertTrue(out, self._str_contains(out, "file0.txt:3:line1"))
210
        out, err = self.run_bzr(['grep', '-n', 'line1', 'file0.txt'])
211
        self.assertTrue(out, self._str_contains(out, "file0.txt:1:line1"))
0.40.14 by Parth Malwankar
added test for --from-root
212
0.40.34 by Parth Malwankar
added tests for single revision history search
213
    def test_basic_history_grep_file(self):
214
        """search for pattern in specific revision number in a file"""
215
        wd = 'foobar0'
216
        fname = 'file0.txt'
217
        self.make_branch_and_tree(wd)
218
        os.chdir(wd)
219
        self._mk_versioned_file(fname)
220
        self._update_file(fname, text="v2 text\n")
221
        self._update_file(fname, text="v3 text\n")
222
        self._update_file(fname, text="v4 text\n")
223
224
        # rev 2 should not have text 'v3'
225
        out, err = self.run_bzr(['grep', '-r', '2', 'v3', fname])
226
        self.assertFalse(out, self._str_contains(out, "file0.txt"))
227
228
        # rev 3 should not have text 'v3'
229
        out, err = self.run_bzr(['grep', '-r', '3', 'v3', fname])
230
        self.assertTrue(out, self._str_contains(out, "file0.txt~3:v3.*"))
231
232
        # rev 3 should not have text 'v3' with line number
233
        out, err = self.run_bzr(['grep', '-r', '3', '-n', 'v3', fname])
234
        self.assertTrue(out, self._str_contains(out, "file0.txt~3:2:v3.*"))
235
236
    def test_basic_history_grep_full(self):
237
        """search for pattern in specific revision number in a file"""
238
        wd = 'foobar0'
239
        fname = 'file0.txt'
240
        self.make_branch_and_tree(wd)
241
        os.chdir(wd)
242
        self._mk_versioned_file(fname)              # rev1
243
        self._mk_versioned_file('file1.txt')        # rev2
244
        self._update_file(fname, text="v3 text\n")  # rev3
245
        self._update_file(fname, text="v4 text\n")  # rev4
246
        self._update_file(fname, text="v5 text\n")  # rev5
247
248
        # rev 2 should not have text 'v3'
249
        out, err = self.run_bzr(['grep', '-r', '2', 'v3'])
250
        self.assertFalse(out, self._str_contains(out, "file0.txt"))
251
252
        # rev 3 should not have text 'v3'
253
        out, err = self.run_bzr(['grep', '-r', '3', 'v3'])
254
        self.assertTrue(out, self._str_contains(out, "file0.txt~3:v3.*"))
255
256
        # rev 3 should not have text 'v3' with line number
257
        out, err = self.run_bzr(['grep', '-r', '3', '-n', 'v3'])
258
        self.assertTrue(out, self._str_contains(out, "file0.txt~3:2:v3.*"))
0.40.13 by Parth Malwankar
added tests for -R and -i
259