diff options
author | Daniel Himmelstein <daniel.himmelstein@gmail.com> | 2019-12-07 14:14:40 (GMT) |
---|---|---|
committer | Inada Naoki <songofacandy@gmail.com> | 2019-12-07 14:14:40 (GMT) |
commit | 15fb7fa88187f5841088721a43609bffe64a8dc7 (patch) | |
tree | df7fccd740a6002f7dcffdeed1ecff9c910c9582 | |
parent | 4443450fdaf248427cf4a00a6ee36229e6402ec6 (diff) | |
download | cpython-15fb7fa88187f5841088721a43609bffe64a8dc7.zip cpython-15fb7fa88187f5841088721a43609bffe64a8dc7.tar.gz cpython-15fb7fa88187f5841088721a43609bffe64a8dc7.tar.bz2 |
bpo-29636: json.tool: Add document for indentation options. (GH-17482)
And updated test to use subprocess.run
-rw-r--r-- | Doc/library/json.rst | 6 | ||||
-rw-r--r-- | Lib/json/tool.py | 3 | ||||
-rw-r--r-- | Lib/test/test_json/test_tool.py | 60 |
3 files changed, 35 insertions, 34 deletions
diff --git a/Doc/library/json.rst b/Doc/library/json.rst index 573ec1c..cfe68c9 100644 --- a/Doc/library/json.rst +++ b/Doc/library/json.rst @@ -744,6 +744,12 @@ Command line options .. versionadded:: 3.8 +.. cmdoption:: --indent, --tab, --no-indent, --compact + + Mutually exclusive options for whitespace control + + .. versionadded:: 3.9 + .. cmdoption:: -h, --help Show the help message. diff --git a/Lib/json/tool.py b/Lib/json/tool.py index 5542ce4..6d7d9a0 100644 --- a/Lib/json/tool.py +++ b/Lib/json/tool.py @@ -33,7 +33,8 @@ def main(): parser.add_argument('--no-ensure-ascii', dest='ensure_ascii', action='store_false', help='disable escaping of non-ASCII characters') parser.add_argument('--json-lines', action='store_true', default=False, - help='parse input using the jsonlines format') + help='parse input using the JSON Lines format. ' + 'Use with --no-indent or --compact to produce valid JSON Lines output.') group = parser.add_mutually_exclusive_group() group.add_argument('--indent', default=4, type=int, help='separate items with newlines and use this number ' diff --git a/Lib/test/test_json/test_tool.py b/Lib/test/test_json/test_tool.py index 54800ae..c9a969b 100644 --- a/Lib/test/test_json/test_tool.py +++ b/Lib/test/test_json/test_tool.py @@ -2,7 +2,7 @@ import os import sys import textwrap import unittest -from subprocess import Popen, PIPE +import subprocess from test import support from test.support.script_helper import assert_python_ok @@ -84,10 +84,9 @@ class TestTool(unittest.TestCase): def test_stdin_stdout(self): args = sys.executable, '-m', 'json.tool' - with Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE) as proc: - out, err = proc.communicate(self.data.encode()) - self.assertEqual(out.splitlines(), self.expect.encode().splitlines()) - self.assertEqual(err, b'') + process = subprocess.run(args, input=self.data, capture_output=True, text=True, check=True) + self.assertEqual(process.stdout, self.expect) + self.assertEqual(process.stderr, '') def _create_infile(self, data=None): infile = support.TESTFN @@ -131,10 +130,9 @@ class TestTool(unittest.TestCase): def test_jsonlines(self): args = sys.executable, '-m', 'json.tool', '--json-lines' - with Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE) as proc: - out, err = proc.communicate(self.jsonlines_raw.encode()) - self.assertEqual(out.splitlines(), self.jsonlines_expect.encode().splitlines()) - self.assertEqual(err, b'') + process = subprocess.run(args, input=self.jsonlines_raw, capture_output=True, text=True, check=True) + self.assertEqual(process.stdout, self.jsonlines_expect) + self.assertEqual(process.stderr, '') def test_help_flag(self): rc, out, err = assert_python_ok('-m', 'json.tool', '-h') @@ -151,45 +149,41 @@ class TestTool(unittest.TestCase): self.assertEqual(err, b'') def test_indent(self): - json_stdin = b'[1, 2]' + input_ = '[1, 2]' expect = textwrap.dedent('''\ [ 1, 2 ] - ''').encode() + ''') args = sys.executable, '-m', 'json.tool', '--indent', '2' - with Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE) as proc: - json_stdout, err = proc.communicate(json_stdin) - self.assertEqual(expect.splitlines(), json_stdout.splitlines()) - self.assertEqual(err, b'') + process = subprocess.run(args, input=input_, capture_output=True, text=True, check=True) + self.assertEqual(process.stdout, expect) + self.assertEqual(process.stderr, '') def test_no_indent(self): - json_stdin = b'[1,\n2]' - expect = b'[1, 2]' + input_ = '[1,\n2]' + expect = '[1, 2]\n' args = sys.executable, '-m', 'json.tool', '--no-indent' - with Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE) as proc: - json_stdout, err = proc.communicate(json_stdin) - self.assertEqual(expect.splitlines(), json_stdout.splitlines()) - self.assertEqual(err, b'') + process = subprocess.run(args, input=input_, capture_output=True, text=True, check=True) + self.assertEqual(process.stdout, expect) + self.assertEqual(process.stderr, '') def test_tab(self): - json_stdin = b'[1, 2]' - expect = b'[\n\t1,\n\t2\n]\n' + input_ = '[1, 2]' + expect = '[\n\t1,\n\t2\n]\n' args = sys.executable, '-m', 'json.tool', '--tab' - with Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE) as proc: - json_stdout, err = proc.communicate(json_stdin) - self.assertEqual(expect.splitlines(), json_stdout.splitlines()) - self.assertEqual(err, b'') + process = subprocess.run(args, input=input_, capture_output=True, text=True, check=True) + self.assertEqual(process.stdout, expect) + self.assertEqual(process.stderr, '') def test_compact(self): - json_stdin = b'[ 1 ,\n 2]' - expect = b'[1,2]' + input_ = '[ 1 ,\n 2]' + expect = '[1,2]\n' args = sys.executable, '-m', 'json.tool', '--compact' - with Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE) as proc: - json_stdout, err = proc.communicate(json_stdin) - self.assertEqual(expect.splitlines(), json_stdout.splitlines()) - self.assertEqual(err, b'') + process = subprocess.run(args, input=input_, capture_output=True, text=True, check=True) + self.assertEqual(process.stdout, expect) + self.assertEqual(process.stderr, '') def test_no_ensure_ascii_flag(self): infile = self._create_infile('{"key":"💩"}') |