1057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melottiimport os 2057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melottiimport sys 3057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melottiimport textwrap 4057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melottiimport unittest 5057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melottiimport subprocess 6057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melottifrom test import support 7ce643913a9049953950918b214fb7cef40506be5Berker Peksagfrom test.support.script_helper import assert_python_ok 8057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti 939e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag 10057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotticlass TestTool(unittest.TestCase): 11057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti data = """ 12057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti 13057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti [["blorpie"],[ "whoops" ] , [ 14057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti ],\t"d-shtaeou",\r"d-nthiouh", 15057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti "i-vhbjkhnth", {"nifty":87}, {"morefield" :\tfalse,"field" 16057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti :"yes"} ] 17057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti """ 18057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti 1939e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag expect_without_sort_keys = textwrap.dedent("""\ 20057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti [ 21057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti [ 22057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti "blorpie" 23b32512ed9a1ab9912a9e0bdbb609ca1a19949355Ezio Melotti ], 24057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti [ 25057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti "whoops" 26b32512ed9a1ab9912a9e0bdbb609ca1a19949355Ezio Melotti ], 27b32512ed9a1ab9912a9e0bdbb609ca1a19949355Ezio Melotti [], 28b32512ed9a1ab9912a9e0bdbb609ca1a19949355Ezio Melotti "d-shtaeou", 29b32512ed9a1ab9912a9e0bdbb609ca1a19949355Ezio Melotti "d-nthiouh", 30b32512ed9a1ab9912a9e0bdbb609ca1a19949355Ezio Melotti "i-vhbjkhnth", 31057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti { 32057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti "nifty": 87 33b32512ed9a1ab9912a9e0bdbb609ca1a19949355Ezio Melotti }, 34057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti { 35b32512ed9a1ab9912a9e0bdbb609ca1a19949355Ezio Melotti "field": "yes", 36057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti "morefield": false 37057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti } 38057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti ] 39057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti """) 40057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti 4139e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag expect = textwrap.dedent("""\ 4239e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag [ 4339e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag [ 4439e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag "blorpie" 4539e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag ], 4639e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag [ 4739e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag "whoops" 4839e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag ], 4939e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag [], 5039e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag "d-shtaeou", 5139e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag "d-nthiouh", 5239e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag "i-vhbjkhnth", 5339e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag { 5439e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag "nifty": 87 5539e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag }, 5639e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag { 5739e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag "morefield": false, 5839e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag "field": "yes" 5939e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag } 6039e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag ] 6139e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag """) 6239e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag 63057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti def test_stdin_stdout(self): 64057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti with subprocess.Popen( 65057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti (sys.executable, '-m', 'json.tool'), 66057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti stdin=subprocess.PIPE, stdout=subprocess.PIPE) as proc: 67057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti out, err = proc.communicate(self.data.encode()) 684927633ab6c6895621d88d51ae2d7943426e2c04Ezio Melotti self.assertEqual(out.splitlines(), self.expect.encode().splitlines()) 69057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti self.assertEqual(err, None) 70057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti 71057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti def _create_infile(self): 72057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti infile = support.TESTFN 73057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti with open(infile, "w") as fp: 74057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti self.addCleanup(os.remove, infile) 75057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti fp.write(self.data) 76057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti return infile 77057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti 78057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti def test_infile_stdout(self): 79057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti infile = self._create_infile() 80057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti rc, out, err = assert_python_ok('-m', 'json.tool', infile) 81940e2074123f7d18236e2e8ee08044b400261c42Benjamin Peterson self.assertEqual(rc, 0) 824927633ab6c6895621d88d51ae2d7943426e2c04Ezio Melotti self.assertEqual(out.splitlines(), self.expect.encode().splitlines()) 83057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti self.assertEqual(err, b'') 84057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti 85057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti def test_infile_outfile(self): 86057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti infile = self._create_infile() 87057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti outfile = support.TESTFN + '.out' 88057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti rc, out, err = assert_python_ok('-m', 'json.tool', infile, outfile) 89057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti self.addCleanup(os.remove, outfile) 90057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti with open(outfile, "r") as fp: 91057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti self.assertEqual(fp.read(), self.expect) 92940e2074123f7d18236e2e8ee08044b400261c42Benjamin Peterson self.assertEqual(rc, 0) 93057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti self.assertEqual(out, b'') 94057bcb4c6c7eef93066002db7ab486f12d50cceeEzio Melotti self.assertEqual(err, b'') 95940e2074123f7d18236e2e8ee08044b400261c42Benjamin Peterson 96940e2074123f7d18236e2e8ee08044b400261c42Benjamin Peterson def test_help_flag(self): 97940e2074123f7d18236e2e8ee08044b400261c42Benjamin Peterson rc, out, err = assert_python_ok('-m', 'json.tool', '-h') 98940e2074123f7d18236e2e8ee08044b400261c42Benjamin Peterson self.assertEqual(rc, 0) 99940e2074123f7d18236e2e8ee08044b400261c42Benjamin Peterson self.assertTrue(out.startswith(b'usage: ')) 100940e2074123f7d18236e2e8ee08044b400261c42Benjamin Peterson self.assertEqual(err, b'') 10139e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag 10239e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag def test_sort_keys_flag(self): 10339e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag infile = self._create_infile() 10439e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag rc, out, err = assert_python_ok('-m', 'json.tool', '--sort-keys', infile) 10539e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag self.assertEqual(rc, 0) 10639e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag self.assertEqual(out.splitlines(), 10739e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag self.expect_without_sort_keys.encode().splitlines()) 10839e4c4d873927b902c53aeb0e2e15c12d2678e1bBerker Peksag self.assertEqual(err, b'') 109