~bzr-pqm/bzr/bzr.dev

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