bpo-29636: json.tool: Add document for indentation options. (GH-17482)

And updated test to use subprocess.run
This commit is contained in:
Daniel Himmelstein 2019-12-07 07:14:40 -07:00 committed by Inada Naoki
parent 4443450fda
commit 15fb7fa881
3 changed files with 35 additions and 34 deletions

View 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":"💩"}')