103
104
class TestContainsWhitespace(tests.TestCase):
105
106
def test_contains_whitespace(self):
106
self.failUnless(osutils.contains_whitespace(u' '))
107
self.failUnless(osutils.contains_whitespace(u'hello there'))
108
self.failUnless(osutils.contains_whitespace(u'hellothere\n'))
109
self.failUnless(osutils.contains_whitespace(u'hello\nthere'))
110
self.failUnless(osutils.contains_whitespace(u'hello\rthere'))
111
self.failUnless(osutils.contains_whitespace(u'hello\tthere'))
107
self.assertTrue(osutils.contains_whitespace(u' '))
108
self.assertTrue(osutils.contains_whitespace(u'hello there'))
109
self.assertTrue(osutils.contains_whitespace(u'hellothere\n'))
110
self.assertTrue(osutils.contains_whitespace(u'hello\nthere'))
111
self.assertTrue(osutils.contains_whitespace(u'hello\rthere'))
112
self.assertTrue(osutils.contains_whitespace(u'hello\tthere'))
113
114
# \xa0 is "Non-breaking-space" which on some python locales thinks it
114
115
# is whitespace, but we do not.
115
self.failIf(osutils.contains_whitespace(u''))
116
self.failIf(osutils.contains_whitespace(u'hellothere'))
117
self.failIf(osutils.contains_whitespace(u'hello\xa0there'))
116
self.assertFalse(osutils.contains_whitespace(u''))
117
self.assertFalse(osutils.contains_whitespace(u'hellothere'))
118
self.assertFalse(osutils.contains_whitespace(u'hello\xa0there'))
120
121
class TestRename(tests.TestCaseInTempDir):
231
232
self.assertFalse(osutils.is_inside_or_parent_of_any(dirs, fn))
235
class TestLstat(tests.TestCaseInTempDir):
237
def test_lstat_matches_fstat(self):
238
# On Windows, lstat and fstat don't always agree, primarily in the
239
# 'st_ino' and 'st_dev' fields. So we force them to be '0' in our
240
# custom implementation.
241
if sys.platform == 'win32':
242
# We only have special lstat/fstat if we have the extension.
243
# Without it, we may end up re-reading content when we don't have
244
# to, but otherwise it doesn't effect correctness.
245
self.requireFeature(test__walkdirs_win32.win32_readdir_feature)
246
f = open('test-file.txt', 'wb')
247
self.addCleanup(f.close)
248
f.write('some content\n')
250
self.assertEqualStat(osutils.fstat(f.fileno()),
251
osutils.lstat('test-file.txt'))
234
254
class TestRmTree(tests.TestCaseInTempDir):
236
256
def test_rmtree(self):
464
484
class TestCanonicalRelPath(tests.TestCaseInTempDir):
466
_test_needs_features = [tests.CaseInsCasePresFilenameFeature]
486
_test_needs_features = [features.CaseInsCasePresFilenameFeature]
468
488
def test_canonical_relpath_simple(self):
469
489
f = file('MixedCaseName', 'w')
471
491
actual = osutils.canonical_relpath(self.test_base_dir, 'mixedcasename')
472
self.failUnlessEqual('work/MixedCaseName', actual)
492
self.assertEqual('work/MixedCaseName', actual)
474
494
def test_canonical_relpath_missing_tail(self):
475
495
os.mkdir('MixedCaseParent')
476
496
actual = osutils.canonical_relpath(self.test_base_dir,
477
497
'mixedcaseparent/nochild')
478
self.failUnlessEqual('work/MixedCaseParent/nochild', actual)
498
self.assertEqual('work/MixedCaseParent/nochild', actual)
481
501
class Test_CICPCanonicalRelpath(tests.TestCaseWithTransport):
1187
1217
self.requireFeature(UTF8DirReaderFeature)
1188
1218
self._save_platform_info()
1189
1219
win32utils.winver = None # Avoid the win32 detection code
1190
osutils._fs_enc = 'UTF-8'
1191
self.assertDirReaderIs(UTF8DirReaderFeature.reader)
1220
osutils._fs_enc = 'utf-8'
1221
self.assertDirReaderIs(
1222
UTF8DirReaderFeature.module.UTF8DirReader)
1193
1224
def test_force_walkdirs_utf8_fs_ascii(self):
1194
1225
self.requireFeature(UTF8DirReaderFeature)
1195
1226
self._save_platform_info()
1196
1227
win32utils.winver = None # Avoid the win32 detection code
1197
osutils._fs_enc = 'US-ASCII'
1198
self.assertDirReaderIs(UTF8DirReaderFeature.reader)
1200
def test_force_walkdirs_utf8_fs_ANSI(self):
1201
self.requireFeature(UTF8DirReaderFeature)
1202
self._save_platform_info()
1203
win32utils.winver = None # Avoid the win32 detection code
1204
osutils._fs_enc = 'ANSI_X3.4-1968'
1205
self.assertDirReaderIs(UTF8DirReaderFeature.reader)
1228
osutils._fs_enc = 'ascii'
1229
self.assertDirReaderIs(
1230
UTF8DirReaderFeature.module.UTF8DirReader)
1207
1232
def test_force_walkdirs_utf8_fs_latin1(self):
1208
1233
self._save_platform_info()
1209
1234
win32utils.winver = None # Avoid the win32 detection code
1210
osutils._fs_enc = 'latin1'
1235
osutils._fs_enc = 'iso-8859-1'
1211
1236
self.assertDirReaderIs(osutils.UnicodeDirReader)
1213
1238
def test_force_walkdirs_utf8_nt(self):
1837
1862
return filtered_dirblocks
1839
1864
def test_walk_unicode_tree(self):
1840
self.requireFeature(tests.UnicodeFilenameFeature)
1865
self.requireFeature(features.UnicodeFilenameFeature)
1841
1866
tree, expected_dirblocks = self._get_unicode_tree()
1842
1867
self.build_tree(tree)
1843
1868
result = list(osutils._walkdirs_utf8('.'))
1844
1869
self.assertEqual(expected_dirblocks, self._filter_out(result))
1846
1871
def test_symlink(self):
1847
self.requireFeature(tests.SymlinkFeature)
1848
self.requireFeature(tests.UnicodeFilenameFeature)
1872
self.requireFeature(features.SymlinkFeature)
1873
self.requireFeature(features.UnicodeFilenameFeature)
1849
1874
target = u'target\N{Euro Sign}'
1850
1875
link_name = u'l\N{Euro Sign}nk'
1851
1876
os.symlink(target, link_name)
2071
2094
self.assertEquals(self.uid, s.st_uid)
2072
2095
self.assertEquals(self.gid, s.st_gid)
2098
class TestPathFromEnviron(tests.TestCase):
2100
def test_is_unicode(self):
2101
self.overrideEnv('BZR_TEST_PATH', './anywhere at all/')
2102
path = osutils.path_from_environ('BZR_TEST_PATH')
2103
self.assertIsInstance(path, unicode)
2104
self.assertEqual(u'./anywhere at all/', path)
2106
def test_posix_path_env_ascii(self):
2107
self.overrideEnv('BZR_TEST_PATH', '/tmp')
2108
home = osutils._posix_path_from_environ('BZR_TEST_PATH')
2109
self.assertIsInstance(home, unicode)
2110
self.assertEqual(u'/tmp', home)
2112
def test_posix_path_env_unicode(self):
2113
self.requireFeature(features.ByteStringNamedFilesystem)
2114
self.overrideEnv('BZR_TEST_PATH', '/home/\xa7test')
2115
self.overrideAttr(osutils, "_fs_enc", "iso8859-1")
2116
self.assertEqual(u'/home/\xa7test',
2117
osutils._posix_path_from_environ('BZR_TEST_PATH'))
2118
osutils._fs_enc = "iso8859-5"
2119
self.assertEqual(u'/home/\u0407test',
2120
osutils._posix_path_from_environ('BZR_TEST_PATH'))
2121
osutils._fs_enc = "utf-8"
2122
self.assertRaises(errors.BadFilenameEncoding,
2123
osutils._posix_path_from_environ, 'BZR_TEST_PATH')
2126
class TestGetHomeDir(tests.TestCase):
2128
def test_is_unicode(self):
2129
home = osutils._get_home_dir()
2130
self.assertIsInstance(home, unicode)
2132
def test_posix_homeless(self):
2133
self.overrideEnv('HOME', None)
2134
home = osutils._get_home_dir()
2135
self.assertIsInstance(home, unicode)
2137
def test_posix_home_ascii(self):
2138
self.overrideEnv('HOME', '/home/test')
2139
home = osutils._posix_get_home_dir()
2140
self.assertIsInstance(home, unicode)
2141
self.assertEqual(u'/home/test', home)
2143
def test_posix_home_unicode(self):
2144
self.requireFeature(features.ByteStringNamedFilesystem)
2145
self.overrideEnv('HOME', '/home/\xa7test')
2146
self.overrideAttr(osutils, "_fs_enc", "iso8859-1")
2147
self.assertEqual(u'/home/\xa7test', osutils._posix_get_home_dir())
2148
osutils._fs_enc = "iso8859-5"
2149
self.assertEqual(u'/home/\u0407test', osutils._posix_get_home_dir())
2150
osutils._fs_enc = "utf-8"
2151
self.assertRaises(errors.BadFilenameEncoding,
2152
osutils._posix_get_home_dir)
2074
2155
class TestGetuserUnicode(tests.TestCase):
2157
def test_is_unicode(self):
2158
user = osutils.getuser_unicode()
2159
self.assertIsInstance(user, unicode)
2161
def envvar_to_override(self):
2162
if sys.platform == "win32":
2163
# Disable use of platform calls on windows so envvar is used
2164
self.overrideAttr(win32utils, 'has_ctypes', False)
2165
return 'USERNAME' # only variable used on windows
2166
return 'LOGNAME' # first variable checked by getpass.getuser()
2076
2168
def test_ascii_user(self):
2077
self.overrideEnv('LOGNAME', 'jrandom')
2169
self.overrideEnv(self.envvar_to_override(), 'jrandom')
2078
2170
self.assertEqual(u'jrandom', osutils.getuser_unicode())
2080
2172
def test_unicode_user(self):
2141
2232
self.assertTrue(osutils.find_executable_on_path('sh') is not None)
2142
2233
self.assertTrue(
2143
2234
osutils.find_executable_on_path('THIS SHOULD NOT EXIST') is None)
2237
class TestEnvironmentErrors(tests.TestCase):
2238
"""Test handling of environmental errors"""
2240
def test_is_oserror(self):
2241
self.assertTrue(osutils.is_environment_error(
2242
OSError(errno.EINVAL, "Invalid parameter")))
2244
def test_is_ioerror(self):
2245
self.assertTrue(osutils.is_environment_error(
2246
IOError(errno.EINVAL, "Invalid parameter")))
2248
def test_is_socket_error(self):
2249
self.assertTrue(osutils.is_environment_error(
2250
socket.error(errno.EINVAL, "Invalid parameter")))
2252
def test_is_select_error(self):
2253
self.assertTrue(osutils.is_environment_error(
2254
select.error(errno.EINVAL, "Invalid parameter")))
2256
def test_is_pywintypes_error(self):
2257
self.requireFeature(features.pywintypes)
2259
self.assertTrue(osutils.is_environment_error(
2260
pywintypes.error(errno.EINVAL, "Invalid parameter", "Caller")))