Skip to content

Commit 48fd561

Browse files
author
Rémi Lapeyre
committed
Clean json_tools tests
1 parent ed871c6 commit 48fd561

File tree

2 files changed

+21
-38
lines changed

2 files changed

+21
-38
lines changed

Lib/json/tool.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def main():
3939
try:
4040
outfile = sys.stdout if options.outfile == '-' else open(options.outfile, 'w')
4141
except IOError as e:
42-
parser.error("can't open '{}': {}".format(options.outfile, str(e)))
42+
parser.error(f"can't open '{options.outfile}': {str(e)}")
4343
with outfile:
4444
json.dump(obj, outfile, sort_keys=sort_keys, indent=4)
4545
outfile.write('\n')

Lib/test/test_json/test_tool.py

Lines changed: 20 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ def _create_infile(self):
8080
def test_infile_stdout(self):
8181
infile = self._create_infile()
8282
rc, out, err = assert_python_ok('-m', 'json.tool', infile)
83-
self.assertEqual(rc, 0)
8483
self.assertEqual(out.splitlines(), self.expect.encode().splitlines())
8584
self.assertEqual(err, b'')
8685

@@ -91,14 +90,12 @@ def test_infile_outfile(self):
9190
self.addCleanup(os.remove, outfile)
9291
with open(outfile, "r") as fp:
9392
self.assertEqual(fp.read(), self.expect)
94-
self.assertEqual(rc, 0)
9593
self.assertEqual(out, b'')
9694
self.assertEqual(err, b'')
9795

9896
def test_infile_same_outfile(self):
9997
infile = self._create_infile()
10098
rc, out, err = assert_python_ok('-m', 'json.tool', infile, infile)
101-
self.assertEqual(rc, 0)
10299
self.assertEqual(out, b'')
103100
self.assertEqual(err, b'')
104101

@@ -107,40 +104,23 @@ def test_unavailable_outfile(self):
107104
rc, out, err = assert_python_failure('-m', 'json.tool', infile, '/bla/outfile')
108105
self.assertEqual(rc, 2)
109106
self.assertEqual(out, b'')
110-
err = err.decode().splitlines()
111-
self.assertEqual(err[0], 'usage: python -m json.tool [-h] [--sort-keys] [infile] [outfile]')
112-
self.assertEqual(err[1], "python -m json.tool: error: can't open '/bla/outfile': [Errno 2] No such file or directory: '/bla/outfile'")
107+
self.assertIn(b"error: can't open '/bla/outfile': [Errno 2]", err)
113108

114109
def test_help_flag(self):
115110
rc, out, err = assert_python_ok('-m', 'json.tool', '-h')
116-
self.assertEqual(rc, 0)
117111
self.assertTrue(out.startswith(b'usage: '))
118112
self.assertEqual(err, b'')
119113

120114
def test_sort_keys_flag(self):
121115
infile = self._create_infile()
122116
rc, out, err = assert_python_ok('-m', 'json.tool', '--sort-keys', infile)
123-
self.assertEqual(rc, 0)
124117
self.assertEqual(out.splitlines(),
125118
self.expect_without_sort_keys.encode().splitlines())
126119
self.assertEqual(err, b'')
127120

128121
def test_no_fd_leak_infile_outfile(self):
129-
closed = []
130-
opened = []
131-
io_open = io.open
132-
133-
def open(*args, **kwargs):
134-
fd = io_open(*args, **kwargs)
135-
opened.append(fd)
136-
fd_close = fd.close
137-
def close(self):
138-
closed.append(self)
139-
fd_close()
140-
fd.close = types.MethodType(close, fd)
141-
return fd
142-
143122
infile = self._create_infile()
123+
closed, opened, open = mock_open()
144124
with mock.patch('builtins.open', side_effect=open):
145125
with mock.patch.object(sys, 'argv', ['tool.py', infile, infile + '.out']):
146126
import json.tool
@@ -151,28 +131,31 @@ def close(self):
151131
self.assertEqual(len(opened), len(closed))
152132

153133
def test_no_fd_leak_same_infile_outfile(self):
154-
closed = []
155-
opened = []
156-
io_open = io.open
157-
158-
def open(*args, **kwargs):
159-
fd = io_open(*args, **kwargs)
160-
opened.append(fd)
161-
fd_close = fd.close
162-
def close(self):
163-
closed.append(self)
164-
fd_close()
165-
fd.close = types.MethodType(close, fd)
166-
return fd
167-
168134
infile = self._create_infile()
135+
closed, opened, open = mock_open()
169136
with mock.patch('builtins.open', side_effect=open):
170137
with mock.patch.object(sys, 'argv', ['tool.py', infile, infile]):
171138
try:
172139
import json.tool
173140
json.tool.main()
174-
except SystemExit: # We expect SystemExit to happen on c9d43c
141+
except SystemExit:
175142
pass
176143

177144
self.assertEqual(opened, closed)
178145
self.assertEqual(len(opened), len(closed))
146+
147+
def mock_open():
148+
closed = []
149+
opened = []
150+
io_open = io.open
151+
152+
def _open(*args, **kwargs):
153+
fd = io_open(*args, **kwargs)
154+
opened.append(fd)
155+
fd_close = fd.close
156+
def close(self):
157+
closed.append(self)
158+
fd_close()
159+
fd.close = types.MethodType(close, fd)
160+
return fd
161+
return closed, opened, _open

0 commit comments

Comments
 (0)