/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
0.40.26 by Parth Malwankar
test passing for multiple matches
23
open('/home/parthm/tmp/re.txt', 'w')
24
0.40.11 by Parth Malwankar
added basic test
25
class TestGrep(tests.TestCaseWithTransport):
0.40.25 by Parth Malwankar
added test case for multilevel dir.
26
    def _str_contains(self, base, pattern, flags=re.MULTILINE|re.DOTALL):
0.40.26 by Parth Malwankar
test passing for multiple matches
27
        res = re.findall(pattern, base, flags)
28
        return res != []
0.40.11 by Parth Malwankar
added basic test
29
0.40.26 by Parth Malwankar
test passing for multiple matches
30
    def _mk_file(self, path, line_prefix, total_lines, versioned):
0.40.13 by Parth Malwankar
added tests for -R and -i
31
        text=''
32
        for i in range(total_lines):
33
            text += line_prefix + str(i+1) + "\n"
34
0.40.12 by Parth Malwankar
added test for versioned file
35
        open(path, 'w').write(text)
36
        if versioned:
37
            self.run_bzr(['add', path])
0.40.25 by Parth Malwankar
added test case for multilevel dir.
38
            self.run_bzr(['ci', '-m', '"' + path + '"'])
0.40.12 by Parth Malwankar
added test for versioned file
39
0.40.13 by Parth Malwankar
added tests for -R and -i
40
    def _mk_unversioned_file(self, path, line_prefix='line', total_lines=10):
0.40.26 by Parth Malwankar
test passing for multiple matches
41
        self._mk_file(path, line_prefix, total_lines, versioned=False)
0.40.13 by Parth Malwankar
added tests for -R and -i
42
43
    def _mk_versioned_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=True)
0.40.13 by Parth Malwankar
added tests for -R and -i
45
46
    def _mk_dir(self, path, versioned):
47
        os.mkdir(path)
48
        if versioned:
49
            self.run_bzr(['add', path])
0.40.26 by Parth Malwankar
test passing for multiple matches
50
            self.run_bzr(['ci', '-m', '"' + path + '"'])
0.40.13 by Parth Malwankar
added tests for -R and -i
51
52
    def _mk_unversioned_dir(self, path):
0.40.26 by Parth Malwankar
test passing for multiple matches
53
        self._mk_dir(path, versioned=False)
0.40.13 by Parth Malwankar
added tests for -R and -i
54
55
    def _mk_versioned_dir(self, path):
56
        self._mk_dir(path, versioned=True)
57
58
    def test_basic_unversioned_file(self):
0.40.16 by Parth Malwankar
tree.get_file_lines is now used to get lines of text
59
        """search for pattern in specfic file. should issue warning."""
0.40.11 by Parth Malwankar
added basic test
60
        wd = 'foobar0'
61
        self.make_branch_and_tree(wd)
62
        os.chdir(wd)
0.40.13 by Parth Malwankar
added tests for -R and -i
63
        self._mk_unversioned_file('file0.txt')
0.40.11 by Parth Malwankar
added basic test
64
        out, err = self.run_bzr(['grep', 'line1', 'file0.txt'])
0.40.24 by Parth Malwankar
added support for --line-number.
65
        self.assertFalse(out, self._str_contains(out, "file0.txt:line1"))
0.40.11 by Parth Malwankar
added basic test
66
        self.assertTrue(err, self._str_contains(err, "warning:.*file0.txt.*not versioned\."))
67
0.40.13 by Parth Malwankar
added tests for -R and -i
68
    def test_basic_versioned_file(self):
0.40.12 by Parth Malwankar
added test for versioned file
69
        """search for pattern in specfic file"""
70
        wd = 'foobar0'
71
        self.make_branch_and_tree(wd)
72
        os.chdir(wd)
0.40.13 by Parth Malwankar
added tests for -R and -i
73
        self._mk_versioned_file('file0.txt')
0.40.12 by Parth Malwankar
added test for versioned file
74
        out, err = self.run_bzr(['grep', 'line1', 'file0.txt'])
0.40.24 by Parth Malwankar
added support for --line-number.
75
        self.assertTrue(out, self._str_contains(out, "file0.txt:line1"))
0.40.12 by Parth Malwankar
added test for versioned file
76
        self.assertFalse(err, self._str_contains(err, "warning:.*file0.txt.*not versioned\."))
77
0.40.26 by Parth Malwankar
test passing for multiple matches
78
    def test_multiple_files(self):
79
        """search for pattern in multiple files"""
0.40.25 by Parth Malwankar
added test case for multilevel dir.
80
        wd = 'foobar0'
81
        self.make_branch_and_tree(wd)
82
        os.chdir(wd)
0.40.26 by Parth Malwankar
test passing for multiple matches
83
        self._mk_versioned_file('file0.txt', total_lines=2)
84
        self._mk_versioned_file('file1.txt', total_lines=2)
85
        self._mk_versioned_file('file2.txt', total_lines=2)
86
        out, err = self.run_bzr(['grep', 'line[1-2]'])
87
88
        self.assertTrue(out, self._str_contains(out, "file0.txt:line1"))
89
        self.assertTrue(out, self._str_contains(out, "file0.txt:line2"))
90
        self.assertTrue(out, self._str_contains(out, "file1.txt:line1"))
91
        self.assertTrue(out, self._str_contains(out, "file1.txt:line2"))
92
        self.assertTrue(out, self._str_contains(out, "file2.txt:line1"))
93
        self.assertTrue(out, self._str_contains(out, "file2.txt:line2"))
0.40.25 by Parth Malwankar
added test case for multilevel dir.
94
0.40.27 by Parth Malwankar
added test for null option
95
    def test_null_option(self):
96
        """--null option should use NUL instead of newline"""
97
        wd = 'foobar0'
98
        self.make_branch_and_tree(wd)
99
        os.chdir(wd)
100
        self._mk_versioned_file('file0.txt', total_lines=3)
101
102
        out, err = self.run_bzr(['grep', '--null', 'line[1-3]'])
103
        self.assertTrue(out == "file0.txt:line1\0file0.txt:line2\0file0.txt:line3\0")
104
105
        out, err = self.run_bzr(['grep', '-Z', 'line[1-3]'])
106
        self.assertTrue(out == "file0.txt:line1\0file0.txt:line2\0file0.txt:line3\0")
107
0.40.13 by Parth Malwankar
added tests for -R and -i
108
    def test_versioned_file_in_dir_no_recurse(self):
109
        """should not recurse without -R"""
110
        wd = 'foobar0'
111
        self.make_branch_and_tree(wd)
112
        os.chdir(wd)
113
        self._mk_versioned_dir('dir0')
114
        self._mk_versioned_file('dir0/file0.txt')
115
        out, err = self.run_bzr(['grep', 'line1'])
0.40.24 by Parth Malwankar
added support for --line-number.
116
        self.assertFalse(out, self._str_contains(out, "file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
117
118
    def test_versioned_file_in_dir_recurse(self):
119
        """should find pattern in hierarchy with -R"""
120
        wd = 'foobar0'
121
        self.make_branch_and_tree(wd)
122
        os.chdir(wd)
123
        self._mk_versioned_dir('dir0')
124
        self._mk_versioned_file('dir0/file0.txt')
125
        out, err = self.run_bzr(['grep', '-R', 'line1'])
0.40.24 by Parth Malwankar
added support for --line-number.
126
        self.assertTrue(out, self._str_contains(out, "^dir0/file0.txt:line1"))
127
        out, err = self.run_bzr(['grep', '--recursive', 'line1'])
128
        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.
129
130
    def test_versioned_file_within_dir(self):
131
        """search for pattern while in nested dir"""
132
        wd = 'foobar0'
133
        self.make_branch_and_tree(wd)
134
        os.chdir(wd)
135
        self._mk_versioned_dir('dir0')
136
        self._mk_versioned_file('dir0/file0.txt')
137
        os.chdir('dir0')
138
        out, err = self.run_bzr(['grep', 'line1'])
0.40.24 by Parth Malwankar
added support for --line-number.
139
        self.assertTrue(out, self._str_contains(out, "^file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
140
0.40.25 by Parth Malwankar
added test case for multilevel dir.
141
    def test_versioned_file_within_dir_two_levels(self):
142
        """search for pattern while in nested dir (two levels)"""
143
        wd = 'foobar0'
144
        self.make_branch_and_tree(wd)
145
        os.chdir(wd)
146
        self._mk_versioned_dir('dir0')
147
        self._mk_versioned_dir('dir0/dir1')
148
        self._mk_versioned_file('dir0/dir1/file0.txt')
149
        os.chdir('dir0')
150
        out, err = self.run_bzr(['grep', '-R', 'line1'])
151
        self.assertTrue(out, self._str_contains(out, "^dir1/file0.txt:line1"))
152
        out, err = self.run_bzr(['grep', '--from-root', 'line1'])
153
        self.assertTrue(out, self._str_contains(out, "^dir0/dir1/file0.txt:line1"))
154
        out, err = self.run_bzr(['grep', 'line1'])
155
        self.assertFalse(out, self._str_contains(out, "file0.txt"))
156
0.40.13 by Parth Malwankar
added tests for -R and -i
157
    def test_ignore_case_no_match(self):
158
        """match fails without --ignore-case"""
159
        wd = 'foobar0'
160
        self.make_branch_and_tree(wd)
161
        os.chdir(wd)
162
        self._mk_versioned_file('file0.txt')
163
        out, err = self.run_bzr(['grep', 'LinE1', 'file0.txt'])
0.40.24 by Parth Malwankar
added support for --line-number.
164
        self.assertFalse(out, self._str_contains(out, "file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
165
166
    def test_ignore_case_match(self):
167
        """match fails without --ignore-case"""
168
        wd = 'foobar0'
169
        self.make_branch_and_tree(wd)
170
        os.chdir(wd)
171
        self._mk_versioned_file('file0.txt')
172
        out, err = self.run_bzr(['grep', '-i', 'LinE1', 'file0.txt'])
0.40.24 by Parth Malwankar
added support for --line-number.
173
        self.assertTrue(out, self._str_contains(out, "file0.txt:line1"))
174
        out, err = self.run_bzr(['grep', '--ignore-case', 'LinE1', 'file0.txt'])
175
        self.assertTrue(out, self._str_contains(out, "^file0.txt:line1"))
0.40.13 by Parth Malwankar
added tests for -R and -i
176
0.40.15 by Parth Malwankar
some fixes and test updates
177
    def test_from_root_fail(self):
0.40.14 by Parth Malwankar
added test for --from-root
178
        """match should fail without --from-root"""
179
        wd = 'foobar0'
180
        self.make_branch_and_tree(wd)
181
        os.chdir(wd)
182
        self._mk_versioned_file('file0.txt')
183
        self._mk_versioned_dir('dir0')
184
        os.chdir('dir0')
185
        out, err = self.run_bzr(['grep', 'line1'])
0.40.24 by Parth Malwankar
added support for --line-number.
186
        self.assertFalse(out, self._str_contains(out, ".*file0.txt:line1"))
0.40.14 by Parth Malwankar
added test for --from-root
187
0.40.15 by Parth Malwankar
some fixes and test updates
188
    def test_from_root_pass(self):
0.40.14 by Parth Malwankar
added test for --from-root
189
        """match pass with --from-root"""
190
        wd = 'foobar0'
191
        self.make_branch_and_tree(wd)
192
        os.chdir(wd)
193
        self._mk_versioned_file('file0.txt')
194
        self._mk_versioned_dir('dir0')
195
        os.chdir('dir0')
196
        out, err = self.run_bzr(['grep', '--from-root', 'line1'])
0.40.24 by Parth Malwankar
added support for --line-number.
197
        self.assertTrue(out, self._str_contains(out, ".*file0.txt:line1"))
198
199
    def test_with_line_number(self):
200
        """search for pattern with --line-number"""
201
        wd = 'foobar0'
202
        self.make_branch_and_tree(wd)
203
        os.chdir(wd)
204
        self._mk_versioned_file('file0.txt')
205
        out, err = self.run_bzr(['grep', '--line-number', 'line3', 'file0.txt'])
206
        self.assertTrue(out, self._str_contains(out, "file0.txt:3:line1"))
207
        out, err = self.run_bzr(['grep', '-n', 'line1', 'file0.txt'])
208
        self.assertTrue(out, self._str_contains(out, "file0.txt:1:line1"))
0.40.14 by Parth Malwankar
added test for --from-root
209
0.40.13 by Parth Malwankar
added tests for -R and -i
210