/brz/remove-bazaar

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