/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_win32utils.py

  • Committer: John Arbash Meinel
  • Date: 2009-11-05 20:08:36 UTC
  • mfrom: (4787 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4788.
  • Revision ID: john@arbash-meinel.com-20091105200836-8e5jfn2h6l2ndh67
Merge bzr.dev 4787 and resolve NEWS

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
import os
18
18
import sys
19
19
 
20
 
from bzrlib import osutils
 
20
from bzrlib import (
 
21
    osutils,
 
22
    tests,
 
23
    win32utils,
 
24
    )
21
25
from bzrlib.tests import (
22
26
    Feature,
23
27
    TestCase,
26
30
    UnicodeFilenameFeature,
27
31
    )
28
32
from bzrlib.win32utils import glob_expand, get_app_path
29
 
from bzrlib import win32utils
30
33
 
31
34
 
32
35
# Features
261
264
        os.makedirs(u'\u1234\\.bzr')
262
265
        path = osutils.abspath(u'\u1234\\.bzr')
263
266
        win32utils.set_file_attr_hidden(path)
 
267
 
 
268
 
 
269
 
 
270
class TestUnicodeShlex(tests.TestCase):
 
271
 
 
272
    def assertAsTokens(self, expected, line):
 
273
        s = win32utils.UnicodeShlex(line)
 
274
        self.assertEqual(expected, list(s))
 
275
 
 
276
    def test_simple(self):
 
277
        self.assertAsTokens([(False, u'foo'), (False, u'bar'), (False, u'baz')],
 
278
                            u'foo bar baz')
 
279
 
 
280
    def test_ignore_multiple_spaces(self):
 
281
        self.assertAsTokens([(False, u'foo'), (False, u'bar')], u'foo  bar')
 
282
 
 
283
    def test_ignore_leading_space(self):
 
284
        self.assertAsTokens([(False, u'foo'), (False, u'bar')], u'  foo bar')
 
285
 
 
286
    def test_ignore_trailing_space(self):
 
287
        self.assertAsTokens([(False, u'foo'), (False, u'bar')], u'foo bar  ')
 
288
 
 
289
    def test_posix_quotations(self):
 
290
        self.assertAsTokens([(True, u'foo bar')], u'"foo bar"')
 
291
        self.assertAsTokens([(True, u'foo bar')], u"'foo bar'")
 
292
        self.assertAsTokens([(True, u'foo bar')], u"'fo''o b''ar'")
 
293
        self.assertAsTokens([(True, u'foo bar')], u'"fo""o b""ar"')
 
294
        self.assertAsTokens([(True, u'foo bar')], u'"fo"\'o b\'"ar"')
 
295
 
 
296
    def test_nested_quotations(self):
 
297
        self.assertAsTokens([(True, u'foo"" bar')], u"'foo\"\" bar'")
 
298
        self.assertAsTokens([(True, u'foo\'\' bar')], u"\"foo'' bar\"")
 
299
 
 
300
    def test_empty_result(self):
 
301
        self.assertAsTokens([], u'')
 
302
        self.assertAsTokens([], u'    ')
 
303
 
 
304
    def test_quoted_empty(self):
 
305
        self.assertAsTokens([(True, '')], u'""')
 
306
        self.assertAsTokens([(True, '')], u"''")
 
307
 
 
308
    def test_unicode_chars(self):
 
309
        self.assertAsTokens([(False, u'f\xb5\xee'), (False, u'\u1234\u3456')],
 
310
                             u'f\xb5\xee \u1234\u3456')
 
311
 
 
312
    def test_newline_in_quoted_section(self):
 
313
        self.assertAsTokens([(True, u'foo\nbar\nbaz\n')], u'"foo\nbar\nbaz\n"')
 
314
        self.assertAsTokens([(True, u'foo\nbar\nbaz\n')], u"'foo\nbar\nbaz\n'")
 
315
 
 
316
    def test_escape_chars(self):
 
317
        self.assertAsTokens([(False, u'foo\\bar')], u'foo\\bar')
 
318
 
 
319
    def test_escape_quote(self):
 
320
        self.assertAsTokens([(True, u'foo"bar')], u'"foo\\"bar"')
 
321
        self.assertAsTokens([(True, u'foo\\"bar')], u"'foo\\\"bar'")
 
322
 
 
323
    def test_double_escape(self):
 
324
        self.assertAsTokens([(True, u'foo\\bar')], u'"foo\\\\bar"')
 
325
        self.assertAsTokens([(True, u'foo\\\\bar')], u"'foo\\\\bar'")
 
326
        self.assertAsTokens([(False, u'foo\\\\bar')], u"foo\\\\bar")
 
327
 
 
328
 
 
329
class Test_CommandLineToArgv(tests.TestCaseInTempDir):
 
330
 
 
331
    def assertCommandLine(self, expected, line):
 
332
        self.assertEqual(expected, win32utils._command_line_to_argv(line))
 
333
 
 
334
    def test_glob_paths(self):
 
335
        self.build_tree(['a/', 'a/b.c', 'a/c.c', 'a/c.h'])
 
336
        self.assertCommandLine([u'a/b.c', u'a/c.c'], 'a/*.c')
 
337
        self.build_tree(['b/', 'b/b.c', 'b/d.c', 'b/d.h'])
 
338
        self.assertCommandLine([u'a/b.c', u'b/b.c'], '*/b.c')
 
339
        self.assertCommandLine([u'a/b.c', u'a/c.c', u'b/b.c', u'b/d.c'],
 
340
                               '*/*.c')
 
341
        # Bash style, just pass through the argument if nothing matches
 
342
        self.assertCommandLine([u'*/*.qqq'], '*/*.qqq')
 
343
 
 
344
    def test_quoted_globs(self):
 
345
        self.build_tree(['a/', 'a/b.c', 'a/c.c', 'a/c.h'])
 
346
        self.assertCommandLine([u'a/*.c'], '"a/*.c"')
 
347
        self.assertCommandLine([u'a/*.c'], "'a/*.c'")
 
348
 
 
349
    def test_slashes_changed(self):
 
350
        self.assertCommandLine([u'a/*.c'], '"a\\*.c"')
 
351
        # Expands the glob, but nothing matches
 
352
        self.assertCommandLine([u'a/*.c'], 'a\\*.c')
 
353
        self.assertCommandLine([u'a/foo.c'], 'a\\foo.c')