17db96d56Sopenharmony_ci'''Test Tools/scripts/fixcid.py.''' 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_cifrom io import StringIO 47db96d56Sopenharmony_ciimport os, os.path 57db96d56Sopenharmony_ciimport runpy 67db96d56Sopenharmony_ciimport sys 77db96d56Sopenharmony_cifrom test import support 87db96d56Sopenharmony_cifrom test.support import os_helper 97db96d56Sopenharmony_cifrom test.test_tools import skip_if_missing, scriptsdir 107db96d56Sopenharmony_ciimport unittest 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ciskip_if_missing() 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ciclass Test(unittest.TestCase): 157db96d56Sopenharmony_ci def test_parse_strings(self): 167db96d56Sopenharmony_ci old1 = 'int xx = "xx\\"xx"[xx];\n' 177db96d56Sopenharmony_ci old2 = "int xx = 'x\\'xx' + xx;\n" 187db96d56Sopenharmony_ci output = self.run_script(old1 + old2) 197db96d56Sopenharmony_ci new1 = 'int yy = "xx\\"xx"[yy];\n' 207db96d56Sopenharmony_ci new2 = "int yy = 'x\\'xx' + yy;\n" 217db96d56Sopenharmony_ci self.assertMultiLineEqual(output, 227db96d56Sopenharmony_ci "1\n" 237db96d56Sopenharmony_ci "< {old1}" 247db96d56Sopenharmony_ci "> {new1}" 257db96d56Sopenharmony_ci "{new1}" 267db96d56Sopenharmony_ci "2\n" 277db96d56Sopenharmony_ci "< {old2}" 287db96d56Sopenharmony_ci "> {new2}" 297db96d56Sopenharmony_ci "{new2}".format(old1=old1, old2=old2, new1=new1, new2=new2) 307db96d56Sopenharmony_ci ) 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci def test_alter_comments(self): 337db96d56Sopenharmony_ci output = self.run_script( 347db96d56Sopenharmony_ci substfile= 357db96d56Sopenharmony_ci "xx yy\n" 367db96d56Sopenharmony_ci "*aa bb\n", 377db96d56Sopenharmony_ci args=("-c", "-",), 387db96d56Sopenharmony_ci input= 397db96d56Sopenharmony_ci "/* xx altered */\n" 407db96d56Sopenharmony_ci "int xx;\n" 417db96d56Sopenharmony_ci "/* aa unaltered */\n" 427db96d56Sopenharmony_ci "int aa;\n", 437db96d56Sopenharmony_ci ) 447db96d56Sopenharmony_ci self.assertMultiLineEqual(output, 457db96d56Sopenharmony_ci "1\n" 467db96d56Sopenharmony_ci "< /* xx altered */\n" 477db96d56Sopenharmony_ci "> /* yy altered */\n" 487db96d56Sopenharmony_ci "/* yy altered */\n" 497db96d56Sopenharmony_ci "2\n" 507db96d56Sopenharmony_ci "< int xx;\n" 517db96d56Sopenharmony_ci "> int yy;\n" 527db96d56Sopenharmony_ci "int yy;\n" 537db96d56Sopenharmony_ci "/* aa unaltered */\n" 547db96d56Sopenharmony_ci "4\n" 557db96d56Sopenharmony_ci "< int aa;\n" 567db96d56Sopenharmony_ci "> int bb;\n" 577db96d56Sopenharmony_ci "int bb;\n" 587db96d56Sopenharmony_ci ) 597db96d56Sopenharmony_ci 607db96d56Sopenharmony_ci def test_directory(self): 617db96d56Sopenharmony_ci os.mkdir(os_helper.TESTFN) 627db96d56Sopenharmony_ci self.addCleanup(os_helper.rmtree, os_helper.TESTFN) 637db96d56Sopenharmony_ci c_filename = os.path.join(os_helper.TESTFN, "file.c") 647db96d56Sopenharmony_ci with open(c_filename, "w", encoding="utf-8") as file: 657db96d56Sopenharmony_ci file.write("int xx;\n") 667db96d56Sopenharmony_ci with open(os.path.join(os_helper.TESTFN, "file.py"), "w", 677db96d56Sopenharmony_ci encoding="utf-8") as file: 687db96d56Sopenharmony_ci file.write("xx = 'unaltered'\n") 697db96d56Sopenharmony_ci script = os.path.join(scriptsdir, "fixcid.py") 707db96d56Sopenharmony_ci output = self.run_script(args=(os_helper.TESTFN,)) 717db96d56Sopenharmony_ci self.assertMultiLineEqual(output, 727db96d56Sopenharmony_ci "{}:\n" 737db96d56Sopenharmony_ci "1\n" 747db96d56Sopenharmony_ci '< int xx;\n' 757db96d56Sopenharmony_ci '> int yy;\n'.format(c_filename) 767db96d56Sopenharmony_ci ) 777db96d56Sopenharmony_ci 787db96d56Sopenharmony_ci def run_script(self, input="", *, args=("-",), substfile="xx yy\n"): 797db96d56Sopenharmony_ci substfilename = os_helper.TESTFN + ".subst" 807db96d56Sopenharmony_ci with open(substfilename, "w", encoding="utf-8") as file: 817db96d56Sopenharmony_ci file.write(substfile) 827db96d56Sopenharmony_ci self.addCleanup(os_helper.unlink, substfilename) 837db96d56Sopenharmony_ci 847db96d56Sopenharmony_ci argv = ["fixcid.py", "-s", substfilename] + list(args) 857db96d56Sopenharmony_ci script = os.path.join(scriptsdir, "fixcid.py") 867db96d56Sopenharmony_ci with support.swap_attr(sys, "argv", argv), \ 877db96d56Sopenharmony_ci support.swap_attr(sys, "stdin", StringIO(input)), \ 887db96d56Sopenharmony_ci support.captured_stdout() as output, \ 897db96d56Sopenharmony_ci support.captured_stderr(): 907db96d56Sopenharmony_ci try: 917db96d56Sopenharmony_ci runpy.run_path(script, run_name="__main__") 927db96d56Sopenharmony_ci except SystemExit as exit: 937db96d56Sopenharmony_ci self.assertEqual(exit.code, 0) 947db96d56Sopenharmony_ci return output.getvalue() 95