python-2.5.2/win32/Lib/test/test_pep277.py
changeset 0 ae805ac0140d
equal deleted inserted replaced
-1:000000000000 0:ae805ac0140d
       
     1 # Test the Unicode versions of normal file functions
       
     2 # open, os.open, os.stat. os.listdir, os.rename, os.remove, os.mkdir, os.chdir, os.rmdir
       
     3 import sys, os, unittest
       
     4 from test import test_support
       
     5 if not os.path.supports_unicode_filenames:
       
     6     raise test_support.TestSkipped, "test works only on NT+"
       
     7 
       
     8 filenames = [
       
     9     'abc',
       
    10     u'ascii',
       
    11     u'Gr\xfc\xdf-Gott',
       
    12     u'\u0393\u03b5\u03b9\u03ac-\u03c3\u03b1\u03c2',
       
    13     u'\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435',
       
    14     u'\u306b\u307d\u3093',
       
    15     u'\u05d4\u05e9\u05e7\u05e6\u05e5\u05e1',
       
    16     u'\u66e8\u66e9\u66eb',
       
    17     u'\u66e8\u05e9\u3093\u0434\u0393\xdf',
       
    18     ]
       
    19 
       
    20 # Destroy directory dirname and all files under it, to one level.
       
    21 def deltree(dirname):
       
    22     # Don't hide legitimate errors:  if one of these suckers exists, it's
       
    23     # an error if we can't remove it.
       
    24     if os.path.exists(dirname):
       
    25         # must pass unicode to os.listdir() so we get back unicode results.
       
    26         for fname in os.listdir(unicode(dirname)):
       
    27             os.unlink(os.path.join(dirname, fname))
       
    28         os.rmdir(dirname)
       
    29 
       
    30 class UnicodeFileTests(unittest.TestCase):
       
    31     files = [os.path.join(test_support.TESTFN, f) for f in filenames]
       
    32 
       
    33     def setUp(self):
       
    34         try:
       
    35             os.mkdir(test_support.TESTFN)
       
    36         except OSError:
       
    37             pass
       
    38         for name in self.files:
       
    39             f = open(name, 'w')
       
    40             f.write((name+'\n').encode("utf-8"))
       
    41             f.close()
       
    42             os.stat(name)
       
    43 
       
    44     def tearDown(self):
       
    45         deltree(test_support.TESTFN)
       
    46 
       
    47     def _apply_failure(self, fn, filename, expected_exception,
       
    48                        check_fn_in_exception = True):
       
    49         try:
       
    50             fn(filename)
       
    51             raise test_support.TestFailed("Expected to fail calling '%s(%r)'"
       
    52                              % (fn.__name__, filename))
       
    53         except expected_exception, details:
       
    54             if check_fn_in_exception and details.filename != filename:
       
    55                 raise test_support.TestFailed("Function '%s(%r) failed with "
       
    56                                  "bad filename in the exception: %r"
       
    57                                  % (fn.__name__, filename,
       
    58                                     details.filename))
       
    59 
       
    60     def test_failures(self):
       
    61         # Pass non-existing Unicode filenames all over the place.
       
    62         for name in self.files:
       
    63             name = "not_" + name
       
    64             self._apply_failure(open, name, IOError)
       
    65             self._apply_failure(os.stat, name, OSError)
       
    66             self._apply_failure(os.chdir, name, OSError)
       
    67             self._apply_failure(os.rmdir, name, OSError)
       
    68             self._apply_failure(os.remove, name, OSError)
       
    69             # listdir may append a wildcard to the filename, so dont check
       
    70             self._apply_failure(os.listdir, name, OSError, False)
       
    71 
       
    72     def test_open(self):
       
    73         for name in self.files:
       
    74             f = open(name, 'w')
       
    75             f.write((name+'\n').encode("utf-8"))
       
    76             f.close()
       
    77             os.stat(name)
       
    78 
       
    79     def test_listdir(self):
       
    80         f1 = os.listdir(test_support.TESTFN)
       
    81         # Printing f1 is not appropriate, as specific filenames
       
    82         # returned depend on the local encoding
       
    83         f2 = os.listdir(unicode(test_support.TESTFN,
       
    84                                 sys.getfilesystemencoding()))
       
    85         f2.sort()
       
    86         print f2
       
    87 
       
    88     def test_rename(self):
       
    89         for name in self.files:
       
    90             os.rename(name,"tmp")
       
    91             os.rename("tmp",name)
       
    92 
       
    93     def test_directory(self):
       
    94         dirname = os.path.join(test_support.TESTFN,u'Gr\xfc\xdf-\u66e8\u66e9\u66eb')
       
    95         filename = u'\xdf-\u66e8\u66e9\u66eb'
       
    96         oldwd = os.getcwd()
       
    97         os.mkdir(dirname)
       
    98         os.chdir(dirname)
       
    99         f = open(filename, 'w')
       
   100         f.write((filename + '\n').encode("utf-8"))
       
   101         f.close()
       
   102         print repr(filename)
       
   103         os.access(filename,os.R_OK)
       
   104         os.remove(filename)
       
   105         os.chdir(oldwd)
       
   106         os.rmdir(dirname)
       
   107 
       
   108 def test_main():
       
   109     try:
       
   110         test_support.run_unittest(UnicodeFileTests)
       
   111     finally:
       
   112         deltree(test_support.TESTFN)
       
   113 
       
   114 if __name__ == "__main__":
       
   115     test_main()