13257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDanielimport os
23257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDanielimport sys
33257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDanielimport textwrap
43257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDanielimport unittest
53257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDanielimport subprocess
63257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDanielfrom test import test_support
73257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDanielfrom test.script_helper import assert_python_ok
83257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel
93257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDanielclass TestTool(unittest.TestCase):
103257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel    data = """
113257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel
123257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        [["blorpie"],[ "whoops" ] , [
133257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel                                 ],\t"d-shtaeou",\r"d-nthiouh",
143257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        "i-vhbjkhnth", {"nifty":87}, {"morefield" :\tfalse,"field"
153257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel            :"yes"}  ]
163257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel           """
173257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel
183257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel    expect = textwrap.dedent("""\
193257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel    [
203257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        [
213257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel            "blorpie"
223257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        ],
233257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        [
243257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel            "whoops"
253257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        ],
263257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        [],
273257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        "d-shtaeou",
283257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        "d-nthiouh",
293257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        "i-vhbjkhnth",
303257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        {
313257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel            "nifty": 87
323257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        },
333257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        {
343257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel            "field": "yes",
353257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel            "morefield": false
363257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        }
373257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel    ]
383257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel    """)
393257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel
403257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel    def test_stdin_stdout(self):
413257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        proc = subprocess.Popen(
423257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel                (sys.executable, '-m', 'json.tool'),
433257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel                stdin=subprocess.PIPE, stdout=subprocess.PIPE)
443257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        out, err = proc.communicate(self.data.encode())
453257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        self.assertEqual(out.splitlines(), self.expect.encode().splitlines())
463257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        self.assertEqual(err, None)
473257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel
483257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel    def _create_infile(self):
493257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        infile = test_support.TESTFN
503257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        with open(infile, "w") as fp:
513257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel            self.addCleanup(os.remove, infile)
523257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel            fp.write(self.data)
533257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        return infile
543257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel
553257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel    def test_infile_stdout(self):
563257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        infile = self._create_infile()
573257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        rc, out, err = assert_python_ok('-m', 'json.tool', infile)
583257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        self.assertEqual(out.splitlines(), self.expect.encode().splitlines())
593257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        self.assertEqual(err, b'')
603257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel
613257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel    def test_infile_outfile(self):
623257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        infile = self._create_infile()
633257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        outfile = test_support.TESTFN + '.out'
643257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        rc, out, err = assert_python_ok('-m', 'json.tool', infile, outfile)
653257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        self.addCleanup(os.remove, outfile)
663257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        with open(outfile, "r") as fp:
673257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel            self.assertEqual(fp.read(), self.expect)
683257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        self.assertEqual(out, b'')
693257aa99321d745773a6bd1bd4ce7f6fafe74411Daryl McDaniel        self.assertEqual(err, b'')
70