~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_globbing.py

  • Committer: Ian Clatworthy
  • Date: 2007-08-14 03:59:22 UTC
  • mto: (2733.1.1 ianc-integration)
  • mto: This revision was merged to the branch mainline in revision 2734.
  • Revision ID: ian.clatworthy@internode.on.net-20070814035922-siavg542cwvkf4r5
Fix pretty doc generation so works for all html docs

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
#
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
17
 
18
18
from bzrlib.globbing import (
19
19
    Globster,
20
 
    ExceptionGlobster,
21
 
    _OrderedGlobster,
22
 
    normalize_pattern
23
20
    )
24
21
from bzrlib.tests import (
25
 
    TestCase,
 
22
    TestCase, 
26
23
    TestCaseInTempDir,
27
24
    )
28
25
 
173
170
             [u'foo/x', u'foo/bax', u'foo/a.x', u'foo/.x', u'foo/.q.x'],
174
171
             [u'foo/bar/bax']),
175
172
            (u'*/*x',
176
 
             [u'\u8336/x', u'foo/x', u'foo/bax', u'x/a.x', u'.foo/x',
 
173
             [u'\u8336/x', u'foo/x', u'foo/bax', u'x/a.x', u'.foo/x', 
177
174
              u'\u8336/.x', u'foo/.q.x'],
178
175
             [u'foo/bar/bax']),
179
176
            (u'f*',
180
177
             [u'foo', u'foo.bar'],
181
178
             [u'.foo', u'foo/bar', u'foo/.bar']),
182
179
            (u'*bar',
183
 
             [u'bar', u'foobar', ur'foo\nbar', u'foo.bar', u'foo/bar',
 
180
             [u'bar', u'foobar', ur'foo\nbar', u'foo.bar', u'foo/bar', 
184
181
              u'foo/foobar', u'foo/f.bar', u'.bar', u'foo/.bar'],
185
182
             []),
186
183
            ])
193
190
             [u'foox', u'foo/bax', u'foo/.x', u'foo/bar/bax']),
194
191
            (u'**/bar',
195
192
             [u'bar', u'foo/bar'],
196
 
             [u'foobar', u'foo.bar', u'foo/foobar', u'foo/f.bar',
 
193
             [u'foobar', u'foo.bar', u'foo/foobar', u'foo/f.bar', 
197
194
              u'.bar', u'foo/.bar']),
198
195
            # check that we ignore extra *s, so *** is treated like ** not *.
199
196
            (u'foo/***/x',
201
198
             [u'foox', u'foo/bax', u'foo/.x', u'foo/bar/bax']),
202
199
            (u'***/bar',
203
200
             [u'bar', u'foo/bar'],
204
 
             [u'foobar', u'foo.bar', u'foo/foobar', u'foo/f.bar',
 
201
             [u'foobar', u'foo.bar', u'foo/foobar', u'foo/f.bar', 
205
202
              u'.bar', u'foo/.bar']),
206
203
            # the remaining tests check that ** is interpreted as *
207
204
            # unless it is a whole path component
218
215
             [u'foo', u'foo.bar'],
219
216
             [u'.foo', u'foo/bar', u'foo/.bar']),
220
217
            (u'**bar',
221
 
             [u'bar', u'foobar', ur'foo\nbar', u'foo.bar', u'foo/bar',
 
218
             [u'bar', u'foobar', ur'foo\nbar', u'foo.bar', u'foo/bar', 
222
219
              u'foo/foobar', u'foo/f.bar', u'.bar', u'foo/.bar'],
223
220
             []),
224
221
            ])
259
256
    def test_leading_asterisk_dot(self):
260
257
        self.assertMatch([
261
258
            (u'*.x',
262
 
             [u'foo/bar/baz.x', u'\u8336/Q.x', u'foo.y.x', u'.foo.x',
 
259
             [u'foo/bar/baz.x', u'\u8336/Q.x', u'foo.y.x', u'.foo.x', 
263
260
              u'bar/.foo.x', u'.x',],
264
261
             [u'foo.x.y']),
265
262
            (u'foo/*.bar',
295
292
    def test_large_globset(self):
296
293
        """tests that the globster can handle a large set of patterns.
297
294
 
298
 
        Large is defined as more than supported by python regex groups,
 
295
        Large is defined as more than supported by python regex groups, 
299
296
        i.e. 99.
300
297
        This test assumes the globs are broken into regexs containing 99
301
298
        groups.
308
305
            self.assertEqual(patterns[x],globster.match(filename))
309
306
        self.assertEqual(None,globster.match('foobar.300'))
310
307
 
311
 
class TestExceptionGlobster(TestCase):
312
 
 
313
 
    def test_exclusion_patterns(self):
314
 
        """test that exception patterns are not matched"""
315
 
        patterns = [ u'*', u'!./local', u'!./local/**/*', u'!RE:\.z.*',u'!!./.zcompdump' ]
316
 
        globster = ExceptionGlobster(patterns)
317
 
        self.assertEqual(u'*', globster.match('tmp/foo.txt'))
318
 
        self.assertEqual(None, globster.match('local'))
319
 
        self.assertEqual(None, globster.match('local/bin/wombat'))
320
 
        self.assertEqual(None, globster.match('.zshrc'))
321
 
        self.assertEqual(None, globster.match('.zfunctions/fiddle/flam'))
322
 
        self.assertEqual(u'!!./.zcompdump', globster.match('.zcompdump'))
323
 
 
324
 
    def test_exclusion_order(self):
325
 
        """test that ordering of exclusion patterns does not matter"""
326
 
        patterns = [ u'static/**/*.html', u'!static/**/versionable.html']
327
 
        globster = ExceptionGlobster(patterns)
328
 
        self.assertEqual(u'static/**/*.html', globster.match('static/foo.html'))
329
 
        self.assertEqual(None, globster.match('static/versionable.html'))
330
 
        self.assertEqual(None, globster.match('static/bar/versionable.html'))
331
 
        globster = ExceptionGlobster(reversed(patterns))
332
 
        self.assertEqual(u'static/**/*.html', globster.match('static/foo.html'))
333
 
        self.assertEqual(None, globster.match('static/versionable.html'))
334
 
        self.assertEqual(None, globster.match('static/bar/versionable.html'))
335
 
 
336
 
class TestOrderedGlobster(TestCase):
337
 
 
338
 
    def test_ordered_globs(self):
339
 
        """test that the first match in a list is the one found"""
340
 
        patterns = [ u'*.foo', u'bar.*']
341
 
        globster = _OrderedGlobster(patterns)
342
 
        self.assertEqual(u'*.foo', globster.match('bar.foo'))
343
 
        self.assertEqual(None, globster.match('foo.bar'))
344
 
        globster = _OrderedGlobster(reversed(patterns))
345
 
        self.assertEqual(u'bar.*', globster.match('bar.foo'))
346
 
        self.assertEqual(None, globster.match('foo.bar'))
347
 
 
348
 
 
349
 
class TestNormalizePattern(TestCase):
350
 
 
351
 
    def test_backslashes(self):
352
 
        """tests that backslashes are converted to forward slashes, multiple
353
 
        backslashes are collapsed to single forward slashes and trailing
354
 
        backslashes are removed"""
355
 
        self.assertEqual(u'/', normalize_pattern(u'\\'))
356
 
        self.assertEqual(u'/', normalize_pattern(u'\\\\'))
357
 
        self.assertEqual(u'/foo/bar', normalize_pattern(u'\\foo\\bar'))
358
 
        self.assertEqual(u'foo/bar', normalize_pattern(u'foo\\bar\\'))
359
 
        self.assertEqual(u'/foo/bar', normalize_pattern(u'\\\\foo\\\\bar\\\\'))
360
 
 
361
 
    def test_forward_slashes(self):
362
 
        """tests that multiple foward slashes are collapsed to single forward
363
 
        slashes and trailing forward slashes are removed"""
364
 
        self.assertEqual(u'/', normalize_pattern(u'/'))
365
 
        self.assertEqual(u'/', normalize_pattern(u'//'))
366
 
        self.assertEqual(u'/foo/bar', normalize_pattern(u'/foo/bar'))
367
 
        self.assertEqual(u'foo/bar', normalize_pattern(u'foo/bar/'))
368
 
        self.assertEqual(u'/foo/bar', normalize_pattern(u'//foo//bar//'))
369
 
 
370
 
    def test_mixed_slashes(self):
371
 
        """tests that multiple mixed slashes are collapsed to single forward
372
 
        slashes and trailing mixed slashes are removed"""
373
 
        self.assertEqual(u'/foo/bar', normalize_pattern(u'\\/\\foo//\\///bar/\\\\/'))