mirror of
https://github.com/python/cpython.git
synced 2024-12-01 22:04:04 +08:00
bfce016a30
the test to be marked as failing rather than skipped. Add an explicit "import zlib" to prevent this.
79 lines
2.6 KiB
Python
79 lines
2.6 KiB
Python
import zlib # implied prerequisite
|
|
import zipfile, os, StringIO, tempfile
|
|
from test_support import TestFailed
|
|
|
|
srcname = "junk9630.tmp"
|
|
zipname = "junk9708.tmp"
|
|
|
|
|
|
def zipTest(f, compression, srccontents):
|
|
zip = zipfile.ZipFile(f, "w", compression) # Create the ZIP archive
|
|
zip.write(srcname, "another.name")
|
|
zip.write(srcname, srcname)
|
|
zip.close()
|
|
|
|
zip = zipfile.ZipFile(f, "r", compression) # Read the ZIP archive
|
|
readData2 = zip.read(srcname)
|
|
readData1 = zip.read("another.name")
|
|
zip.close()
|
|
|
|
if readData1 != srccontents or readData2 != srccontents:
|
|
raise TestFailed, "Written data doesn't equal read data."
|
|
|
|
|
|
try:
|
|
fp = open(srcname, "wb") # Make a source file with some lines
|
|
for i in range(0, 1000):
|
|
fp.write("Test of zipfile line %d.\n" % i)
|
|
fp.close()
|
|
|
|
fp = open(srcname, "rb")
|
|
writtenData = fp.read()
|
|
fp.close()
|
|
|
|
for file in (zipname, tempfile.TemporaryFile(), StringIO.StringIO()):
|
|
zipTest(file, zipfile.ZIP_STORED, writtenData)
|
|
|
|
for file in (zipname, tempfile.TemporaryFile(), StringIO.StringIO()):
|
|
zipTest(file, zipfile.ZIP_DEFLATED, writtenData)
|
|
|
|
finally:
|
|
if os.path.isfile(srcname): # Remove temporary files
|
|
os.unlink(srcname)
|
|
if os.path.isfile(zipname):
|
|
os.unlink(zipname)
|
|
|
|
|
|
# This test checks that the ZipFile constructor closes the file object
|
|
# it opens if there's an error in the file. If it doesn't, the traceback
|
|
# holds a reference to the ZipFile object and, indirectly, the file object.
|
|
# On Windows, this causes the os.unlink() call to fail because the
|
|
# underlying file is still open. This is SF bug #412214.
|
|
#
|
|
fp = open(srcname, "w")
|
|
fp.write("this is not a legal zip file\n")
|
|
fp.close()
|
|
try:
|
|
zf = zipfile.ZipFile(srcname)
|
|
except zipfile.BadZipfile:
|
|
os.unlink(srcname)
|
|
|
|
|
|
# make sure we don't raise an AttributeError when a partially-constructed
|
|
# ZipFile instance is finalized; this tests for regression on SF tracker
|
|
# bug #403871.
|
|
try:
|
|
zipfile.ZipFile(srcname)
|
|
except IOError:
|
|
# The bug we're testing for caused an AttributeError to be raised
|
|
# when a ZipFile instance was created for a file that did not
|
|
# exist; the .fp member was not initialized but was needed by the
|
|
# __del__() method. Since the AttributeError is in the __del__(),
|
|
# it is ignored, but the user should be sufficiently annoyed by
|
|
# the message on the output that regression will be noticed
|
|
# quickly.
|
|
pass
|
|
else:
|
|
raise TestFailed("expected creation of readable ZipFile without\n"
|
|
" a file to raise an IOError.")
|