~bzr/ubuntu/maverick/bzr/beta-ppa

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_osutils.py

Merge from main PPA.

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
import errno
21
21
import os
22
22
import re
 
23
import select
23
24
import socket
24
25
import sys
25
26
import time
1216
1217
        self.requireFeature(UTF8DirReaderFeature)
1217
1218
        self._save_platform_info()
1218
1219
        win32utils.winver = None # Avoid the win32 detection code
1219
 
        osutils._fs_enc = 'UTF-8'
 
1220
        osutils._fs_enc = 'utf-8'
1220
1221
        self.assertDirReaderIs(
1221
1222
            UTF8DirReaderFeature.module.UTF8DirReader)
1222
1223
 
1224
1225
        self.requireFeature(UTF8DirReaderFeature)
1225
1226
        self._save_platform_info()
1226
1227
        win32utils.winver = None # Avoid the win32 detection code
1227
 
        osutils._fs_enc = 'US-ASCII'
1228
 
        self.assertDirReaderIs(
1229
 
            UTF8DirReaderFeature.module.UTF8DirReader)
1230
 
 
1231
 
    def test_force_walkdirs_utf8_fs_ANSI(self):
1232
 
        self.requireFeature(UTF8DirReaderFeature)
1233
 
        self._save_platform_info()
1234
 
        win32utils.winver = None # Avoid the win32 detection code
1235
 
        osutils._fs_enc = 'ANSI_X3.4-1968'
 
1228
        osutils._fs_enc = 'ascii'
1236
1229
        self.assertDirReaderIs(
1237
1230
            UTF8DirReaderFeature.module.UTF8DirReader)
1238
1231
 
1239
1232
    def test_force_walkdirs_utf8_fs_latin1(self):
1240
1233
        self._save_platform_info()
1241
1234
        win32utils.winver = None # Avoid the win32 detection code
1242
 
        osutils._fs_enc = 'latin1'
 
1235
        osutils._fs_enc = 'iso-8859-1'
1243
1236
        self.assertDirReaderIs(osutils.UnicodeDirReader)
1244
1237
 
1245
1238
    def test_force_walkdirs_utf8_nt(self):
2102
2095
        self.assertEquals(self.gid, s.st_gid)
2103
2096
 
2104
2097
 
 
2098
class TestPathFromEnviron(tests.TestCase):
 
2099
 
 
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)
 
2105
 
 
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)
 
2111
 
 
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')
 
2124
 
 
2125
 
 
2126
class TestGetHomeDir(tests.TestCase):
 
2127
 
 
2128
    def test_is_unicode(self):
 
2129
        home = osutils._get_home_dir()
 
2130
        self.assertIsInstance(home, unicode)
 
2131
 
 
2132
    def test_posix_homeless(self):
 
2133
        self.overrideEnv('HOME', None)
 
2134
        home = osutils._get_home_dir()
 
2135
        self.assertIsInstance(home, unicode)
 
2136
 
 
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)
 
2142
 
 
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)
 
2153
 
 
2154
 
2105
2155
class TestGetuserUnicode(tests.TestCase):
2106
2156
 
 
2157
    def test_is_unicode(self):
 
2158
        user = osutils.getuser_unicode()
 
2159
        self.assertIsInstance(user, unicode)
 
2160
 
 
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()
 
2167
 
2107
2168
    def test_ascii_user(self):
2108
 
        self.overrideEnv('LOGNAME', 'jrandom')
 
2169
        self.overrideEnv(self.envvar_to_override(), 'jrandom')
2109
2170
        self.assertEqual(u'jrandom', osutils.getuser_unicode())
2110
2171
 
2111
2172
    def test_unicode_user(self):
2117
2178
                % (osutils.get_user_encoding(),))
2118
2179
        uni_username = u'jrandom' + uni_val
2119
2180
        encoded_username = uni_username.encode(ue)
2120
 
        self.overrideEnv('LOGNAME', encoded_username)
 
2181
        self.overrideEnv(self.envvar_to_override(), encoded_username)
2121
2182
        self.assertEqual(uni_username, osutils.getuser_unicode())
2122
 
        self.overrideEnv('LOGNAME', u'jrandom\xb6'.encode(ue))
2123
 
        self.assertEqual(u'jrandom\xb6', osutils.getuser_unicode())
2124
 
 
2125
 
    def test_no_username_bug_660174(self):
2126
 
        self.requireFeature(features.win32_feature)
2127
 
        for name in ('LOGNAME', 'USER', 'LNAME', 'USERNAME'):
2128
 
            self.overrideEnv(name, None)
2129
 
        self.assertEqual(u'UNKNOWN', osutils.getuser_unicode())
2130
2183
 
2131
2184
 
2132
2185
class TestBackupNames(tests.TestCase):
2172
2225
        self.assertTrue(
2173
2226
            osutils.find_executable_on_path('THIS SHOULD NOT EXIST') is None)
2174
2227
        self.assertTrue(osutils.find_executable_on_path('file.txt') is None)
 
2228
        
 
2229
    def test_windows_app_path(self):
 
2230
        if sys.platform != 'win32':
 
2231
            raise tests.TestSkipped('test requires win32')
 
2232
        # Override PATH env var so that exe can only be found on App Path
 
2233
        self.overrideEnv('PATH', '')
 
2234
        # Internt Explorer is always registered in the App Path
 
2235
        self.assertTrue(osutils.find_executable_on_path('iexplore') is not None)
2175
2236
 
2176
2237
    def test_other(self):
2177
2238
        if sys.platform == 'win32':
2179
2240
        self.assertTrue(osutils.find_executable_on_path('sh') is not None)
2180
2241
        self.assertTrue(
2181
2242
            osutils.find_executable_on_path('THIS SHOULD NOT EXIST') is None)
 
2243
 
 
2244
 
 
2245
class TestEnvironmentErrors(tests.TestCase):
 
2246
    """Test handling of environmental errors"""
 
2247
 
 
2248
    def test_is_oserror(self):
 
2249
        self.assertTrue(osutils.is_environment_error(
 
2250
            OSError(errno.EINVAL, "Invalid parameter")))
 
2251
 
 
2252
    def test_is_ioerror(self):
 
2253
        self.assertTrue(osutils.is_environment_error(
 
2254
            IOError(errno.EINVAL, "Invalid parameter")))
 
2255
 
 
2256
    def test_is_socket_error(self):
 
2257
        self.assertTrue(osutils.is_environment_error(
 
2258
            socket.error(errno.EINVAL, "Invalid parameter")))
 
2259
 
 
2260
    def test_is_select_error(self):
 
2261
        self.assertTrue(osutils.is_environment_error(
 
2262
            select.error(errno.EINVAL, "Invalid parameter")))
 
2263
 
 
2264
    def test_is_pywintypes_error(self):
 
2265
        self.requireFeature(features.pywintypes)
 
2266
        import pywintypes
 
2267
        self.assertTrue(osutils.is_environment_error(
 
2268
            pywintypes.error(errno.EINVAL, "Invalid parameter", "Caller")))