~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_osutils.py

  • Committer: Vincent Ladeuil
  • Date: 2011-06-27 15:42:09 UTC
  • mfrom: (5993 +trunk)
  • mto: (5993.1.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 5994.
  • Revision ID: v.ladeuil+lp@free.fr-20110627154209-azubuhbuxsz109hq
Merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
41
41
from bzrlib.tests.scenarios import load_tests_apply_scenarios
42
42
 
43
43
 
44
 
class _UTF8DirReaderFeature(features.Feature):
 
44
class _UTF8DirReaderFeature(tests.Feature):
45
45
 
46
46
    def _probe(self):
47
47
        try:
54
54
    def feature_name(self):
55
55
        return 'bzrlib._readdir_pyx'
56
56
 
57
 
UTF8DirReaderFeature = features.ModuleAvailableFeature('bzrlib._readdir_pyx')
 
57
UTF8DirReaderFeature = _UTF8DirReaderFeature()
58
58
 
59
 
term_ios_feature = features.ModuleAvailableFeature('termios')
 
59
term_ios_feature = tests.ModuleAvailableFeature('termios')
60
60
 
61
61
 
62
62
def _already_unicode(s):
429
429
class TestLinks(tests.TestCaseInTempDir):
430
430
 
431
431
    def test_dereference_path(self):
432
 
        self.requireFeature(features.SymlinkFeature)
 
432
        self.requireFeature(tests.SymlinkFeature)
433
433
        cwd = osutils.realpath('.')
434
434
        os.mkdir('bar')
435
435
        bar_path = osutils.pathjoin(cwd, 'bar')
482
482
 
483
483
class TestCanonicalRelPath(tests.TestCaseInTempDir):
484
484
 
485
 
    _test_needs_features = [features.CaseInsCasePresFilenameFeature]
 
485
    _test_needs_features = [tests.CaseInsCasePresFilenameFeature]
486
486
 
487
487
    def test_canonical_relpath_simple(self):
488
488
        f = file('MixedCaseName', 'w')
818
818
        self.assertEqual(None, osutils.safe_file_id(None))
819
819
 
820
820
 
821
 
class TestPosixFuncs(tests.TestCase):
822
 
    """Test that the posix version of normpath returns an appropriate path
823
 
       when used with 2 leading slashes."""
824
 
 
825
 
    def test_normpath(self):
826
 
        self.assertEqual('/etc/shadow', osutils._posix_normpath('/etc/shadow'))
827
 
        self.assertEqual('/etc/shadow', osutils._posix_normpath('//etc/shadow'))
828
 
        self.assertEqual('/etc/shadow', osutils._posix_normpath('///etc/shadow'))
829
 
 
830
 
 
831
821
class TestWin32Funcs(tests.TestCase):
832
822
    """Test that _win32 versions of os utilities return appropriate paths."""
833
823
 
898
888
    """Test win32 functions that create files."""
899
889
 
900
890
    def test_getcwd(self):
901
 
        self.requireFeature(features.UnicodeFilenameFeature)
 
891
        self.requireFeature(tests.UnicodeFilenameFeature)
902
892
        os.mkdir(u'mu-\xb5')
903
893
        os.chdir(u'mu-\xb5')
904
894
        # TODO: jam 20060427 This will probably fail on Mac OSX because
994
984
    """Test mac special functions that require directories."""
995
985
 
996
986
    def test_getcwd(self):
997
 
        self.requireFeature(features.UnicodeFilenameFeature)
 
987
        self.requireFeature(tests.UnicodeFilenameFeature)
998
988
        os.mkdir(u'B\xe5gfors')
999
989
        os.chdir(u'B\xe5gfors')
1000
990
        self.assertEndsWith(osutils._mac_getcwd(), u'B\xe5gfors')
1001
991
 
1002
992
    def test_getcwd_nonnorm(self):
1003
 
        self.requireFeature(features.UnicodeFilenameFeature)
 
993
        self.requireFeature(tests.UnicodeFilenameFeature)
1004
994
        # Test that _mac_getcwd() will normalize this path
1005
995
        os.mkdir(u'Ba\u030agfors')
1006
996
        os.chdir(u'Ba\u030agfors')
1116
1106
        # are not using the filesystem's encoding
1117
1107
 
1118
1108
        # require a bytestring based filesystem
1119
 
        self.requireFeature(features.ByteStringNamedFilesystem)
 
1109
        self.requireFeature(tests.ByteStringNamedFilesystem)
1120
1110
 
1121
1111
        tree = [
1122
1112
            '.bzr',
1217
1207
        self._save_platform_info()
1218
1208
        win32utils.winver = None # Avoid the win32 detection code
1219
1209
        osutils._fs_enc = 'UTF-8'
1220
 
        self.assertDirReaderIs(
1221
 
            UTF8DirReaderFeature.module.UTF8DirReader)
 
1210
        self.assertDirReaderIs(UTF8DirReaderFeature.reader)
1222
1211
 
1223
1212
    def test_force_walkdirs_utf8_fs_ascii(self):
1224
1213
        self.requireFeature(UTF8DirReaderFeature)
1225
1214
        self._save_platform_info()
1226
1215
        win32utils.winver = None # Avoid the win32 detection code
1227
1216
        osutils._fs_enc = 'US-ASCII'
1228
 
        self.assertDirReaderIs(
1229
 
            UTF8DirReaderFeature.module.UTF8DirReader)
 
1217
        self.assertDirReaderIs(UTF8DirReaderFeature.reader)
1230
1218
 
1231
1219
    def test_force_walkdirs_utf8_fs_ANSI(self):
1232
1220
        self.requireFeature(UTF8DirReaderFeature)
1233
1221
        self._save_platform_info()
1234
1222
        win32utils.winver = None # Avoid the win32 detection code
1235
1223
        osutils._fs_enc = 'ANSI_X3.4-1968'
1236
 
        self.assertDirReaderIs(
1237
 
            UTF8DirReaderFeature.module.UTF8DirReader)
 
1224
        self.assertDirReaderIs(UTF8DirReaderFeature.reader)
1238
1225
 
1239
1226
    def test_force_walkdirs_utf8_fs_latin1(self):
1240
1227
        self._save_platform_info()
1258
1245
 
1259
1246
    def test_unicode_walkdirs(self):
1260
1247
        """Walkdirs should always return unicode paths."""
1261
 
        self.requireFeature(features.UnicodeFilenameFeature)
 
1248
        self.requireFeature(tests.UnicodeFilenameFeature)
1262
1249
        name0 = u'0file-\xb6'
1263
1250
        name1 = u'1dir-\u062c\u0648'
1264
1251
        name2 = u'2file-\u0633'
1301
1288
 
1302
1289
        The abspath portion might be in unicode or utf-8
1303
1290
        """
1304
 
        self.requireFeature(features.UnicodeFilenameFeature)
 
1291
        self.requireFeature(tests.UnicodeFilenameFeature)
1305
1292
        name0 = u'0file-\xb6'
1306
1293
        name1 = u'1dir-\u062c\u0648'
1307
1294
        name2 = u'2file-\u0633'
1362
1349
 
1363
1350
        The abspath portion should be in unicode
1364
1351
        """
1365
 
        self.requireFeature(features.UnicodeFilenameFeature)
 
1352
        self.requireFeature(tests.UnicodeFilenameFeature)
1366
1353
        # Use the unicode reader. TODO: split into driver-and-driven unit
1367
1354
        # tests.
1368
1355
        self._save_platform_info()
1409
1396
 
1410
1397
    def test__walkdirs_utf8_win32readdir(self):
1411
1398
        self.requireFeature(test__walkdirs_win32.win32_readdir_feature)
1412
 
        self.requireFeature(features.UnicodeFilenameFeature)
 
1399
        self.requireFeature(tests.UnicodeFilenameFeature)
1413
1400
        from bzrlib._walkdirs_win32 import Win32ReadDir
1414
1401
        self._save_platform_info()
1415
1402
        osutils._selected_dir_reader = Win32ReadDir()
1466
1453
    def test__walkdirs_utf_win32_find_file_stat_file(self):
1467
1454
        """make sure our Stat values are valid"""
1468
1455
        self.requireFeature(test__walkdirs_win32.win32_readdir_feature)
1469
 
        self.requireFeature(features.UnicodeFilenameFeature)
 
1456
        self.requireFeature(tests.UnicodeFilenameFeature)
1470
1457
        from bzrlib._walkdirs_win32 import Win32ReadDir
1471
1458
        name0u = u'0file-\xb6'
1472
1459
        name0 = name0u.encode('utf8')
1490
1477
    def test__walkdirs_utf_win32_find_file_stat_directory(self):
1491
1478
        """make sure our Stat values are valid"""
1492
1479
        self.requireFeature(test__walkdirs_win32.win32_readdir_feature)
1493
 
        self.requireFeature(features.UnicodeFilenameFeature)
 
1480
        self.requireFeature(tests.UnicodeFilenameFeature)
1494
1481
        from bzrlib._walkdirs_win32 import Win32ReadDir
1495
1482
        name0u = u'0dir-\u062c\u0648'
1496
1483
        name0 = name0u.encode('utf8')
1596
1583
        self.assertEqual(['c'], os.listdir('target/b'))
1597
1584
 
1598
1585
    def test_copy_tree_symlinks(self):
1599
 
        self.requireFeature(features.SymlinkFeature)
 
1586
        self.requireFeature(tests.SymlinkFeature)
1600
1587
        self.build_tree(['source/'])
1601
1588
        os.symlink('a/generic/path', 'source/lnk')
1602
1589
        osutils.copy_tree('source', 'target')
1869
1856
        return filtered_dirblocks
1870
1857
 
1871
1858
    def test_walk_unicode_tree(self):
1872
 
        self.requireFeature(features.UnicodeFilenameFeature)
 
1859
        self.requireFeature(tests.UnicodeFilenameFeature)
1873
1860
        tree, expected_dirblocks = self._get_unicode_tree()
1874
1861
        self.build_tree(tree)
1875
1862
        result = list(osutils._walkdirs_utf8('.'))
1876
1863
        self.assertEqual(expected_dirblocks, self._filter_out(result))
1877
1864
 
1878
1865
    def test_symlink(self):
1879
 
        self.requireFeature(features.SymlinkFeature)
1880
 
        self.requireFeature(features.UnicodeFilenameFeature)
 
1866
        self.requireFeature(tests.SymlinkFeature)
 
1867
        self.requireFeature(tests.UnicodeFilenameFeature)
1881
1868
        target = u'target\N{Euro Sign}'
1882
1869
        link_name = u'l\N{Euro Sign}nk'
1883
1870
        os.symlink(target, link_name)
1901
1888
    But prior python versions failed to properly encode the passed unicode
1902
1889
    string.
1903
1890
    """
1904
 
    _test_needs_features = [features.SymlinkFeature, features.UnicodeFilenameFeature]
 
1891
    _test_needs_features = [tests.SymlinkFeature, tests.UnicodeFilenameFeature]
1905
1892
 
1906
1893
    def setUp(self):
1907
1894
        super(tests.TestCaseInTempDir, self).setUp()