diff options
author | Lars Gustäbel <lars@gustaebel.de> | 2007-08-07 18:36:16 (GMT) |
---|---|---|
committer | Lars Gustäbel <lars@gustaebel.de> | 2007-08-07 18:36:16 (GMT) |
commit | b506dc32c1ab2d0e4d2c3549d0822904432140ec (patch) | |
tree | de91ac809029b8aee4134c820dda9a1517c69e18 /Lib/test/test_tarfile.py | |
parent | cd869d8d415a9278addf5f2bd3648aa2fbffe660 (diff) | |
download | cpython-b506dc32c1ab2d0e4d2c3549d0822904432140ec.zip cpython-b506dc32c1ab2d0e4d2c3549d0822904432140ec.tar.gz cpython-b506dc32c1ab2d0e4d2c3549d0822904432140ec.tar.bz2 |
Completed str/unicode unification.
All tests pass, but maybe some tests have become unnecessary now.
Removed PaxUnicodeTest, added MiscTest.
TarFile.extractfile() returns a binary file object which can be used
with a TextIOWrapper for text I/O.
Diffstat (limited to 'Lib/test/test_tarfile.py')
-rw-r--r-- | Lib/test/test_tarfile.py | 90 |
1 files changed, 32 insertions, 58 deletions
diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py index eaaccd3..e71083d 100644 --- a/Lib/test/test_tarfile.py +++ b/Lib/test/test_tarfile.py @@ -2,6 +2,7 @@ import sys import os +import io import shutil import tempfile import StringIO @@ -64,8 +65,8 @@ class UstarReadTest(ReadTest): def test_fileobj_readlines(self): self.tar.extract("ustar/regtype", TEMPDIR) tarinfo = self.tar.getmember("ustar/regtype") - fobj1 = open(os.path.join(TEMPDIR, "ustar/regtype"), "rU") - fobj2 = self.tar.extractfile(tarinfo) + fobj1 = open(os.path.join(TEMPDIR, "ustar/regtype"), "r") + fobj2 = io.TextIOWrapper(self.tar.extractfile(tarinfo)) lines1 = fobj1.readlines() lines2 = fobj2.readlines() @@ -83,7 +84,7 @@ class UstarReadTest(ReadTest): fobj1 = open(os.path.join(TEMPDIR, "ustar/regtype"), "rU") fobj2 = self.tar.extractfile(tarinfo) lines1 = fobj1.readlines() - lines2 = [line for line in fobj2] + lines2 = list(io.TextIOWrapper(fobj2)) self.assert_(lines1 == lines2, "fileobj.__iter__() failed") @@ -115,11 +116,11 @@ class UstarReadTest(ReadTest): fobj.seek(0, 2) self.assertEqual(tarinfo.size, fobj.tell(), "seek() to file's end failed") - self.assert_(fobj.read() == "", + self.assert_(fobj.read() == b"", "read() at file's end did not return empty string") fobj.seek(-tarinfo.size, 2) self.assertEqual(0, fobj.tell(), - "relative seek() to file's start failed") + "relative seek() to file's end failed") fobj.seek(512) s1 = fobj.readlines() fobj.seek(512) @@ -245,13 +246,13 @@ class DetectReadTest(unittest.TestCase): def _testfunc_file(self, name, mode): try: tarfile.open(name, mode) - except tarfile.ReadError: + except tarfile.ReadError as e: self.fail() def _testfunc_fileobj(self, name, mode): try: tarfile.open(name, mode, fileobj=open(name, "rb")) - except tarfile.ReadError: + except tarfile.ReadError as e: self.fail() def _test_modes(self, testfunc): @@ -393,7 +394,7 @@ class LongnameTest(ReadTest): tarinfo = self.tar.getmember(longname) offset = tarinfo.offset self.tar.fileobj.seek(offset) - fobj = StringIO.StringIO(self.tar.fileobj.read(3 * 512)) + fobj = io.BytesIO(self.tar.fileobj.read(3 * 512)) self.assertRaises(tarfile.ReadError, tarfile.open, name="foo.tar", fileobj=fobj) def test_header_offset(self): @@ -401,9 +402,9 @@ class LongnameTest(ReadTest): # the preceding extended header. longname = self.subdir + "/" + "123/" * 125 + "longname" offset = self.tar.getmember(longname).offset - fobj = open(tarname) + fobj = open(tarname, "rb") fobj.seek(offset) - tarinfo = tarfile.TarInfo.frombuf(fobj.read(512)) + tarinfo = tarfile.TarInfo.frombuf(fobj.read(512), "iso8859-1", "strict") self.assertEqual(tarinfo.type, self.longnametype) @@ -764,10 +765,10 @@ class PaxWriteTest(GNUWriteTest): self.assertEqual(tar.pax_headers, pax_headers) self.assertEqual(tar.getmembers()[0].pax_headers, pax_headers) - # Test if all the fields are unicode. + # Test if all the fields are strings. for key, val in tar.pax_headers.items(): - self.assert_(type(key) is unicode) - self.assert_(type(val) is unicode) + self.assert_(type(key) is not bytes) + self.assert_(type(val) is not bytes) if key in tarfile.PAX_NUMBER_FIELDS: try: tarfile.PAX_NUMBER_FIELDS[key](val) @@ -815,8 +816,8 @@ class UstarUnicodeTest(unittest.TestCase): tar.close() tar = tarfile.open(tmpname, encoding=encoding) - self.assert_(type(tar.getnames()[0]) is not unicode) - self.assertEqual(tar.getmembers()[0].name, name.encode(encoding)) + self.assert_(type(tar.getnames()[0]) is not bytes) + self.assertEqual(tar.getmembers()[0].name, name) tar.close() def test_unicode_filename_error(self): @@ -824,12 +825,6 @@ class UstarUnicodeTest(unittest.TestCase): tarinfo = tarfile.TarInfo() tarinfo.name = "äöü" - if self.format == tarfile.PAX_FORMAT: - self.assertRaises(UnicodeError, tar.addfile, tarinfo) - else: - tar.addfile(tarinfo) - - tarinfo.name = "äöü" self.assertRaises(UnicodeError, tar.addfile, tarinfo) tarinfo.name = "foo" @@ -851,7 +846,7 @@ class UstarUnicodeTest(unittest.TestCase): t.uname = name t.gname = name - fobj = StringIO.StringIO() + fobj = io.BytesIO() tar = tarfile.open("foo.tar", mode="w", fileobj=fobj, format=self.format, encoding="iso8859-1") tar.addfile(t) tar.close() @@ -862,46 +857,12 @@ class UstarUnicodeTest(unittest.TestCase): self.assertEqual(t.uname, "äöü") self.assertEqual(t.gname, "äöü") + class GNUUnicodeTest(UstarUnicodeTest): format = tarfile.GNU_FORMAT -class PaxUnicodeTest(UstarUnicodeTest): - - format = tarfile.PAX_FORMAT - - def _create_unicode_name(self, name): - tar = tarfile.open(tmpname, "w", format=self.format) - t = tarfile.TarInfo() - t.pax_headers["path"] = name - tar.addfile(t) - tar.close() - - def test_error_handlers(self): - # Test if the unicode error handlers work correctly for characters - # that cannot be expressed in a given encoding. - self._create_unicode_name("äöü") - - for handler, name in (("utf-8", "äöü".encode("utf8")), - ("replace", "???"), ("ignore", "")): - tar = tarfile.open(tmpname, format=self.format, encoding="ascii", - errors=handler) - self.assertEqual(tar.getnames()[0], name) - - self.assertRaises(UnicodeError, tarfile.open, tmpname, - encoding="ascii", errors="strict") - - def test_error_handler_utf8(self): - # Create a pathname that has one component representable using - # iso8859-1 and the other only in iso8859-15. - self._create_unicode_name("äöü/¤") - - tar = tarfile.open(tmpname, format=self.format, encoding="iso8859-1", - errors="utf-8") - self.assertEqual(tar.getnames()[0], "äöü/" + "¤".encode("utf8")) - - class AppendTest(unittest.TestCase): # Test append mode (cp. patch #1652681). @@ -1028,6 +989,19 @@ class LimitsTest(unittest.TestCase): tarinfo.tobuf(tarfile.PAX_FORMAT) +class MiscTest(unittest.TestCase): + + def test_char_fields(self): + self.assertEqual(tarfile.stn("foo", 8, "ascii", "strict"), b"foo\0\0\0\0\0") + self.assertEqual(tarfile.stn("foobar", 3, "ascii", "strict"), b"foo") + self.assertEqual(tarfile.nts(b"foo\0\0\0\0\0", "ascii", "strict"), "foo") + self.assertEqual(tarfile.nts(b"foo\0bar\0", "ascii", "strict"), "foo") + + def test_number_fields(self): + self.assertEqual(tarfile.itn(1), b"0000001\x00") + self.assertEqual(tarfile.itn(0xffffffff), b"\x80\x00\x00\x00\xff\xff\xff\xff") + + class GzipMiscReadTest(MiscReadTest): tarname = gzipname mode = "r:gz" @@ -1075,9 +1049,9 @@ def test_main(): PaxWriteTest, UstarUnicodeTest, GNUUnicodeTest, - PaxUnicodeTest, AppendTest, LimitsTest, + MiscTest, ] if hasattr(os, "link"): |