summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorMartin Panter <vadmium+py@gmail.com>2016-09-11 09:32:26 (GMT)
committerMartin Panter <vadmium+py@gmail.com>2016-09-11 09:32:26 (GMT)
commitb7665386bc64e8f816a14ef63b72881a00a4d08b (patch)
treeaaa4212e44337740d3c9bfddbbfb94017ff41bd5 /Lib
parent53ba2d10e0d94a7609c0a71d41956a58e6a68f9d (diff)
downloadcpython-b7665386bc64e8f816a14ef63b72881a00a4d08b.zip
cpython-b7665386bc64e8f816a14ef63b72881a00a4d08b.tar.gz
cpython-b7665386bc64e8f816a14ef63b72881a00a4d08b.tar.bz2
Issue #27952: Get fixcid.py working with the re module
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_tools/test_fixcid.py91
1 files changed, 91 insertions, 0 deletions
diff --git a/Lib/test/test_tools/test_fixcid.py b/Lib/test/test_tools/test_fixcid.py
new file mode 100644
index 0000000..7f25c17
--- /dev/null
+++ b/Lib/test/test_tools/test_fixcid.py
@@ -0,0 +1,91 @@
+'''Test Tools/scripts/fixcid.py.'''
+
+from io import StringIO
+import os, os.path
+import runpy
+import sys
+from test import support
+from test.test_tools import skip_if_missing, scriptsdir
+import unittest
+
+skip_if_missing()
+
+class Test(unittest.TestCase):
+ def test_parse_strings(self):
+ old1 = 'int xx = "xx\\"xx"[xx];\n'
+ old2 = "int xx = 'x\\'xx' + xx;\n"
+ output = self.run_script(old1 + old2)
+ new1 = 'int yy = "xx\\"xx"[yy];\n'
+ new2 = "int yy = 'x\\'xx' + yy;\n"
+ self.assertMultiLineEqual(output,
+ "1\n"
+ "< {old1}"
+ "> {new1}"
+ "{new1}"
+ "2\n"
+ "< {old2}"
+ "> {new2}"
+ "{new2}".format(old1=old1, old2=old2, new1=new1, new2=new2)
+ )
+
+ def test_alter_comments(self):
+ output = self.run_script(
+ substfile=
+ "xx yy\n"
+ "*aa bb\n",
+ args=("-c", "-",),
+ input=
+ "/* xx altered */\n"
+ "int xx;\n"
+ "/* aa unaltered */\n"
+ "int aa;\n",
+ )
+ self.assertMultiLineEqual(output,
+ "1\n"
+ "< /* xx altered */\n"
+ "> /* yy altered */\n"
+ "/* yy altered */\n"
+ "2\n"
+ "< int xx;\n"
+ "> int yy;\n"
+ "int yy;\n"
+ "/* aa unaltered */\n"
+ "4\n"
+ "< int aa;\n"
+ "> int bb;\n"
+ "int bb;\n"
+ )
+
+ def test_directory(self):
+ os.mkdir(support.TESTFN)
+ self.addCleanup(support.rmtree, support.TESTFN)
+ c_filename = os.path.join(support.TESTFN, "file.c")
+ with open(c_filename, "w") as file:
+ file.write("int xx;\n")
+ with open(os.path.join(support.TESTFN, "file.py"), "w") as file:
+ file.write("xx = 'unaltered'\n")
+ script = os.path.join(scriptsdir, "fixcid.py")
+ output = self.run_script(args=(support.TESTFN,))
+ self.assertMultiLineEqual(output,
+ "{}:\n"
+ "1\n"
+ '< int xx;\n'
+ '> int yy;\n'.format(c_filename)
+ )
+
+ def run_script(self, input="", *, args=("-",), substfile="xx yy\n"):
+ substfilename = support.TESTFN + ".subst"
+ with open(substfilename, "w") as file:
+ file.write(substfile)
+ self.addCleanup(support.unlink, substfilename)
+
+ argv = ["fixcid.py", "-s", substfilename] + list(args)
+ script = os.path.join(scriptsdir, "fixcid.py")
+ with support.swap_attr(sys, "argv", argv), \
+ support.swap_attr(sys, "stdin", StringIO(input)), \
+ support.captured_stdout() as output:
+ try:
+ runpy.run_path(script, run_name="__main__")
+ except SystemExit as exit:
+ self.assertEqual(exit.code, 0)
+ return output.getvalue()