| 
									
										
										
										
											2012-11-29 02:15:18 +02:00
										 |  |  | import os | 
					
						
							|  |  |  | import sys | 
					
						
							|  |  |  | import textwrap | 
					
						
							|  |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2017-03-15 10:31:06 -04:00
										 |  |  | from subprocess import Popen, PIPE | 
					
						
							| 
									
										
										
										
											2012-11-29 02:15:18 +02:00
										 |  |  | from test import support | 
					
						
							| 
									
										
										
										
											2015-05-06 06:33:17 +03:00
										 |  |  | from test.support.script_helper import assert_python_ok | 
					
						
							| 
									
										
										
										
											2012-11-29 02:15:18 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-10 09:56:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-29 02:15:18 +02:00
										 |  |  | class TestTool(unittest.TestCase): | 
					
						
							|  |  |  |     data = """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         [["blorpie"],[ "whoops" ] , [ | 
					
						
							|  |  |  |                                  ],\t"d-shtaeou",\r"d-nthiouh", | 
					
						
							|  |  |  |         "i-vhbjkhnth", {"nifty":87}, {"morefield" :\tfalse,"field" | 
					
						
							|  |  |  |             :"yes"}  ] | 
					
						
							|  |  |  |            """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-10 09:56:54 +02:00
										 |  |  |     expect_without_sort_keys = textwrap.dedent("""\
 | 
					
						
							| 
									
										
										
										
											2012-11-29 02:15:18 +02:00
										 |  |  |     [ | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             "blorpie" | 
					
						
							| 
									
										
										
										
											2012-11-29 02:25:03 +02:00
										 |  |  |         ], | 
					
						
							| 
									
										
										
										
											2012-11-29 02:15:18 +02:00
										 |  |  |         [ | 
					
						
							|  |  |  |             "whoops" | 
					
						
							| 
									
										
										
										
											2012-11-29 02:25:03 +02:00
										 |  |  |         ], | 
					
						
							|  |  |  |         [], | 
					
						
							|  |  |  |         "d-shtaeou", | 
					
						
							|  |  |  |         "d-nthiouh", | 
					
						
							|  |  |  |         "i-vhbjkhnth", | 
					
						
							| 
									
										
										
										
											2012-11-29 02:15:18 +02:00
										 |  |  |         { | 
					
						
							|  |  |  |             "nifty": 87 | 
					
						
							| 
									
										
										
										
											2012-11-29 02:25:03 +02:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2012-11-29 02:15:18 +02:00
										 |  |  |         { | 
					
						
							| 
									
										
										
										
											2012-11-29 02:25:03 +02:00
										 |  |  |             "field": "yes", | 
					
						
							| 
									
										
										
										
											2012-11-29 02:15:18 +02:00
										 |  |  |             "morefield": false | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |     """)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-10 09:56:54 +02:00
										 |  |  |     expect = textwrap.dedent("""\
 | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             "blorpie" | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             "whoops" | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |         [], | 
					
						
							|  |  |  |         "d-shtaeou", | 
					
						
							|  |  |  |         "d-nthiouh", | 
					
						
							|  |  |  |         "i-vhbjkhnth", | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             "nifty": 87 | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             "morefield": false, | 
					
						
							|  |  |  |             "field": "yes" | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |     """)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-29 02:15:18 +02:00
										 |  |  |     def test_stdin_stdout(self): | 
					
						
							| 
									
										
										
										
											2017-03-15 10:31:06 -04:00
										 |  |  |         args = sys.executable, '-m', 'json.tool' | 
					
						
							|  |  |  |         with Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE) as proc: | 
					
						
							| 
									
										
										
										
											2012-11-29 02:15:18 +02:00
										 |  |  |             out, err = proc.communicate(self.data.encode()) | 
					
						
							| 
									
										
										
										
											2012-11-29 05:10:07 +02:00
										 |  |  |         self.assertEqual(out.splitlines(), self.expect.encode().splitlines()) | 
					
						
							| 
									
										
										
										
											2017-03-15 10:31:06 -04:00
										 |  |  |         self.assertEqual(err, b'') | 
					
						
							| 
									
										
										
										
											2012-11-29 02:15:18 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def _create_infile(self): | 
					
						
							|  |  |  |         infile = support.TESTFN | 
					
						
							|  |  |  |         with open(infile, "w") as fp: | 
					
						
							|  |  |  |             self.addCleanup(os.remove, infile) | 
					
						
							|  |  |  |             fp.write(self.data) | 
					
						
							|  |  |  |         return infile | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_infile_stdout(self): | 
					
						
							|  |  |  |         infile = self._create_infile() | 
					
						
							|  |  |  |         rc, out, err = assert_python_ok('-m', 'json.tool', infile) | 
					
						
							| 
									
										
										
										
											2014-03-21 23:17:29 -05:00
										 |  |  |         self.assertEqual(rc, 0) | 
					
						
							| 
									
										
										
										
											2012-11-29 05:10:07 +02:00
										 |  |  |         self.assertEqual(out.splitlines(), self.expect.encode().splitlines()) | 
					
						
							| 
									
										
										
										
											2012-11-29 02:15:18 +02:00
										 |  |  |         self.assertEqual(err, b'') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_infile_outfile(self): | 
					
						
							|  |  |  |         infile = self._create_infile() | 
					
						
							|  |  |  |         outfile = support.TESTFN + '.out' | 
					
						
							|  |  |  |         rc, out, err = assert_python_ok('-m', 'json.tool', infile, outfile) | 
					
						
							|  |  |  |         self.addCleanup(os.remove, outfile) | 
					
						
							|  |  |  |         with open(outfile, "r") as fp: | 
					
						
							|  |  |  |             self.assertEqual(fp.read(), self.expect) | 
					
						
							| 
									
										
										
										
											2014-03-21 23:17:29 -05:00
										 |  |  |         self.assertEqual(rc, 0) | 
					
						
							| 
									
										
										
										
											2012-11-29 02:15:18 +02:00
										 |  |  |         self.assertEqual(out, b'') | 
					
						
							|  |  |  |         self.assertEqual(err, b'') | 
					
						
							| 
									
										
										
										
											2014-03-21 23:17:29 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_help_flag(self): | 
					
						
							|  |  |  |         rc, out, err = assert_python_ok('-m', 'json.tool', '-h') | 
					
						
							|  |  |  |         self.assertEqual(rc, 0) | 
					
						
							|  |  |  |         self.assertTrue(out.startswith(b'usage: ')) | 
					
						
							|  |  |  |         self.assertEqual(err, b'') | 
					
						
							| 
									
										
										
										
											2014-11-10 09:56:54 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_sort_keys_flag(self): | 
					
						
							|  |  |  |         infile = self._create_infile() | 
					
						
							|  |  |  |         rc, out, err = assert_python_ok('-m', 'json.tool', '--sort-keys', infile) | 
					
						
							|  |  |  |         self.assertEqual(rc, 0) | 
					
						
							|  |  |  |         self.assertEqual(out.splitlines(), | 
					
						
							|  |  |  |                          self.expect_without_sort_keys.encode().splitlines()) | 
					
						
							|  |  |  |         self.assertEqual(err, b'') |