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