97
def load_tests(basic_tests, module, loader):
98
suite = loader.suiteClass()
99
dir_reader_tests, remaining_tests = tests.split_suite_by_condition(
100
basic_tests, tests.condition_isinstance(TestDirReader))
101
tests.multiply_tests(dir_reader_tests, dir_reader_scenarios(), suite)
102
suite.addTest(remaining_tests)
101
load_tests = load_tests_apply_scenarios
106
104
class TestContainsWhitespace(tests.TestCase):
108
106
def test_contains_whitespace(self):
109
self.failUnless(osutils.contains_whitespace(u' '))
110
self.failUnless(osutils.contains_whitespace(u'hello there'))
111
self.failUnless(osutils.contains_whitespace(u'hellothere\n'))
112
self.failUnless(osutils.contains_whitespace(u'hello\nthere'))
113
self.failUnless(osutils.contains_whitespace(u'hello\rthere'))
114
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'))
116
114
# \xa0 is "Non-breaking-space" which on some python locales thinks it
117
115
# is whitespace, but we do not.
118
self.failIf(osutils.contains_whitespace(u''))
119
self.failIf(osutils.contains_whitespace(u'hellothere'))
120
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'))
123
121
class TestRename(tests.TestCaseInTempDir):
1972
2054
self.overrideAttr(termios, 'TIOCGWINSZ')
1973
2055
del termios.TIOCGWINSZ
1974
del os.environ['BZR_COLUMNS']
1975
del os.environ['COLUMNS']
2056
self.overrideEnv('BZR_COLUMNS', None)
2057
self.overrideEnv('COLUMNS', None)
1976
2058
# Whatever the result is, if we don't raise an exception, it's ok.
1977
2059
osutils.terminal_width()
2062
class TestCreationOps(tests.TestCaseInTempDir):
2063
_test_needs_features = [features.chown_feature]
2066
tests.TestCaseInTempDir.setUp(self)
2067
self.overrideAttr(os, 'chown', self._dummy_chown)
2069
# params set by call to _dummy_chown
2070
self.path = self.uid = self.gid = None
2072
def _dummy_chown(self, path, uid, gid):
2073
self.path, self.uid, self.gid = path, uid, gid
2075
def test_copy_ownership_from_path(self):
2076
"""copy_ownership_from_path test with specified src."""
2078
f = open('test_file', 'wt')
2079
osutils.copy_ownership_from_path('test_file', ownsrc)
2082
self.assertEquals(self.path, 'test_file')
2083
self.assertEquals(self.uid, s.st_uid)
2084
self.assertEquals(self.gid, s.st_gid)
2086
def test_copy_ownership_nonesrc(self):
2087
"""copy_ownership_from_path test with src=None."""
2088
f = open('test_file', 'wt')
2089
# should use parent dir for permissions
2090
osutils.copy_ownership_from_path('test_file')
2093
self.assertEquals(self.path, 'test_file')
2094
self.assertEquals(self.uid, s.st_uid)
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)
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()
2168
def test_ascii_user(self):
2169
self.overrideEnv(self.envvar_to_override(), 'jrandom')
2170
self.assertEqual(u'jrandom', osutils.getuser_unicode())
2172
def test_unicode_user(self):
2173
ue = osutils.get_user_encoding()
2174
uni_val, env_val = tests.probe_unicode_in_user_encoding()
2176
raise tests.TestSkipped(
2177
'Cannot find a unicode character that works in encoding %s'
2178
% (osutils.get_user_encoding(),))
2179
uni_username = u'jrandom' + uni_val
2180
encoded_username = uni_username.encode(ue)
2181
self.overrideEnv(self.envvar_to_override(), encoded_username)
2182
self.assertEqual(uni_username, osutils.getuser_unicode())
2185
class TestBackupNames(tests.TestCase):
2188
super(TestBackupNames, self).setUp()
2191
def backup_exists(self, name):
2192
return name in self.backups
2194
def available_backup_name(self, name):
2195
backup_name = osutils.available_backup_name(name, self.backup_exists)
2196
self.backups.append(backup_name)
2199
def assertBackupName(self, expected, name):
2200
self.assertEqual(expected, self.available_backup_name(name))
2202
def test_empty(self):
2203
self.assertBackupName('file.~1~', 'file')
2205
def test_existing(self):
2206
self.available_backup_name('file')
2207
self.available_backup_name('file')
2208
self.assertBackupName('file.~3~', 'file')
2209
# Empty slots are found, this is not a strict requirement and may be
2210
# revisited if we test against all implementations.
2211
self.backups.remove('file.~2~')
2212
self.assertBackupName('file.~2~', 'file')
2215
class TestFindExecutableInPath(tests.TestCase):
2217
def test_windows(self):
2218
if sys.platform != 'win32':
2219
raise tests.TestSkipped('test requires win32')
2220
self.assertTrue(osutils.find_executable_on_path('explorer') is not None)
2222
osutils.find_executable_on_path('explorer.exe') is not None)
2224
osutils.find_executable_on_path('EXPLORER.EXE') is not None)
2226
osutils.find_executable_on_path('THIS SHOULD NOT EXIST') is None)
2227
self.assertTrue(osutils.find_executable_on_path('file.txt') is None)
2229
def test_other(self):
2230
if sys.platform == 'win32':
2231
raise tests.TestSkipped('test requires non-win32')
2232
self.assertTrue(osutils.find_executable_on_path('sh') is not None)
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")))