14
14
# You should have received a copy of the GNU General Public License
15
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
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
18
from bzrlib.globbing import (
22
23
from bzrlib.tests import (
171
172
[u'foo/x', u'foo/bax', u'foo/a.x', u'foo/.x', u'foo/.q.x'],
172
173
[u'foo/bar/bax']),
174
[u'\u8336/x', u'foo/x', u'foo/bax', u'x/a.x', u'.foo/x',
175
[u'\u8336/x', u'foo/x', u'foo/bax', u'x/a.x', u'.foo/x',
175
176
u'\u8336/.x', u'foo/.q.x'],
176
177
[u'foo/bar/bax']),
178
179
[u'foo', u'foo.bar'],
179
180
[u'.foo', u'foo/bar', u'foo/.bar']),
181
[u'bar', u'foobar', ur'foo\nbar', u'foo.bar', u'foo/bar',
182
[u'bar', u'foobar', ur'foo\nbar', u'foo.bar', u'foo/bar',
182
183
u'foo/foobar', u'foo/f.bar', u'.bar', u'foo/.bar'],
191
192
[u'foox', u'foo/bax', u'foo/.x', u'foo/bar/bax']),
193
194
[u'bar', u'foo/bar'],
194
[u'foobar', u'foo.bar', u'foo/foobar', u'foo/f.bar',
195
[u'foobar', u'foo.bar', u'foo/foobar', u'foo/f.bar',
195
196
u'.bar', u'foo/.bar']),
196
197
# check that we ignore extra *s, so *** is treated like ** not *.
199
200
[u'foox', u'foo/bax', u'foo/.x', u'foo/bar/bax']),
201
202
[u'bar', u'foo/bar'],
202
[u'foobar', u'foo.bar', u'foo/foobar', u'foo/f.bar',
203
[u'foobar', u'foo.bar', u'foo/foobar', u'foo/f.bar',
203
204
u'.bar', u'foo/.bar']),
204
205
# the remaining tests check that ** is interpreted as *
205
206
# unless it is a whole path component
216
217
[u'foo', u'foo.bar'],
217
218
[u'.foo', u'foo/bar', u'foo/.bar']),
219
[u'bar', u'foobar', ur'foo\nbar', u'foo.bar', u'foo/bar',
220
[u'bar', u'foobar', ur'foo\nbar', u'foo.bar', u'foo/bar',
220
221
u'foo/foobar', u'foo/f.bar', u'.bar', u'foo/.bar'],
257
258
def test_leading_asterisk_dot(self):
258
259
self.assertMatch([
260
[u'foo/bar/baz.x', u'\u8336/Q.x', u'foo.y.x', u'.foo.x',
261
[u'foo/bar/baz.x', u'\u8336/Q.x', u'foo.y.x', u'.foo.x',
261
262
u'bar/.foo.x', u'.x',],
293
294
def test_large_globset(self):
294
295
"""tests that the globster can handle a large set of patterns.
296
Large is defined as more than supported by python regex groups,
297
Large is defined as more than supported by python regex groups,
298
299
This test assumes the globs are broken into regexs containing 99
318
319
globster = _OrderedGlobster(reversed(patterns))
319
320
self.assertEqual(u'bar.*', globster.match('bar.foo'))
320
321
self.assertEqual(None, globster.match('foo.bar'))
324
class TestNormalizePattern(TestCase):
326
def test_backslashes(self):
327
"""tests that backslashes are converted to forward slashes, multiple
328
backslashes are collapsed to single forward slashes and trailing
329
backslashes are removed"""
330
self.assertEqual(u'/', normalize_pattern(u'\\'))
331
self.assertEqual(u'/', normalize_pattern(u'\\\\'))
332
self.assertEqual(u'/foo/bar', normalize_pattern(u'\\foo\\bar'))
333
self.assertEqual(u'foo/bar', normalize_pattern(u'foo\\bar\\'))
334
self.assertEqual(u'/foo/bar', normalize_pattern(u'\\\\foo\\\\bar\\\\'))
336
def test_forward_slashes(self):
337
"""tests that multiple foward slashes are collapsed to single forward
338
slashes and trailing forward slashes are removed"""
339
self.assertEqual(u'/', normalize_pattern(u'/'))
340
self.assertEqual(u'/', normalize_pattern(u'//'))
341
self.assertEqual(u'/foo/bar', normalize_pattern(u'/foo/bar'))
342
self.assertEqual(u'foo/bar', normalize_pattern(u'foo/bar/'))
343
self.assertEqual(u'/foo/bar', normalize_pattern(u'//foo//bar//'))
345
def test_mixed_slashes(self):
346
"""tests that multiple mixed slashes are collapsed to single forward
347
slashes and trailing mixed slashes are removed"""
348
self.assertEqual(u'/foo/bar', normalize_pattern(u'\\/\\foo//\\///bar/\\\\/'))