mirror of
https://github.com/RustPython/RustPython.git
synced 2026-06-09 22:49:57 +09:00
Merge pull request #2797 from fanninpm/test-zipfile
Add test_zipfile from CPython 3.8
This commit is contained in:
2977
Lib/test/test_zipfile.py
Normal file
2977
Lib/test/test_zipfile.py
Normal file
File diff suppressed because it is too large
Load Diff
BIN
Lib/test/zip_cp437_header.zip
Normal file
BIN
Lib/test/zip_cp437_header.zip
Normal file
Binary file not shown.
35
Lib/test/ziptestdata/README.md
Normal file
35
Lib/test/ziptestdata/README.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# Test data for `test_zipfile`
|
||||
|
||||
The test executables in this directory are created manually from header.sh and
|
||||
the `testdata_module_inside_zip.py` file. You must have infozip's zip utility
|
||||
installed (`apt install zip` on Debian).
|
||||
|
||||
## Purpose
|
||||
|
||||
These are used to test executable files with an appended zipfile, in a scenario
|
||||
where the executable is _not_ a Python interpreter itself so our automatic
|
||||
zipimport machinery (that'd look for `__main__.py`) is not being used.
|
||||
|
||||
## Updating the test executables
|
||||
|
||||
If you update header.sh or the testdata_module_inside_zip.py file, rerun the
|
||||
commands below. These are expected to be rarely changed, if ever.
|
||||
|
||||
### Standard old format (2.0) zip file
|
||||
|
||||
```
|
||||
zip -0 zip2.zip testdata_module_inside_zip.py
|
||||
cat header.sh zip2.zip >exe_with_zip
|
||||
rm zip2.zip
|
||||
```
|
||||
|
||||
### Modern format (4.5) zip64 file
|
||||
|
||||
Redirecting from stdin forces infozip's zip tool to create a zip64.
|
||||
|
||||
```
|
||||
zip -0 <testdata_module_inside_zip.py >zip64.zip
|
||||
cat header.sh zip64.zip >exe_with_z64
|
||||
rm zip64.zip
|
||||
```
|
||||
|
||||
BIN
Lib/test/ziptestdata/exe_with_z64
Executable file
BIN
Lib/test/ziptestdata/exe_with_z64
Executable file
Binary file not shown.
BIN
Lib/test/ziptestdata/exe_with_zip
Executable file
BIN
Lib/test/ziptestdata/exe_with_zip
Executable file
Binary file not shown.
24
Lib/test/ziptestdata/header.sh
Executable file
24
Lib/test/ziptestdata/header.sh
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
INTERPRETER_UNDER_TEST="$1"
|
||||
if [[ ! -x "${INTERPRETER_UNDER_TEST}" ]]; then
|
||||
echo "Interpreter must be the command line argument."
|
||||
exit 4
|
||||
fi
|
||||
EXECUTABLE="$0" exec "${INTERPRETER_UNDER_TEST}" -E - <<END_OF_PYTHON
|
||||
import os
|
||||
import zipfile
|
||||
|
||||
namespace = {}
|
||||
|
||||
filename = os.environ['EXECUTABLE']
|
||||
print(f'Opening {filename} as a zipfile.')
|
||||
with zipfile.ZipFile(filename, mode='r') as exe_zip:
|
||||
for file_info in exe_zip.infolist():
|
||||
data = exe_zip.read(file_info)
|
||||
exec(data, namespace, namespace)
|
||||
break # Only use the first file in the archive.
|
||||
|
||||
print('Favorite number in executable:', namespace["FAVORITE_NUMBER"])
|
||||
|
||||
### Archive contents will be appended after this file. ###
|
||||
END_OF_PYTHON
|
||||
2
Lib/test/ziptestdata/testdata_module_inside_zip.py
Normal file
2
Lib/test/ziptestdata/testdata_module_inside_zip.py
Normal file
@@ -0,0 +1,2 @@
|
||||
# Test data file to be stored within a zip file.
|
||||
FAVORITE_NUMBER = 5
|
||||
Reference in New Issue
Block a user