/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
5557.1.7 by John Arbash Meinel
Merge in the bzr.dev 5582
1
# Copyright (C) 2007-2011 Canonical Ltd
2617.5.1 by Kuno Meyer
Added direct unit tests for win32utils.glob_expand().
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2617.5.1 by Kuno Meyer
Added direct unit tests for win32utils.glob_expand().
16
5241.2.1 by Robert Collins
Merge up from 2.0/2.1:
17
"""Tests for win32utils."""
18
2681.4.2 by Alexander Belchenko
test for get_app_path
19
import os
2617.5.4 by Kuno Meyer
Included feedback on initial patch.
20
import sys
21
4786.1.1 by John Arbash Meinel
Work on doing globbing, etc for all commands on Windows.
22
from bzrlib import (
23
    osutils,
24
    tests,
25
    win32utils,
26
    )
4505.2.4 by Alexander Belchenko
guard tests with UnicodeFilenameFeature.
27
from bzrlib.tests import (
28
    Feature,
29
    TestCase,
30
    TestCaseInTempDir,
31
    TestSkipped,
32
    UnicodeFilenameFeature,
33
    )
5241.2.1 by Robert Collins
Merge up from 2.0/2.1:
34
from bzrlib.tests.features import backslashdir_feature
2681.4.2 by Alexander Belchenko
test for get_app_path
35
from bzrlib.win32utils import glob_expand, get_app_path
2617.5.4 by Kuno Meyer
Included feedback on initial patch.
36
37
3638.4.1 by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can
38
class _RequiredModuleFeature(Feature):
39
40
    def __init__(self, mod_name):
41
        self.mod_name = mod_name
42
        super(_RequiredModuleFeature, self).__init__()
2681.4.4 by Alexander Belchenko
test use Feature instead of TestSkipped
43
44
    def _probe(self):
45
        try:
3638.4.1 by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can
46
            __import__(self.mod_name)
2681.4.4 by Alexander Belchenko
test use Feature instead of TestSkipped
47
            return True
48
        except ImportError:
49
            return False
50
51
    def feature_name(self):
3638.4.1 by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can
52
        return self.mod_name
2681.4.4 by Alexander Belchenko
test use Feature instead of TestSkipped
53
3638.4.1 by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can
54
Win32RegistryFeature = _RequiredModuleFeature('_winreg')
55
CtypesFeature = _RequiredModuleFeature('ctypes')
56
Win32comShellFeature = _RequiredModuleFeature('win32com.shell')
5314.1.1 by Jason Spashett
Change test_win32utils.py so as not to fail tests if win32api module is not present.
57
Win32ApiFeature = _RequiredModuleFeature('win32api') 
2681.4.4 by Alexander Belchenko
test use Feature instead of TestSkipped
58
5314.1.2 by Jason Spashett
Adition of blank line for formatting.
59
2617.5.4 by Kuno Meyer
Included feedback on initial patch.
60
# Tests
61
# -----
2617.5.6 by Kuno Meyer
Incorporated feedback from the mailinglist.
62
2617.5.4 by Kuno Meyer
Included feedback on initial patch.
63
class TestWin32UtilsGlobExpand(TestCaseInTempDir):
2617.5.2 by Kuno Meyer
just reformatting
64
4789.20.1 by John Arbash Meinel
Updates to tests that were exercising filesystem globbing.
65
    _test_needs_features = []
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
66
2617.5.1 by Kuno Meyer
Added direct unit tests for win32utils.glob_expand().
67
    def test_empty_tree(self):
68
        self.build_tree([])
2617.5.2 by Kuno Meyer
just reformatting
69
        self._run_testset([
70
            [['a'], ['a']],
71
            [['?'], ['?']],
72
            [['*'], ['*']],
73
            [['a', 'a'], ['a', 'a']]])
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
74
4789.20.2 by John Arbash Meinel
Split the win32 globbing tests up a bit.
75
    def build_ascii_tree(self):
2617.5.1 by Kuno Meyer
Added direct unit tests for win32utils.glob_expand().
76
        self.build_tree(['a', 'a1', 'a2', 'a11', 'a.1',
77
                         'b', 'b1', 'b2', 'b3',
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
78
                         'c/', 'c/c1', 'c/c2',
2617.5.4 by Kuno Meyer
Included feedback on initial patch.
79
                         'd/', 'd/d1', 'd/d2', 'd/e/', 'd/e/e1'])
4789.20.2 by John Arbash Meinel
Split the win32 globbing tests up a bit.
80
81
    def build_unicode_tree(self):
82
        self.requireFeature(UnicodeFilenameFeature)
83
        self.build_tree([u'\u1234', u'\u1234\u1234', u'\u1235/',
84
                         u'\u1235/\u1235'])
85
86
    def test_tree_ascii(self):
87
        """Checks the glob expansion and path separation char
88
        normalization"""
89
        self.build_ascii_tree()
2617.5.2 by Kuno Meyer
just reformatting
90
        self._run_testset([
91
            # no wildcards
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
92
            [[u'a'], [u'a']],
93
            [[u'a', u'a' ], [u'a', u'a']],
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
94
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
95
            [[u'd'], [u'd']],
96
            [[u'd/'], [u'd/']],
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
97
2617.5.2 by Kuno Meyer
just reformatting
98
            # wildcards
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
99
            [[u'a*'], [u'a', u'a1', u'a2', u'a11', u'a.1']],
100
            [[u'?'], [u'a', u'b', u'c', u'd']],
101
            [[u'a?'], [u'a1', u'a2']],
102
            [[u'a??'], [u'a11', u'a.1']],
103
            [[u'b[1-2]'], [u'b1', u'b2']],
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
104
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
105
            [[u'd/*'], [u'd/d1', u'd/d2', u'd/e']],
4789.20.2 by John Arbash Meinel
Split the win32 globbing tests up a bit.
106
            [[u'?/*'], [u'c/c1', u'c/c2', u'd/d1', u'd/d2', u'd/e']],
107
            [[u'*/*'], [u'c/c1', u'c/c2', u'd/d1', u'd/d2', u'd/e']],
108
            [[u'*/'], [u'c/', u'd/']],
109
            ])
110
111
    def test_backslash_globbing(self):
5241.2.1 by Robert Collins
Merge up from 2.0/2.1:
112
        self.requireFeature(backslashdir_feature)
4789.20.2 by John Arbash Meinel
Split the win32 globbing tests up a bit.
113
        self.build_ascii_tree()
114
        self._run_testset([
115
            [[u'd\\'], [u'd/']],
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
116
            [[u'd\\*'], [u'd/d1', u'd/d2', u'd/e']],
117
            [[u'?\\*'], [u'c/c1', u'c/c2', u'd/d1', u'd/d2', u'd/e']],
118
            [[u'*\\*'], [u'c/c1', u'c/c2', u'd/d1', u'd/d2', u'd/e']],
4789.20.2 by John Arbash Meinel
Split the win32 globbing tests up a bit.
119
            [[u'*\\'], [u'c/', u'd/']],
120
            ])
121
122
    def test_case_insensitive_globbing(self):
5551.2.1 by Martin
Make case win32utils insensitive globbing tests skip more correctly to stop failures on OSX
123
        if os.path.normcase("AbC") == "AbC":
124
            self.skip("Test requires case insensitive globbing function")
4789.20.2 by John Arbash Meinel
Split the win32 globbing tests up a bit.
125
        self.build_ascii_tree()
126
        self._run_testset([
127
            [[u'A'], [u'A']],
128
            [[u'A?'], [u'a1', u'a2']],
129
            ])
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
130
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
131
    def test_tree_unicode(self):
2617.5.7 by Kuno Meyer
Fix for non-ASCII filenames
132
        """Checks behaviour with non-ascii filenames"""
4789.20.2 by John Arbash Meinel
Split the win32 globbing tests up a bit.
133
        self.build_unicode_tree()
2617.5.7 by Kuno Meyer
Fix for non-ASCII filenames
134
        self._run_testset([
135
            # no wildcards
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
136
            [[u'\u1234'], [u'\u1234']],
137
            [[u'\u1235'], [u'\u1235']],
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
138
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
139
            [[u'\u1235/'], [u'\u1235/']],
140
            [[u'\u1235/\u1235'], [u'\u1235/\u1235']],
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
141
2617.5.7 by Kuno Meyer
Fix for non-ASCII filenames
142
            # wildcards
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
143
            [[u'?'], [u'\u1234', u'\u1235']],
144
            [[u'*'], [u'\u1234', u'\u1234\u1234', u'\u1235']],
145
            [[u'\u1234*'], [u'\u1234', u'\u1234\u1234']],
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
146
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
147
            [[u'\u1235/?'], [u'\u1235/\u1235']],
148
            [[u'\u1235/*'], [u'\u1235/\u1235']],
4789.20.2 by John Arbash Meinel
Split the win32 globbing tests up a bit.
149
            [[u'?/'], [u'\u1235/']],
150
            [[u'*/'], [u'\u1235/']],
151
            [[u'?/?'], [u'\u1235/\u1235']],
152
            [[u'*/*'], [u'\u1235/\u1235']],
153
            ])
154
155
    def test_unicode_backslashes(self):
5241.2.1 by Robert Collins
Merge up from 2.0/2.1:
156
        self.requireFeature(backslashdir_feature)
4789.20.2 by John Arbash Meinel
Split the win32 globbing tests up a bit.
157
        self.build_unicode_tree()
158
        self._run_testset([
159
            # no wildcards
4789.20.3 by John Arbash Meinel
Use the right case sensitivity feature (cicp, not just ci).
160
            [[u'\u1235\\'], [u'\u1235/']],
161
            [[u'\u1235\\\u1235'], [u'\u1235/\u1235']],
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
162
            [[u'\u1235\\?'], [u'\u1235/\u1235']],
163
            [[u'\u1235\\*'], [u'\u1235/\u1235']],
164
            [[u'?\\'], [u'\u1235/']],
165
            [[u'*\\'], [u'\u1235/']],
166
            [[u'?\\?'], [u'\u1235/\u1235']],
4789.20.2 by John Arbash Meinel
Split the win32 globbing tests up a bit.
167
            [[u'*\\*'], [u'\u1235/\u1235']],
168
            ])
2617.5.7 by Kuno Meyer
Fix for non-ASCII filenames
169
2617.5.1 by Kuno Meyer
Added direct unit tests for win32utils.glob_expand().
170
    def _run_testset(self, testset):
171
        for pattern, expected in testset:
172
            result = glob_expand(pattern)
173
            expected.sort()
174
            result.sort()
175
            self.assertEqual(expected, result, 'pattern %s' % pattern)
2617.5.2 by Kuno Meyer
just reformatting
176
2681.4.2 by Alexander Belchenko
test for get_app_path
177
178
class TestAppPaths(TestCase):
179
2681.4.4 by Alexander Belchenko
test use Feature instead of TestSkipped
180
    _test_needs_features = [Win32RegistryFeature]
181
2681.4.2 by Alexander Belchenko
test for get_app_path
182
    def test_iexplore(self):
183
        # typical windows users should have IE installed
184
        for a in ('iexplore', 'iexplore.exe'):
185
            p = get_app_path(a)
186
            d, b = os.path.split(p)
3146.4.9 by Aaron Bentley
do case-insensitive comparision of iexplore filename
187
            self.assertEquals('iexplore.exe', b.lower())
2681.4.2 by Alexander Belchenko
test for get_app_path
188
            self.assertNotEquals('', d)
189
4476.2.1 by Alexander Belchenko
win32utils.py: get_app_path() can read path for wordpad.exe (data type_id is REG_EXPAND_SZ).
190
    def test_wordpad(self):
191
        # typical windows users should have wordpad in the system
192
        # but there is problem: its path has the format REG_EXPAND_SZ
193
        # so naive attempt to get the path is not working
5314.1.1 by Jason Spashett
Change test_win32utils.py so as not to fail tests if win32api module is not present.
194
        self.requireFeature(Win32ApiFeature)
4476.2.1 by Alexander Belchenko
win32utils.py: get_app_path() can read path for wordpad.exe (data type_id is REG_EXPAND_SZ).
195
        for a in ('wordpad', 'wordpad.exe'):
196
            p = get_app_path(a)
197
            d, b = os.path.split(p)
198
            self.assertEquals('wordpad.exe', b.lower())
199
            self.assertNotEquals('', d)
200
2681.4.2 by Alexander Belchenko
test for get_app_path
201
    def test_not_existing(self):
202
        p = get_app_path('not-existing')
203
        self.assertEquals('not-existing', p)
3638.4.1 by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can
204
3638.4.3 by Mark Hammond
cleanup tests, rationalize path checking etc.
205
3638.4.1 by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can
206
class TestLocationsCtypes(TestCase):
207
208
    _test_needs_features = [CtypesFeature]
209
3638.4.3 by Mark Hammond
cleanup tests, rationalize path checking etc.
210
    def assertPathsEqual(self, p1, p2):
211
        # TODO: The env var values in particular might return the "short"
212
        # version (ie, "C:\DOCUME~1\...").  Its even possible the returned
213
        # values will differ only by case - handle these situations as we
214
        # come across them.
215
        self.assertEquals(p1, p2)
216
3638.4.1 by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can
217
    def test_appdata_not_using_environment(self):
218
        # Test that we aren't falling back to the environment
3638.4.3 by Mark Hammond
cleanup tests, rationalize path checking etc.
219
        first = win32utils.get_appdata_location()
5570.3.6 by Vincent Ladeuil
Get rid of all _captureVar() calls, no test failures, pfew.
220
        self.overrideEnv("APPDATA", None)
3638.4.3 by Mark Hammond
cleanup tests, rationalize path checking etc.
221
        self.assertPathsEqual(first, win32utils.get_appdata_location())
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
222
3638.4.1 by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can
223
    def test_appdata_matches_environment(self):
224
        # Typically the APPDATA environment variable will match
225
        # get_appdata_location
3638.4.3 by Mark Hammond
cleanup tests, rationalize path checking etc.
226
        # XXX - See bug 262874, which asserts the correct encoding is 'mbcs',
227
        encoding = osutils.get_user_encoding()
3638.4.6 by Mark Hammond
Skip the environment checks when APPDATA isn't in the environment.
228
        env_val = os.environ.get("APPDATA", None)
229
        if not env_val:
230
            raise TestSkipped("No APPDATA environment variable exists")
3638.4.3 by Mark Hammond
cleanup tests, rationalize path checking etc.
231
        self.assertPathsEqual(win32utils.get_appdata_location(),
3638.4.6 by Mark Hammond
Skip the environment checks when APPDATA isn't in the environment.
232
                              env_val.decode(encoding))
3638.4.1 by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can
233
234
    def test_local_appdata_not_using_environment(self):
235
        # Test that we aren't falling back to the environment
3638.4.3 by Mark Hammond
cleanup tests, rationalize path checking etc.
236
        first = win32utils.get_local_appdata_location()
5570.3.6 by Vincent Ladeuil
Get rid of all _captureVar() calls, no test failures, pfew.
237
        self.overrideEnv("LOCALAPPDATA", None)
3638.4.3 by Mark Hammond
cleanup tests, rationalize path checking etc.
238
        self.assertPathsEqual(first, win32utils.get_local_appdata_location())
3638.4.1 by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can
239
240
    def test_local_appdata_matches_environment(self):
241
        # LOCALAPPDATA typically only exists on Vista, so we only attempt to
242
        # compare when it exists.
3638.4.3 by Mark Hammond
cleanup tests, rationalize path checking etc.
243
        lad = win32utils.get_local_appdata_location()
3638.4.1 by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can
244
        env = os.environ.get("LOCALAPPDATA")
245
        if env:
3638.4.3 by Mark Hammond
cleanup tests, rationalize path checking etc.
246
            # XXX - See bug 262874, which asserts the correct encoding is 'mbcs'
247
            encoding = osutils.get_user_encoding()
248
            self.assertPathsEqual(lad, env.decode(encoding))
249
250
251
class TestLocationsPywin32(TestLocationsCtypes):
3638.4.1 by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can
252
253
    _test_needs_features = [Win32comShellFeature]
254
255
    def setUp(self):
3638.4.3 by Mark Hammond
cleanup tests, rationalize path checking etc.
256
        super(TestLocationsPywin32, self).setUp()
257
        # We perform the exact same tests after disabling the use of ctypes.
258
        # This causes the implementation to fall back to pywin32.
4985.1.5 by Vincent Ladeuil
Deploying the new overrideAttr facility further reduces the complexity
259
        self.overrideAttr(win32utils, 'has_ctypes', False)
260
        # FIXME: this should be done by parametrization -- vila 100123
4505.2.1 by Alexander Belchenko
Set hidden attribute on .bzr directory below unicode path should never fail with error. The operation should succeed even if bzr unable to set the attribute. (related to bug #335362).
261
262
263
class TestSetHidden(TestCaseInTempDir):
264
4505.2.3 by Alexander Belchenko
added direct test for absolute path.
265
    def test_unicode_dir(self):
266
        # we should handle unicode paths without errors
4505.2.4 by Alexander Belchenko
guard tests with UnicodeFilenameFeature.
267
        self.requireFeature(UnicodeFilenameFeature)
4505.2.3 by Alexander Belchenko
added direct test for absolute path.
268
        os.mkdir(u'\u1234')
269
        win32utils.set_file_attr_hidden(u'\u1234')
270
271
    def test_dot_bzr_in_unicode_dir(self):
4505.2.1 by Alexander Belchenko
Set hidden attribute on .bzr directory below unicode path should never fail with error. The operation should succeed even if bzr unable to set the attribute. (related to bug #335362).
272
        # we should not raise traceback if we try to set hidden attribute
273
        # on .bzr directory below unicode path
4505.2.4 by Alexander Belchenko
guard tests with UnicodeFilenameFeature.
274
        self.requireFeature(UnicodeFilenameFeature)
4505.2.3 by Alexander Belchenko
added direct test for absolute path.
275
        os.makedirs(u'\u1234\\.bzr')
276
        path = osutils.abspath(u'\u1234\\.bzr')
277
        win32utils.set_file_attr_hidden(path)
4786.1.1 by John Arbash Meinel
Work on doing globbing, etc for all commands on Windows.
278
279
280
class Test_CommandLineToArgv(tests.TestCaseInTempDir):
281
5274.4.12 by Martin
Change interface of _command_line_to_argv so old tests can still be used with new stripping logic
282
    def assertCommandLine(self, expected, line, argv=None,
283
            single_quotes_allowed=False):
4789.3.2 by Vincent Ladeuil
Add a comment precising why we sort the results of _command_line_to_argv.
284
        # Strictly speaking we should respect parameter order versus glob
285
        # expansions, but it's not really worth the effort here
5274.4.12 by Martin
Change interface of _command_line_to_argv so old tests can still be used with new stripping logic
286
        if argv is None:
287
            argv = [line]
288
        argv = win32utils._command_line_to_argv(line, argv,
4913.5.11 by Gordon Tyler
Added optional single quote support to UnicodeShlex and thus command_line_to_argv (defaults to disabled).
289
                single_quotes_allowed=single_quotes_allowed)
290
        self.assertEqual(expected, sorted(argv))
4786.1.1 by John Arbash Meinel
Work on doing globbing, etc for all commands on Windows.
291
292
    def test_glob_paths(self):
293
        self.build_tree(['a/', 'a/b.c', 'a/c.c', 'a/c.h'])
294
        self.assertCommandLine([u'a/b.c', u'a/c.c'], 'a/*.c')
295
        self.build_tree(['b/', 'b/b.c', 'b/d.c', 'b/d.h'])
296
        self.assertCommandLine([u'a/b.c', u'b/b.c'], '*/b.c')
297
        self.assertCommandLine([u'a/b.c', u'a/c.c', u'b/b.c', u'b/d.c'],
298
                               '*/*.c')
299
        # Bash style, just pass through the argument if nothing matches
300
        self.assertCommandLine([u'*/*.qqq'], '*/*.qqq')
301
302
    def test_quoted_globs(self):
303
        self.build_tree(['a/', 'a/b.c', 'a/c.c', 'a/c.h'])
304
        self.assertCommandLine([u'a/*.c'], '"a/*.c"')
4789.1.1 by Alexander Belchenko
In standard windows shell single quote is not supported as quote. Restored standard windows behavior.
305
        self.assertCommandLine([u"'a/*.c'"], "'a/*.c'")
4913.5.11 by Gordon Tyler
Added optional single quote support to UnicodeShlex and thus command_line_to_argv (defaults to disabled).
306
        self.assertCommandLine([u'a/*.c'], "'a/*.c'",
307
            single_quotes_allowed=True)
4786.1.2 by John Arbash Meinel
Refactor the glob_expand code a bit, making the inner function more reusable.
308
309
    def test_slashes_changed(self):
4818.1.1 by John Arbash Meinel
Fix bug #485771. Only change '/' to '/' when expanding globs.
310
        # Quoting doesn't change the supplied args
311
        self.assertCommandLine([u'a\\*.c'], '"a\\*.c"')
4913.5.11 by Gordon Tyler
Added optional single quote support to UnicodeShlex and thus command_line_to_argv (defaults to disabled).
312
        self.assertCommandLine([u'a\\*.c'], "'a\\*.c'",
313
            single_quotes_allowed=True)
4818.1.1 by John Arbash Meinel
Fix bug #485771. Only change '/' to '/' when expanding globs.
314
        # Expands the glob, but nothing matches, swaps slashes
4786.1.2 by John Arbash Meinel
Refactor the glob_expand code a bit, making the inner function more reusable.
315
        self.assertCommandLine([u'a/*.c'], 'a\\*.c')
4818.1.1 by John Arbash Meinel
Fix bug #485771. Only change '/' to '/' when expanding globs.
316
        self.assertCommandLine([u'a/?.c'], 'a\\?.c')
317
        # No glob, doesn't touch slashes
318
        self.assertCommandLine([u'a\\foo.c'], 'a\\foo.c')
4789.1.1 by Alexander Belchenko
In standard windows shell single quote is not supported as quote. Restored standard windows behavior.
319
4913.5.11 by Gordon Tyler
Added optional single quote support to UnicodeShlex and thus command_line_to_argv (defaults to disabled).
320
    def test_single_quote_support(self):
4789.1.1 by Alexander Belchenko
In standard windows shell single quote is not supported as quote. Restored standard windows behavior.
321
        self.assertCommandLine(["add", "let's-do-it.txt"],
5274.4.12 by Martin
Change interface of _command_line_to_argv so old tests can still be used with new stripping logic
322
            "add let's-do-it.txt",
323
            ["add", "let's-do-it.txt"])
324
        self.expectFailure("Using single quotes breaks trimming from argv",
325
            self.assertCommandLine, ["add", "lets do it.txt"],
326
            "add 'lets do it.txt'", ["add", "'lets", "do", "it.txt'"],
327
            single_quotes_allowed=True)
4797.3.20 by John Arbash Meinel
Include the glob updates.
328
4789.20.3 by John Arbash Meinel
Use the right case sensitivity feature (cicp, not just ci).
329
    def test_case_insensitive_globs(self):
5551.2.1 by Martin
Make case win32utils insensitive globbing tests skip more correctly to stop failures on OSX
330
        if os.path.normcase("AbC") == "AbC":
331
            self.skip("Test requires case insensitive globbing function")
4789.20.3 by John Arbash Meinel
Use the right case sensitivity feature (cicp, not just ci).
332
        self.build_tree(['a/', 'a/b.c', 'a/c.c', 'a/c.h'])
333
        self.assertCommandLine([u'A/b.c'], 'A/B*')
334
335
    def test_backslashes(self):
5241.2.1 by Robert Collins
Merge up from 2.0/2.1:
336
        self.requireFeature(backslashdir_feature)
4789.20.3 by John Arbash Meinel
Use the right case sensitivity feature (cicp, not just ci).
337
        self.build_tree(['a/', 'a/b.c', 'a/c.c', 'a/c.h'])
338
        self.assertCommandLine([u'a/b.c'], 'a\\b*')
5274.4.13 by Martin
Add test for lp:587868 to win32 commandline tests
339
340
    def test_with_pdb(self):
341
        """Check stripping Python arguments before bzr script per lp:587868"""
342
        self.assertCommandLine([u"rocks"], "-m pdb rocks", ["rocks"])
343
        self.build_tree(['d/', 'd/f1', 'd/f2'])
344
        self.assertCommandLine([u"rm", u"x*"], "-m pdb rm x*", ["rm", u"x*"])
345
        self.assertCommandLine([u"add", u"d/f1", u"d/f2"], "-m pdb add d/*",
346
            ["add", u"d/*"])