bpo-39828: Fix json.tool to catch BrokenPipeError (GH-18779)
This commit is contained in:
parent
b4698ecfdb
commit
700cb58730
|
@ -72,4 +72,7 @@ def main():
|
|||
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
main()
|
||||
except BrokenPipeError as exc:
|
||||
sys.exit(exc.errno)
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
import errno
|
||||
import os
|
||||
import sys
|
||||
import textwrap
|
||||
import unittest
|
||||
import subprocess
|
||||
|
||||
from test import support
|
||||
from test.support.script_helper import assert_python_ok
|
||||
|
||||
|
@ -206,3 +208,14 @@ class TestTool(unittest.TestCase):
|
|||
# asserting an ascii encoded output file
|
||||
expected = [b'{', rb' "key": "\ud83d\udca9"', b"}"]
|
||||
self.assertEqual(lines, expected)
|
||||
|
||||
@unittest.skipIf(sys.platform =="win32", "The test is failed with ValueError on Windows")
|
||||
def test_broken_pipe_error(self):
|
||||
cmd = [sys.executable, '-m', 'json.tool']
|
||||
proc = subprocess.Popen(cmd,
|
||||
stdout=subprocess.PIPE,
|
||||
stdin=subprocess.PIPE)
|
||||
# bpo-39828: Closing before json.tool attempts to write into stdout.
|
||||
proc.stdout.close()
|
||||
proc.communicate(b'"{}"')
|
||||
self.assertEqual(proc.returncode, errno.EPIPE)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Fix :mod:`json.tool` to catch :exc:`BrokenPipeError`. Patch by Dong-hee Na.
|
Loading…
Reference in New Issue