4763.2.4
by John Arbash Meinel
merge bzr.2.1 in preparation for NEWS entry. |
1 |
# Copyright (C) 2007-2010 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): |
|
4789.20.3
by John Arbash Meinel
Use the right case sensitivity feature (cicp, not just ci). |
123 |
self.requireFeature(tests.CaseInsCasePresFilenameFeature) |
4789.20.2
by John Arbash Meinel
Split the win32 globbing tests up a bit. |
124 |
self.build_ascii_tree() |
125 |
self._run_testset([ |
|
126 |
[[u'A'], [u'A']], |
|
127 |
[[u'A?'], [u'a1', u'a2']], |
|
128 |
])
|
|
3943.8.1
by Marius Kruger
remove all trailing whitespace from bzr source |
129 |
|
2617.5.8
by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range |
130 |
def test_tree_unicode(self): |
2617.5.7
by Kuno Meyer
Fix for non-ASCII filenames |
131 |
"""Checks behaviour with non-ascii filenames"""
|
4789.20.2
by John Arbash Meinel
Split the win32 globbing tests up a bit. |
132 |
self.build_unicode_tree() |
2617.5.7
by Kuno Meyer
Fix for non-ASCII filenames |
133 |
self._run_testset([ |
134 |
# no wildcards
|
|
2617.5.8
by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range |
135 |
[[u'\u1234'], [u'\u1234']], |
136 |
[[u'\u1235'], [u'\u1235']], |
|
3943.8.1
by Marius Kruger
remove all trailing whitespace from bzr source |
137 |
|
2617.5.8
by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range |
138 |
[[u'\u1235/'], [u'\u1235/']], |
139 |
[[u'\u1235/\u1235'], [u'\u1235/\u1235']], |
|
3943.8.1
by Marius Kruger
remove all trailing whitespace from bzr source |
140 |
|
2617.5.7
by Kuno Meyer
Fix for non-ASCII filenames |
141 |
# wildcards
|
2617.5.8
by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range |
142 |
[[u'?'], [u'\u1234', u'\u1235']], |
143 |
[[u'*'], [u'\u1234', u'\u1234\u1234', u'\u1235']], |
|
144 |
[[u'\u1234*'], [u'\u1234', u'\u1234\u1234']], |
|
3943.8.1
by Marius Kruger
remove all trailing whitespace from bzr source |
145 |
|
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']], |
|
4789.20.2
by John Arbash Meinel
Split the win32 globbing tests up a bit. |
148 |
[[u'?/'], [u'\u1235/']], |
149 |
[[u'*/'], [u'\u1235/']], |
|
150 |
[[u'?/?'], [u'\u1235/\u1235']], |
|
151 |
[[u'*/*'], [u'\u1235/\u1235']], |
|
152 |
])
|
|
153 |
||
154 |
def test_unicode_backslashes(self): |
|
5241.2.1
by Robert Collins
Merge up from 2.0/2.1: |
155 |
self.requireFeature(backslashdir_feature) |
4789.20.2
by John Arbash Meinel
Split the win32 globbing tests up a bit. |
156 |
self.build_unicode_tree() |
157 |
self._run_testset([ |
|
158 |
# no wildcards
|
|
4789.20.3
by John Arbash Meinel
Use the right case sensitivity feature (cicp, not just ci). |
159 |
[[u'\u1235\\'], [u'\u1235/']], |
160 |
[[u'\u1235\\\u1235'], [u'\u1235/\u1235']], |
|
2617.5.8
by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range |
161 |
[[u'\u1235\\?'], [u'\u1235/\u1235']], |
162 |
[[u'\u1235\\*'], [u'\u1235/\u1235']], |
|
163 |
[[u'?\\'], [u'\u1235/']], |
|
164 |
[[u'*\\'], [u'\u1235/']], |
|
165 |
[[u'?\\?'], [u'\u1235/\u1235']], |
|
4789.20.2
by John Arbash Meinel
Split the win32 globbing tests up a bit. |
166 |
[[u'*\\*'], [u'\u1235/\u1235']], |
167 |
])
|
|
2617.5.7
by Kuno Meyer
Fix for non-ASCII filenames |
168 |
|
2617.5.1
by Kuno Meyer
Added direct unit tests for win32utils.glob_expand(). |
169 |
def _run_testset(self, testset): |
170 |
for pattern, expected in testset: |
|
171 |
result = glob_expand(pattern) |
|
172 |
expected.sort() |
|
173 |
result.sort() |
|
174 |
self.assertEqual(expected, result, 'pattern %s' % pattern) |
|
2617.5.2
by Kuno Meyer
just reformatting |
175 |
|
2681.4.2
by Alexander Belchenko
test for get_app_path |
176 |
|
177 |
class TestAppPaths(TestCase): |
|
178 |
||
2681.4.4
by Alexander Belchenko
test use Feature instead of TestSkipped |
179 |
_test_needs_features = [Win32RegistryFeature] |
180 |
||
2681.4.2
by Alexander Belchenko
test for get_app_path |
181 |
def test_iexplore(self): |
182 |
# typical windows users should have IE installed
|
|
183 |
for a in ('iexplore', 'iexplore.exe'): |
|
184 |
p = get_app_path(a) |
|
185 |
d, b = os.path.split(p) |
|
3146.4.9
by Aaron Bentley
do case-insensitive comparision of iexplore filename |
186 |
self.assertEquals('iexplore.exe', b.lower()) |
2681.4.2
by Alexander Belchenko
test for get_app_path |
187 |
self.assertNotEquals('', d) |
188 |
||
4476.2.1
by Alexander Belchenko
win32utils.py: get_app_path() can read path for wordpad.exe (data type_id is REG_EXPAND_SZ). |
189 |
def test_wordpad(self): |
190 |
# typical windows users should have wordpad in the system
|
|
191 |
# but there is problem: its path has the format REG_EXPAND_SZ
|
|
192 |
# 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. |
193 |
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). |
194 |
for a in ('wordpad', 'wordpad.exe'): |
195 |
p = get_app_path(a) |
|
196 |
d, b = os.path.split(p) |
|
197 |
self.assertEquals('wordpad.exe', b.lower()) |
|
198 |
self.assertNotEquals('', d) |
|
199 |
||
2681.4.2
by Alexander Belchenko
test for get_app_path |
200 |
def test_not_existing(self): |
201 |
p = get_app_path('not-existing') |
|
202 |
self.assertEquals('not-existing', p) |
|
3638.4.1
by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can |
203 |
|
3638.4.3
by Mark Hammond
cleanup tests, rationalize path checking etc. |
204 |
|
3638.4.1
by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can |
205 |
class TestLocationsCtypes(TestCase): |
206 |
||
207 |
_test_needs_features = [CtypesFeature] |
|
208 |
||
3638.4.3
by Mark Hammond
cleanup tests, rationalize path checking etc. |
209 |
def assertPathsEqual(self, p1, p2): |
210 |
# TODO: The env var values in particular might return the "short"
|
|
211 |
# version (ie, "C:\DOCUME~1\..."). Its even possible the returned
|
|
212 |
# values will differ only by case - handle these situations as we
|
|
213 |
# come across them.
|
|
214 |
self.assertEquals(p1, p2) |
|
215 |
||
3638.4.1
by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can |
216 |
def test_appdata_not_using_environment(self): |
217 |
# Test that we aren't falling back to the environment
|
|
3638.4.3
by Mark Hammond
cleanup tests, rationalize path checking etc. |
218 |
first = win32utils.get_appdata_location() |
219 |
self._captureVar("APPDATA", None) |
|
220 |
self.assertPathsEqual(first, win32utils.get_appdata_location()) |
|
3943.8.1
by Marius Kruger
remove all trailing whitespace from bzr source |
221 |
|
3638.4.1
by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can |
222 |
def test_appdata_matches_environment(self): |
223 |
# Typically the APPDATA environment variable will match
|
|
224 |
# get_appdata_location
|
|
3638.4.3
by Mark Hammond
cleanup tests, rationalize path checking etc. |
225 |
# XXX - See bug 262874, which asserts the correct encoding is 'mbcs',
|
226 |
encoding = osutils.get_user_encoding() |
|
3638.4.6
by Mark Hammond
Skip the environment checks when APPDATA isn't in the environment. |
227 |
env_val = os.environ.get("APPDATA", None) |
228 |
if not env_val: |
|
229 |
raise TestSkipped("No APPDATA environment variable exists") |
|
3638.4.3
by Mark Hammond
cleanup tests, rationalize path checking etc. |
230 |
self.assertPathsEqual(win32utils.get_appdata_location(), |
3638.4.6
by Mark Hammond
Skip the environment checks when APPDATA isn't in the environment. |
231 |
env_val.decode(encoding)) |
3638.4.1
by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can |
232 |
|
233 |
def test_local_appdata_not_using_environment(self): |
|
234 |
# Test that we aren't falling back to the environment
|
|
3638.4.3
by Mark Hammond
cleanup tests, rationalize path checking etc. |
235 |
first = win32utils.get_local_appdata_location() |
236 |
self._captureVar("LOCALAPPDATA", None) |
|
237 |
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 |
238 |
|
239 |
def test_local_appdata_matches_environment(self): |
|
240 |
# LOCALAPPDATA typically only exists on Vista, so we only attempt to
|
|
241 |
# compare when it exists.
|
|
3638.4.3
by Mark Hammond
cleanup tests, rationalize path checking etc. |
242 |
lad = win32utils.get_local_appdata_location() |
3638.4.1
by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can |
243 |
env = os.environ.get("LOCALAPPDATA") |
244 |
if env: |
|
3638.4.3
by Mark Hammond
cleanup tests, rationalize path checking etc. |
245 |
# XXX - See bug 262874, which asserts the correct encoding is 'mbcs'
|
246 |
encoding = osutils.get_user_encoding() |
|
247 |
self.assertPathsEqual(lad, env.decode(encoding)) |
|
248 |
||
249 |
||
250 |
class TestLocationsPywin32(TestLocationsCtypes): |
|
3638.4.1
by Mark Hammond
Add win32utils.get_local_appdata_location() so bzr and plugins can |
251 |
|
252 |
_test_needs_features = [Win32comShellFeature] |
|
253 |
||
254 |
def setUp(self): |
|
3638.4.3
by Mark Hammond
cleanup tests, rationalize path checking etc. |
255 |
super(TestLocationsPywin32, self).setUp() |
256 |
# We perform the exact same tests after disabling the use of ctypes.
|
|
257 |
# This causes the implementation to fall back to pywin32.
|
|
4985.1.5
by Vincent Ladeuil
Deploying the new overrideAttr facility further reduces the complexity |
258 |
self.overrideAttr(win32utils, 'has_ctypes', False) |
259 |
# 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). |
260 |
|
261 |
||
262 |
class TestSetHidden(TestCaseInTempDir): |
|
263 |
||
4505.2.3
by Alexander Belchenko
added direct test for absolute path. |
264 |
def test_unicode_dir(self): |
265 |
# we should handle unicode paths without errors
|
|
4505.2.4
by Alexander Belchenko
guard tests with UnicodeFilenameFeature. |
266 |
self.requireFeature(UnicodeFilenameFeature) |
4505.2.3
by Alexander Belchenko
added direct test for absolute path. |
267 |
os.mkdir(u'\u1234') |
268 |
win32utils.set_file_attr_hidden(u'\u1234') |
|
269 |
||
270 |
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). |
271 |
# we should not raise traceback if we try to set hidden attribute
|
272 |
# on .bzr directory below unicode path
|
|
4505.2.4
by Alexander Belchenko
guard tests with UnicodeFilenameFeature. |
273 |
self.requireFeature(UnicodeFilenameFeature) |
4505.2.3
by Alexander Belchenko
added direct test for absolute path. |
274 |
os.makedirs(u'\u1234\\.bzr') |
275 |
path = osutils.abspath(u'\u1234\\.bzr') |
|
276 |
win32utils.set_file_attr_hidden(path) |
|
4786.1.1
by John Arbash Meinel
Work on doing globbing, etc for all commands on Windows. |
277 |
|
278 |
||
279 |
class Test_CommandLineToArgv(tests.TestCaseInTempDir): |
|
280 |
||
5274.4.12
by Martin
Change interface of _command_line_to_argv so old tests can still be used with new stripping logic |
281 |
def assertCommandLine(self, expected, line, argv=None, |
282 |
single_quotes_allowed=False): |
|
4789.3.2
by Vincent Ladeuil
Add a comment precising why we sort the results of _command_line_to_argv. |
283 |
# Strictly speaking we should respect parameter order versus glob
|
284 |
# 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 |
285 |
if argv is None: |
286 |
argv = [line] |
|
287 |
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). |
288 |
single_quotes_allowed=single_quotes_allowed) |
289 |
self.assertEqual(expected, sorted(argv)) |
|
4786.1.1
by John Arbash Meinel
Work on doing globbing, etc for all commands on Windows. |
290 |
|
291 |
def test_glob_paths(self): |
|
292 |
self.build_tree(['a/', 'a/b.c', 'a/c.c', 'a/c.h']) |
|
293 |
self.assertCommandLine([u'a/b.c', u'a/c.c'], 'a/*.c') |
|
294 |
self.build_tree(['b/', 'b/b.c', 'b/d.c', 'b/d.h']) |
|
295 |
self.assertCommandLine([u'a/b.c', u'b/b.c'], '*/b.c') |
|
296 |
self.assertCommandLine([u'a/b.c', u'a/c.c', u'b/b.c', u'b/d.c'], |
|
297 |
'*/*.c') |
|
298 |
# Bash style, just pass through the argument if nothing matches
|
|
299 |
self.assertCommandLine([u'*/*.qqq'], '*/*.qqq') |
|
300 |
||
301 |
def test_quoted_globs(self): |
|
302 |
self.build_tree(['a/', 'a/b.c', 'a/c.c', 'a/c.h']) |
|
303 |
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. |
304 |
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). |
305 |
self.assertCommandLine([u'a/*.c'], "'a/*.c'", |
306 |
single_quotes_allowed=True) |
|
4786.1.2
by John Arbash Meinel
Refactor the glob_expand code a bit, making the inner function more reusable. |
307 |
|
308 |
def test_slashes_changed(self): |
|
4818.1.1
by John Arbash Meinel
Fix bug #485771. Only change '/' to '/' when expanding globs. |
309 |
# Quoting doesn't change the supplied args
|
310 |
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). |
311 |
self.assertCommandLine([u'a\\*.c'], "'a\\*.c'", |
312 |
single_quotes_allowed=True) |
|
4818.1.1
by John Arbash Meinel
Fix bug #485771. Only change '/' to '/' when expanding globs. |
313 |
# 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. |
314 |
self.assertCommandLine([u'a/*.c'], 'a\\*.c') |
4818.1.1
by John Arbash Meinel
Fix bug #485771. Only change '/' to '/' when expanding globs. |
315 |
self.assertCommandLine([u'a/?.c'], 'a\\?.c') |
316 |
# No glob, doesn't touch slashes
|
|
317 |
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. |
318 |
|
4913.5.11
by Gordon Tyler
Added optional single quote support to UnicodeShlex and thus command_line_to_argv (defaults to disabled). |
319 |
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. |
320 |
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 |
321 |
"add let's-do-it.txt", |
322 |
["add", "let's-do-it.txt"]) |
|
323 |
self.expectFailure("Using single quotes breaks trimming from argv", |
|
324 |
self.assertCommandLine, ["add", "lets do it.txt"], |
|
325 |
"add 'lets do it.txt'", ["add", "'lets", "do", "it.txt'"], |
|
326 |
single_quotes_allowed=True) |
|
4797.3.20
by John Arbash Meinel
Include the glob updates. |
327 |
|
4789.20.3
by John Arbash Meinel
Use the right case sensitivity feature (cicp, not just ci). |
328 |
def test_case_insensitive_globs(self): |
329 |
self.requireFeature(tests.CaseInsCasePresFilenameFeature) |
|
330 |
self.build_tree(['a/', 'a/b.c', 'a/c.c', 'a/c.h']) |
|
331 |
self.assertCommandLine([u'A/b.c'], 'A/B*') |
|
332 |
||
333 |
def test_backslashes(self): |
|
5241.2.1
by Robert Collins
Merge up from 2.0/2.1: |
334 |
self.requireFeature(backslashdir_feature) |
4789.20.3
by John Arbash Meinel
Use the right case sensitivity feature (cicp, not just ci). |
335 |
self.build_tree(['a/', 'a/b.c', 'a/c.c', 'a/c.h']) |
336 |
self.assertCommandLine([u'a/b.c'], 'a\\b*') |
|
5274.4.13
by Martin
Add test for lp:587868 to win32 commandline tests |
337 |
|
338 |
def test_with_pdb(self): |
|
339 |
"""Check stripping Python arguments before bzr script per lp:587868"""
|
|
340 |
self.assertCommandLine([u"rocks"], "-m pdb rocks", ["rocks"]) |
|
341 |
self.build_tree(['d/', 'd/f1', 'd/f2']) |
|
342 |
self.assertCommandLine([u"rm", u"x*"], "-m pdb rm x*", ["rm", u"x*"]) |
|
343 |
self.assertCommandLine([u"add", u"d/f1", u"d/f2"], "-m pdb add d/*", |
|
344 |
["add", u"d/*"]) |