summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorMartin Panter <vadmium+py@gmail.com>2016-12-19 06:46:01 (GMT)
committerMartin Panter <vadmium+py@gmail.com>2016-12-19 06:46:01 (GMT)
commit619555d77bba05c71d9ef0a1c29ec53a17ebe2ca (patch)
treee1771befdcd8c9fbaa9b67d6830670e99873f226 /Lib
parent879199ba11947d9765b06806df54566fde75d498 (diff)
parentca3263c50c3b3a3719d2ec3ee7b30b8c669dcb19 (diff)
downloadcpython-619555d77bba05c71d9ef0a1c29ec53a17ebe2ca.zip
cpython-619555d77bba05c71d9ef0a1c29ec53a17ebe2ca.tar.gz
cpython-619555d77bba05c71d9ef0a1c29ec53a17ebe2ca.tar.bz2
Issue #25677: Merge SyntaxError caret positioning from 3.5
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_cmd_line_script.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/Lib/test/test_cmd_line_script.py b/Lib/test/test_cmd_line_script.py
index 38cb2e2..e058ecd 100644
--- a/Lib/test/test_cmd_line_script.py
+++ b/Lib/test/test_cmd_line_script.py
@@ -10,6 +10,7 @@ import os
import os.path
import py_compile
import subprocess
+import io
import textwrap
from test import support
@@ -539,6 +540,38 @@ class CmdLineTest(unittest.TestCase):
text = stderr.decode('ascii')
self.assertEqual(text, "some text")
+ def test_syntaxerror_unindented_caret_position(self):
+ script = "1 + 1 = 2\n"
+ with support.temp_dir() as script_dir:
+ script_name = _make_test_script(script_dir, 'script', script)
+ exitcode, stdout, stderr = assert_python_failure(script_name)
+ text = io.TextIOWrapper(io.BytesIO(stderr), 'ascii').read()
+ # Confirm that the caret is located under the first 1 character
+ self.assertIn("\n 1 + 1 = 2\n ^", text)
+
+ def test_syntaxerror_indented_caret_position(self):
+ script = textwrap.dedent("""\
+ if True:
+ 1 + 1 = 2
+ """)
+ with support.temp_dir() as script_dir:
+ script_name = _make_test_script(script_dir, 'script', script)
+ exitcode, stdout, stderr = assert_python_failure(script_name)
+ text = io.TextIOWrapper(io.BytesIO(stderr), 'ascii').read()
+ # Confirm that the caret is located under the first 1 character
+ self.assertIn("\n 1 + 1 = 2\n ^", text)
+
+ # Try the same with a form feed at the start of the indented line
+ script = (
+ "if True:\n"
+ "\f 1 + 1 = 2\n"
+ )
+ script_name = _make_test_script(script_dir, "script", script)
+ exitcode, stdout, stderr = assert_python_failure(script_name)
+ text = io.TextIOWrapper(io.BytesIO(stderr), "ascii").read()
+ self.assertNotIn("\f", text)
+ self.assertIn("\n 1 + 1 = 2\n ^", text)
+
def test_main():
support.run_unittest(CmdLineTest)