-
-
Notifications
You must be signed in to change notification settings - Fork 31k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
- Loading branch information
Showing
18 changed files
with
270 additions
and
53 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
import os | ||
import unittest | ||
from test import support | ||
from test.support import import_helper, os_helper | ||
|
||
_testcapi = import_helper.import_module('_testcapi') | ||
|
||
|
||
class CAPIFileTest(unittest.TestCase): | ||
def test_py_fopen(self): | ||
# Test Py_fopen() and Py_fclose() | ||
|
||
with open(__file__, "rb") as fp: | ||
source = fp.read() | ||
|
||
for filename in (__file__, os.fsencode(__file__)): | ||
with self.subTest(filename=filename): | ||
data = _testcapi.py_fopen(filename, "rb") | ||
self.assertEqual(data, source[:256]) | ||
|
||
data = _testcapi.py_fopen(os_helper.FakePath(filename), "rb") | ||
self.assertEqual(data, source[:256]) | ||
|
||
filenames = [ | ||
os_helper.TESTFN, | ||
os.fsencode(os_helper.TESTFN), | ||
] | ||
# TESTFN_UNDECODABLE cannot be used to create a file on macOS/WASI. | ||
if os_helper.TESTFN_UNENCODABLE is not None: | ||
filenames.append(os_helper.TESTFN_UNENCODABLE) | ||
for filename in filenames: | ||
with self.subTest(filename=filename): | ||
try: | ||
with open(filename, "wb") as fp: | ||
fp.write(source) | ||
|
||
data = _testcapi.py_fopen(filename, "rb") | ||
self.assertEqual(data, source[:256]) | ||
finally: | ||
os_helper.unlink(filename) | ||
|
||
# embedded null character/byte in the filename | ||
with self.assertRaises(ValueError): | ||
_testcapi.py_fopen("a\x00b", "rb") | ||
with self.assertRaises(ValueError): | ||
_testcapi.py_fopen(b"a\x00b", "rb") | ||
|
||
# non-ASCII mode failing with "Invalid argument" | ||
with self.assertRaises(OSError): | ||
_testcapi.py_fopen(__file__, "\xe9") | ||
|
||
# invalid filename type | ||
for invalid_type in (123, object()): | ||
with self.subTest(filename=invalid_type): | ||
with self.assertRaises(TypeError): | ||
_testcapi.py_fopen(invalid_type, "rb") | ||
|
||
if support.MS_WINDOWS: | ||
with self.assertRaises(OSError): | ||
# On Windows, the file mode is limited to 10 characters | ||
_testcapi.py_fopen(__file__, "rt+, ccs=UTF-8") | ||
|
||
# CRASHES py_fopen(__file__, None) | ||
|
||
|
||
if __name__ == "__main__": | ||
unittest.main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
5 changes: 5 additions & 0 deletions
5
Misc/NEWS.d/next/C_API/2024-12-11-13-01-26.gh-issue-127350.uEBZZ4.rst
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
Add :c:func:`Py_fopen` function to open a file. Similar to the :c:func:`!fopen` | ||
function, but the *path* parameter is a Python object and an exception is set | ||
on error. Add also :c:func:`Py_fclose` function to close a file, function | ||
needed for Windows support. | ||
Patch by Victor Stinner. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.