~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_osutils.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2010-09-29 22:03:03 UTC
  • mfrom: (5416.2.6 jam-integration)
  • Revision ID: pqm@pqm.ubuntu.com-20100929220303-cr95h8iwtggco721
(mbp) Add 'break-lock --force'

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
import os
22
22
import re
23
23
import socket
24
 
import stat
25
24
import sys
26
25
import time
27
26
 
28
27
from bzrlib import (
29
28
    errors,
 
29
    lazy_regex,
30
30
    osutils,
 
31
    symbol_versioning,
31
32
    tests,
32
33
    trace,
33
34
    win32utils,
34
35
    )
35
36
from bzrlib.tests import (
 
37
    features,
36
38
    file_utils,
37
39
    test__walkdirs_win32,
38
40
    )
860
862
        self.assertEqual('//HOST/path', osutils._win98_abspath('//HOST/path'))
861
863
        # relative path
862
864
        cwd = osutils.getcwd().rstrip('/')
863
 
        drive = osutils._nt_splitdrive(cwd)[0]
 
865
        drive = osutils.ntpath.splitdrive(cwd)[0]
864
866
        self.assertEqual(cwd+'/path', osutils._win98_abspath('path'))
865
867
        self.assertEqual(drive+'/path', osutils._win98_abspath('/path'))
866
868
        # unicode path
1063
1065
        self.assertExpectedBlocks(expected_dirblocks[1:], result)
1064
1066
 
1065
1067
    def test_walkdirs_os_error(self):
1066
 
        # <https://bugs.edge.launchpad.net/bzr/+bug/338653>
 
1068
        # <https://bugs.launchpad.net/bzr/+bug/338653>
1067
1069
        # Pyrex readdir didn't raise useful messages if it had an error
1068
1070
        # reading the directory
1069
1071
        if sys.platform == 'win32':
1070
1072
            raise tests.TestNotApplicable(
1071
1073
                "readdir IOError not tested on win32")
 
1074
        self.requireFeature(features.not_running_as_root)
1072
1075
        os.mkdir("test-unreadable")
1073
1076
        os.chmod("test-unreadable", 0000)
1074
1077
        # must chmod it back so that it can be removed
1082
1085
        # Ensure the message contains the file name
1083
1086
        self.assertContainsRe(str(e), "\./test-unreadable")
1084
1087
 
 
1088
 
 
1089
    def test_walkdirs_encoding_error(self):
 
1090
        # <https://bugs.launchpad.net/bzr/+bug/488519>
 
1091
        # walkdirs didn't raise a useful message when the filenames
 
1092
        # are not using the filesystem's encoding
 
1093
 
 
1094
        # require a bytestring based filesystem
 
1095
        self.requireFeature(tests.ByteStringNamedFilesystem)
 
1096
 
 
1097
        tree = [
 
1098
            '.bzr',
 
1099
            '0file',
 
1100
            '1dir/',
 
1101
            '1dir/0file',
 
1102
            '1dir/1dir/',
 
1103
            '1file'
 
1104
            ]
 
1105
 
 
1106
        self.build_tree(tree)
 
1107
 
 
1108
        # rename the 1file to a latin-1 filename
 
1109
        os.rename("./1file", "\xe8file")
 
1110
 
 
1111
        self._save_platform_info()
 
1112
        win32utils.winver = None # Avoid the win32 detection code
 
1113
        osutils._fs_enc = 'UTF-8'
 
1114
 
 
1115
        # this should raise on error
 
1116
        def attempt():
 
1117
            for dirdetail, dirblock in osutils.walkdirs('.'):
 
1118
                pass
 
1119
 
 
1120
        self.assertRaises(errors.BadFilenameEncoding, attempt)
 
1121
 
1085
1122
    def test__walkdirs_utf8(self):
1086
1123
        tree = [
1087
1124
            '.bzr',
1670
1707
 
1671
1708
class TestReCompile(tests.TestCase):
1672
1709
 
 
1710
    def _deprecated_re_compile_checked(self, *args, **kwargs):
 
1711
        return self.applyDeprecated(symbol_versioning.deprecated_in((2, 2, 0)),
 
1712
            osutils.re_compile_checked, *args, **kwargs)
 
1713
 
1673
1714
    def test_re_compile_checked(self):
1674
 
        r = osutils.re_compile_checked(r'A*', re.IGNORECASE)
 
1715
        r = self._deprecated_re_compile_checked(r'A*', re.IGNORECASE)
1675
1716
        self.assertTrue(r.match('aaaa'))
1676
1717
        self.assertTrue(r.match('aAaA'))
1677
1718
 
1678
1719
    def test_re_compile_checked_error(self):
1679
1720
        # like https://bugs.launchpad.net/bzr/+bug/251352
 
1721
 
 
1722
        # Due to possible test isolation error, re.compile is not lazy at
 
1723
        # this point. We re-install lazy compile.
 
1724
        lazy_regex.install_lazy_compile()
1680
1725
        err = self.assertRaises(
1681
1726
            errors.BzrCommandError,
1682
 
            osutils.re_compile_checked, '*', re.IGNORECASE, 'test case')
 
1727
            self._deprecated_re_compile_checked, '*', re.IGNORECASE, 'test case')
1683
1728
        self.assertEqual(
1684
 
            "Invalid regular expression in test case: '*': "
1685
 
            "nothing to repeat",
 
1729
            'Invalid regular expression in test case: '
 
1730
            '"*" nothing to repeat',
1686
1731
            str(err))
1687
1732
 
1688
1733
 
1909
1954
 
1910
1955
class TestTerminalWidth(tests.TestCase):
1911
1956
 
 
1957
    def setUp(self):
 
1958
        tests.TestCase.setUp(self)
 
1959
        self._orig_terminal_size_state = osutils._terminal_size_state
 
1960
        self._orig_first_terminal_size = osutils._first_terminal_size
 
1961
        self.addCleanup(self.restore_osutils_globals)
 
1962
        osutils._terminal_size_state = 'no_data'
 
1963
        osutils._first_terminal_size = None
 
1964
 
 
1965
    def restore_osutils_globals(self):
 
1966
        osutils._terminal_size_state = self._orig_terminal_size_state
 
1967
        osutils._first_terminal_size = self._orig_first_terminal_size
 
1968
 
1912
1969
    def replace_stdout(self, new):
1913
1970
        self.overrideAttr(sys, 'stdout', new)
1914
1971
 
1975
2032
        del os.environ['COLUMNS']
1976
2033
        # Whatever the result is, if we don't raise an exception, it's ok.
1977
2034
        osutils.terminal_width()
 
2035
 
 
2036
class TestCreationOps(tests.TestCaseInTempDir):
 
2037
    _test_needs_features = [features.chown_feature]
 
2038
 
 
2039
    def setUp(self):
 
2040
        tests.TestCaseInTempDir.setUp(self)
 
2041
        self.overrideAttr(os, 'chown', self._dummy_chown)
 
2042
 
 
2043
        # params set by call to _dummy_chown
 
2044
        self.path = self.uid = self.gid = None
 
2045
 
 
2046
    def _dummy_chown(self, path, uid, gid):
 
2047
        self.path, self.uid, self.gid = path, uid, gid
 
2048
 
 
2049
    def test_copy_ownership_from_path(self):
 
2050
        """copy_ownership_from_path test with specified src."""
 
2051
        ownsrc = '/'
 
2052
        f = open('test_file', 'wt')
 
2053
        osutils.copy_ownership_from_path('test_file', ownsrc)
 
2054
 
 
2055
        s = os.stat(ownsrc)
 
2056
        self.assertEquals(self.path, 'test_file')
 
2057
        self.assertEquals(self.uid, s.st_uid)
 
2058
        self.assertEquals(self.gid, s.st_gid)
 
2059
 
 
2060
    def test_copy_ownership_nonesrc(self):
 
2061
        """copy_ownership_from_path test with src=None."""
 
2062
        f = open('test_file', 'wt')
 
2063
        # should use parent dir for permissions
 
2064
        osutils.copy_ownership_from_path('test_file')
 
2065
 
 
2066
        s = os.stat('..')
 
2067
        self.assertEquals(self.path, 'test_file')
 
2068
        self.assertEquals(self.uid, s.st_uid)
 
2069
        self.assertEquals(self.gid, s.st_gid)
 
2070
 
 
2071
class TestGetuserUnicode(tests.TestCase):
 
2072
 
 
2073
    def test_ascii_user(self):
 
2074
        osutils.set_or_unset_env('LOGNAME', 'jrandom')
 
2075
        self.assertEqual(u'jrandom', osutils.getuser_unicode())
 
2076
 
 
2077
    def test_unicode_user(self):
 
2078
        ue = osutils.get_user_encoding()
 
2079
        uni_val, env_val = tests.probe_unicode_in_user_encoding()
 
2080
        if uni_val is None:
 
2081
            raise tests.TestSkipped(
 
2082
                'Cannot find a unicode character that works in encoding %s'
 
2083
                % (osutils.get_user_encoding(),))
 
2084
        uni_username = u'jrandom' + uni_val
 
2085
        encoded_username = uni_username.encode(ue)
 
2086
        osutils.set_or_unset_env('LOGNAME', encoded_username)
 
2087
        self.assertEqual(uni_username, osutils.getuser_unicode())