]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-29636: json.tool: Add document for indentation options. (GH-17482)
authorDaniel Himmelstein <daniel.himmelstein@gmail.com>
Sat, 7 Dec 2019 14:14:40 +0000 (07:14 -0700)
committerInada Naoki <songofacandy@gmail.com>
Sat, 7 Dec 2019 14:14:40 +0000 (23:14 +0900)
And updated test to use subprocess.run

Doc/library/json.rst
Lib/json/tool.py
Lib/test/test_json/test_tool.py

index 573ec1cb77dd6e267563447eccb7f477046b3a17..cfe68c9dd91d0761c583dcbfafbe57b5cf6ed9d6 100644 (file)
@@ -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.
index 5542ce48c38023df6f9186fd617861931b8156ff..6d7d9a002e5c242870f480e2e698762f02c9b568 100644 (file)
@@ -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 '
index 54800ae840c64c6940546a34314775f1f08a0dd1..c9a969b303398e2549b1fc58d03fba84b71644c8 100644 (file)
@@ -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":"💩"}')