~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_osutils.py

  • Committer: Jelmer Vernooij
  • Date: 2012-02-20 12:19:29 UTC
  • mfrom: (6437.23.11 2.5)
  • mto: (6581.1.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 6582.
  • Revision ID: jelmer@samba.org-20120220121929-7ni2psvjoatm1yp4
Merge bzr/2.5.

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
818
819
        self.assertEqual(None, osutils.safe_file_id(None))
819
820
 
820
821
 
 
822
class TestPosixFuncs(tests.TestCase):
 
823
    """Test that the posix version of normpath returns an appropriate path
 
824
       when used with 2 leading slashes."""
 
825
 
 
826
    def test_normpath(self):
 
827
        self.assertEqual('/etc/shadow', osutils._posix_normpath('/etc/shadow'))
 
828
        self.assertEqual('/etc/shadow', osutils._posix_normpath('//etc/shadow'))
 
829
        self.assertEqual('/etc/shadow', osutils._posix_normpath('///etc/shadow'))
 
830
 
 
831
 
821
832
class TestWin32Funcs(tests.TestCase):
822
833
    """Test that _win32 versions of os utilities return appropriate paths."""
823
834
 
1206
1217
        self.requireFeature(UTF8DirReaderFeature)
1207
1218
        self._save_platform_info()
1208
1219
        win32utils.winver = None # Avoid the win32 detection code
1209
 
        osutils._fs_enc = 'UTF-8'
 
1220
        osutils._fs_enc = 'utf-8'
1210
1221
        self.assertDirReaderIs(
1211
1222
            UTF8DirReaderFeature.module.UTF8DirReader)
1212
1223
 
1214
1225
        self.requireFeature(UTF8DirReaderFeature)
1215
1226
        self._save_platform_info()
1216
1227
        win32utils.winver = None # Avoid the win32 detection code
1217
 
        osutils._fs_enc = 'US-ASCII'
1218
 
        self.assertDirReaderIs(
1219
 
            UTF8DirReaderFeature.module.UTF8DirReader)
1220
 
 
1221
 
    def test_force_walkdirs_utf8_fs_ANSI(self):
1222
 
        self.requireFeature(UTF8DirReaderFeature)
1223
 
        self._save_platform_info()
1224
 
        win32utils.winver = None # Avoid the win32 detection code
1225
 
        osutils._fs_enc = 'ANSI_X3.4-1968'
 
1228
        osutils._fs_enc = 'ascii'
1226
1229
        self.assertDirReaderIs(
1227
1230
            UTF8DirReaderFeature.module.UTF8DirReader)
1228
1231
 
1229
1232
    def test_force_walkdirs_utf8_fs_latin1(self):
1230
1233
        self._save_platform_info()
1231
1234
        win32utils.winver = None # Avoid the win32 detection code
1232
 
        osutils._fs_enc = 'latin1'
 
1235
        osutils._fs_enc = 'iso-8859-1'
1233
1236
        self.assertDirReaderIs(osutils.UnicodeDirReader)
1234
1237
 
1235
1238
    def test_force_walkdirs_utf8_nt(self):
2092
2095
        self.assertEquals(self.gid, s.st_gid)
2093
2096
 
2094
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
 
2095
2155
class TestGetuserUnicode(tests.TestCase):
2096
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
 
2097
2168
    def test_ascii_user(self):
2098
 
        self.overrideEnv('LOGNAME', 'jrandom')
 
2169
        self.overrideEnv(self.envvar_to_override(), 'jrandom')
2099
2170
        self.assertEqual(u'jrandom', osutils.getuser_unicode())
2100
2171
 
2101
2172
    def test_unicode_user(self):
2107
2178
                % (osutils.get_user_encoding(),))
2108
2179
        uni_username = u'jrandom' + uni_val
2109
2180
        encoded_username = uni_username.encode(ue)
2110
 
        self.overrideEnv('LOGNAME', encoded_username)
 
2181
        self.overrideEnv(self.envvar_to_override(), encoded_username)
2111
2182
        self.assertEqual(uni_username, osutils.getuser_unicode())
2112
 
        self.overrideEnv('LOGNAME', u'jrandom\xb6'.encode(ue))
2113
 
        self.assertEqual(u'jrandom\xb6', osutils.getuser_unicode())
2114
 
 
2115
 
    def test_no_username_bug_660174(self):
2116
 
        self.requireFeature(features.win32_feature)
2117
 
        for name in ('LOGNAME', 'USER', 'LNAME', 'USERNAME'):
2118
 
            self.overrideEnv(name, None)
2119
 
        self.assertEqual(u'UNKNOWN', osutils.getuser_unicode())
2120
2183
 
2121
2184
 
2122
2185
class TestBackupNames(tests.TestCase):
2169
2232
        self.assertTrue(osutils.find_executable_on_path('sh') is not None)
2170
2233
        self.assertTrue(
2171
2234
            osutils.find_executable_on_path('THIS SHOULD NOT EXIST') is None)
 
2235
 
 
2236
 
 
2237
class TestEnvironmentErrors(tests.TestCase):
 
2238
    """Test handling of environmental errors"""
 
2239
 
 
2240
    def test_is_oserror(self):
 
2241
        self.assertTrue(osutils.is_environment_error(
 
2242
            OSError(errno.EINVAL, "Invalid parameter")))
 
2243
 
 
2244
    def test_is_ioerror(self):
 
2245
        self.assertTrue(osutils.is_environment_error(
 
2246
            IOError(errno.EINVAL, "Invalid parameter")))
 
2247
 
 
2248
    def test_is_socket_error(self):
 
2249
        self.assertTrue(osutils.is_environment_error(
 
2250
            socket.error(errno.EINVAL, "Invalid parameter")))
 
2251
 
 
2252
    def test_is_select_error(self):
 
2253
        self.assertTrue(osutils.is_environment_error(
 
2254
            select.error(errno.EINVAL, "Invalid parameter")))
 
2255
 
 
2256
    def test_is_pywintypes_error(self):
 
2257
        self.requireFeature(features.pywintypes)
 
2258
        import pywintypes
 
2259
        self.assertTrue(osutils.is_environment_error(
 
2260
            pywintypes.error(errno.EINVAL, "Invalid parameter", "Caller")))